Obtenha o SPWeb do SPContext no WCF hospedado no SharePoint
-
10-12-2019 - |
Pergunta
Criei e implantei um serviço WCF no SharePoint e estou enviando solicitações usando JQuery.Tudo está funcionando bem, exceto subsites.
Digamos que eu tenha estes dois URLs de serviço:
- http://localhost:1111/_vti_bin...../MethodName
- http://localhost:1111/subsite/_vti_bin...../MethodName
Quando eu uso esses dois URLs, o SPContext.Current.Site
é o mesmo e está correto.
Mas o SPContext.Current.Web
é o mesmo que está incorreto.Usando o segundo URL, o SPWeb
o objeto deve ser a subweb e não a web raiz.
Como posso obter o subsite como um SPWeb
objeto?Preciso sempre passar a URL da web como parâmetro para o método WCF?
Solução
Depois de pesquisar, concluí que o SPContext.Current.Web
sempre retornará o RootWeb
então preciso do URL da subweb específica.
Para evitar passar a URL do SPWeb para todos os métodos WCF onde preciso de um objeto SPWeb, posso fazer o seguinte:
Estou executando meu serviço WCF no modo de compatibilidade do ASP.NET para poder usar o HttpContext
objeto, e posso usar HttpContext.Current.Request.RawUrl
.Esta propriedade retorna tudo na string do URL após o nome de domínio.Então posso truncar essa string para obter o URL relativo da subweb e passá-lo para o OpenWeb()
método.
Exemplo:
No lado do cliente, o argumento URL da chamada JQuery AJAX é:
http://localhost:1111/subsite/_vti_bin...../MethodName
No lado do servidor, se eu usar HttpContext.Current.Request.RawUrl
Eu recebo:
/subsite/_vti_bin...../MethodName
Então, depois de truncar essa string, passo o /subsite
para o OpenWeb()
método.
Quaisquer outras idéias são muito apreciadas.
Outras dicas
Eu tive o mesmo caso.Mas peguei o URL daqui:
Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To;
Então consegui criar um objeto SPSite:
using (SPSite site = new SPSite(requestUri.Scheme + "://" + requestUri.Host)
{
//your code
}