访问WCF RequestInterceptor中的HttpContext

Dav*_*ans 6 wcf httpcontext wcf-rest

我正在使用WCF REST stater工具包来构建一个简单的xml over HTTP服务.作为这个Im的一部分,我使用RequestInterceptor进行身份验证.在RequestInterceptor内部,我可以访问System.ServiceModel.Channels.RequestContext对象,从中可以获取请求url,querystring params和其他有用的东西.我无法解决的是如何访问请求的HttpContext.我有几个东西存储在HttpContext中,我想在requestInterceptor中访问但是我很难找到它们.当我在Visual Studio中使用quickwatch时,我可以看到它隐藏在requestContext的私有成员中.有人可以告诉我如何访问HttpContext,也许使用RequestContext对象上的反射?

Dre*_*rsh 9

只要打开兼容性,就可以在ASP.NET中托管的任何WCF服务中访问ASP.NET的HttpContext.这分两步完成:

  1. 将AspNetCompatibilityRequirementsAttribute应用于您的服务类,并将RequirementsMode属性设置为Required
  2. 确保通过配置以下内容来启用兼容性:

    <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” />
    </system.serviceModel>
    
    Run Code Online (Sandbox Code Playgroud)

完成后,您可以使用静态Current属性随时访问当前的HttpContext实例.例如:

foreach(HttpCookie cookie in HttpContext.Current.Request.Cookies)
{
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

请注意,启用与ASP.NET运行时的集成确实会为每个请求带来一些额外的开销,因此如果您不需要它,则可以通过不启用它而仅使用System.ServiceModel.Web运行时来节省一些性能.您可以使用HttpRequestResponseMessagePropertyHttpResponseMessageProperty类访问所需的所有信息.

有关该主题的更多信息,请参阅MSDN标题为WCF和ASP.NET的此部分.