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?

Foi útil?

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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top