访问WCF RequestInterceptor中的HttpContext

时间:2009-10-27 11:45:22

标签: wcf httpcontext wcf-rest

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

1 个答案:

答案 0 :(得分:9)

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

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

    <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” />
    </system.serviceModel>
    
  3. 完成后,您可以使用the static Current property随时访问当前的HttpContext实例。例如:

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

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

    有关该主题的更多信息,请参阅this section of MSDN titled WCF and ASP.NET