2009-10-27 20 views
6

estoy usando el WCF REST stater kit para construir un XML formato a través de servicio HTTP. Como parte de esto estoy usando un RequestInterceptor para hacer la autenticación. Dentro del RequestInterceptor tengo acceso a un objeto System.ServiceModel.Channels.RequestContext desde el cual puedo obtener la URL de la solicitud, los parámetros de la cadena de consulta y otras cosas útiles. Lo que no puedo resolver es cómo obtener acceso al HttpContext de la solicitud. Tengo varias cosas almacenadas en el HttpContext a las que quiero acceder dentro del requestInterceptor, pero estoy luchando para llegar a ellas. Cuando uso el reloj rápido dentro de Visual Studio, puedo ver que está allí enterrado dentro de los miembros privados de requestContext. ¿Puede alguien mostrarme cómo acceder al HttpContext, tal vez utilizando la reflexión sobre el objeto RequestContext?acceso HttpContext dentro WCF RequestInterceptor

Respuesta

9

Puede acceder ASP.NET de HttpContext dentro de cualquier servicio WCF alojado en ASP.NET, siempre y cuando se enciende la compatibilidad. Esto se hace en dos pasos:

  1. Aplicar la AspNetCompatibilityRequirementsAttribute a su clase de servicio y establezca la propiedad RequirementsMode a Necesario
  2. Asegúrese de que habilita la compatibilidad mediante la configuración de los siguientes:

    <system.serviceModel> 
        <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” /> 
    </system.serviceModel> 
    

Una vez que haya hecho eso, puede acceder a la instancia actual de HttpContext en cualquier momento usando the static Current property. Por ejemplo:

foreach(HttpCookie cookie in HttpContext.Current.Request.Cookies) 
{ 
    /* ... */ 
} 

Nota que permite la integración con el tiempo de ejecución de ASP.NET no incurrir en alguna sobrecarga adicional para cada solicitud, por lo que si no lo necesita puede ahorrar algo de rendimiento al no permitir él y sólo mediante el System.ServiceModel.Web en tiempo de ejecución en su lugar. Usted tiene acceso a casi toda la información que necesita utilizando las clases HttpRequestResponseMessageProperty y HttpResponseMessageProperty.

Para obtener más información sobre el tema, ver this section of MSDN titled WCF and ASP.NET.

+0

que ya tengo en lugar de todo lo que mencionas anteriormente. Soy capaz de acceder al HttpContext dentro de un método OperationContract normal, pero dentro de un requestInterceptor (http://weblogs.asp.net/gsusx/archive/2008/11/26/extending-restful-services-with-a-custom-request -interceptor.aspx? CommentPosted = true # commentmessage) –

Cuestiones relacionadas