Usuário com melhor resposta
Problemas ao utilizar Dispose e Close em objetos SharePoint. Será que fiz errado?

Pergunta
-
Olá,
Eu tenho uma web part que possui um único método.
Este método apenas insere um item em uma lista.
Para isso utilizo os objetos SPSite e SPWeb conforme parte de código abaixo:
using (SPSite site = SPContext.Current.Site)
{
using (SPWeb web = site.OpenWeb())
{
//Código que insere itens na lista
web.Dispose();
web.Close();
}
site.Dispose();
site.Close();
}
Quando rodo a web part no meu site, logo depois que aperto o botão que chama o método acima, me é mostrado a seguinte mensagem de erro:
Erro
Tentando usar um objeto SPWeb que foi fechado ou descartado e não é mais válido.
Será que fiz algo errado no código?
A mensagem de erro é exibida, mas mesmo assim o código funciona inserindo normalmente o item na lista.
O correto é utilizar o dispose e close nos objetos, certo?
Então por que do erro?
Obrigado
k2rto4-Pb - Analista SharePoint
- Editado TI DEV quinta-feira, 31 de maio de 2012 01:42
Respostas
-
Ola K2rto4-Pb
Ao utilizares "using" a framework automaticamente realiza o dispose, por isso nao consegue fazer dispose 2 vezes.
String SiteUrl=SPContext.Current.Site.url;
using (SPSite site = new SPSite(SiteUrl))
{
using (SPWeb web = site.OpenWeb())
{
//Código que insere itens na lista
}
}Tem aqui um manual com as boas praticas:
"Best Practices: Using Disposable Windows SharePoint Services Objects"http://msdn.microsoft.com/en-us/library/aa973248(v=office.12)
André Lage Microsoft SharePoint, CRM Consultant
Blog:http://aaclage.blogspot.com
Codeplex:http://spupload.codeplex.com/http://simplecamlsearch.codeplex.com/- Marcado como Resposta Fabian André GehrkeMicrosoft employee, Moderator quinta-feira, 31 de maio de 2012 12:47
-
Olá,
Você está fazendo Dispose utilizando o using no objeto SPSite, que foi criado internamente pelo Object Model do SharePoint.
Além disso, você está fazendo using no SPWeb e logo em seguida fazendo o Dispose nele.
Segue abaixo como deveria ser:
SPSite site = SPContext.Current.Site;
using(SPWeb web = site.OpenWeb())
{
//Código que insere itens na lista
}OU SIMPLESMENTE
SPSite site = SPContext.Current.Site;
SPWeb web = SPContext.Current.Web;
Obs.: Recomendo a utilização do SPDisposeCheck: http://archive.msdn.microsoft.com/SPDisposeCheck
abs
Andre Vicente Assad Gil
MCTS: Windows SharePoint Services 3.0: Application Development
MCTS: .Net Framework 2.0: Web Applications
Resolveu? Então marque como resposta!
Solved? So, mark topic as resolved!- Editado Andre Gil quinta-feira, 31 de maio de 2012 02:32 Incluindo informação
- Marcado como Resposta Fabian André GehrkeMicrosoft employee, Moderator quinta-feira, 31 de maio de 2012 12:47
Todas as Respostas
-
Olá,
Você está fazendo Dispose utilizando o using no objeto SPSite, que foi criado internamente pelo Object Model do SharePoint.
Além disso, você está fazendo using no SPWeb e logo em seguida fazendo o Dispose nele.
Segue abaixo como deveria ser:
SPSite site = SPContext.Current.Site;
using(SPWeb web = site.OpenWeb())
{
//Código que insere itens na lista
}OU SIMPLESMENTE
SPSite site = SPContext.Current.Site;
SPWeb web = SPContext.Current.Web;
Obs.: Recomendo a utilização do SPDisposeCheck: http://archive.msdn.microsoft.com/SPDisposeCheck
abs
Andre Vicente Assad Gil
MCTS: Windows SharePoint Services 3.0: Application Development
MCTS: .Net Framework 2.0: Web Applications
Resolveu? Então marque como resposta!
Solved? So, mark topic as resolved!- Editado Andre Gil quinta-feira, 31 de maio de 2012 02:32 Incluindo informação
- Marcado como Resposta Fabian André GehrkeMicrosoft employee, Moderator quinta-feira, 31 de maio de 2012 12:47
-
-
Ola K2rto4-Pb
Ao utilizares "using" a framework automaticamente realiza o dispose, por isso nao consegue fazer dispose 2 vezes.
String SiteUrl=SPContext.Current.Site.url;
using (SPSite site = new SPSite(SiteUrl))
{
using (SPWeb web = site.OpenWeb())
{
//Código que insere itens na lista
}
}Tem aqui um manual com as boas praticas:
"Best Practices: Using Disposable Windows SharePoint Services Objects"http://msdn.microsoft.com/en-us/library/aa973248(v=office.12)
André Lage Microsoft SharePoint, CRM Consultant
Blog:http://aaclage.blogspot.com
Codeplex:http://spupload.codeplex.com/http://simplecamlsearch.codeplex.com/- Marcado como Resposta Fabian André GehrkeMicrosoft employee, Moderator quinta-feira, 31 de maio de 2012 12:47
-