Obtener SPWeb de SPContext en WCF alojado en SharePoint
-
10-12-2019 - |
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?
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
}