Pregunta

He creado e implementado un servicio WCF en SharePoint y yo soy el envío de solicitudes de uso de JQuery.Cada cosa está funcionando bien, excepto por los sub sitios.

Digamos que tengo estos dos direcciones Url de servicio:

 - http://localhost:1111/_vti_bin...../MethodName
 - http://localhost:1111/subsite/_vti_bin...../MethodName  

Cuando yo uso estas dos Url de la SPContext.Current.Site es el mismo, y es correcto.
Pero el SPContext.Current.Web es el mismo que es incorrecto.El uso de la segunda URL de la SPWeb el objeto debe ser el sub en la web y no la raíz de la web.

¿Cómo puedo obtener el sub sitio como un SPWeb objeto?Necesito pasar siempre por la web URL como parámetro a la WCF método?

¿Fue útil?

Solución

Después de buscar he llegado a la conclusión de que el SPContext.Current.Web siempre devolverá el RootWeb así que tengo la URL de la sub web.

Para evitar pasar el SPWeb URL para cada WCF método en el que necesito un objeto SPWeb, puedo hacer lo siguiente:

Estoy corriendo mi servicio WCF en ASP.NET comatibility modo que se puede utilizar el HttpContext objeto, y puedo usar HttpContext.Current.Request.RawUrl.Esta propiedad devuelve cada cosa en la cadena de dirección URL después de que el nombre de dominio.Entonces me puede truncar esta cadena para obtener el sub web de la dirección URL relativa y se pasa a la OpenWeb() método.

Ejemplo:

En el lado del cliente la URL argumento de que el AJAX de JQuery llamada es:

 http://localhost:1111/subsite/_vti_bin...../MethodName

En el lado del servidor si puedo usar HttpContext.Current.Request.RawUrl Obtengo:

/subsite/_vti_bin...../MethodName

Después de truncar esta cadena me pase el /subsite a la OpenWeb() método.

Otras ideas son muy apreciados.

Otros consejos

Tuve el mismo caso.Pero me llevé la Url desde aquí:

Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To;

Así que fue capaz de crear un objeto SPSite:

using (SPSite site = new SPSite(requestUri.Scheme + "://" + requestUri.Host)
{ 
    //your code
}
Licenciado bajo: CC-BY-SA con atribución
scroll top