在WCF RequestInterceptor内部访问HttpContext

我正在使用WCF REST stater套件来构建一个简单的xml over HTTP服务。 作为使用RequestInterceptor进行身份验证的Im的一部分。 在RequestInterceptor内部,我可以访问一个System.ServiceModel.Channels.RequestContext对象,从中我可以获取请求URL,查询字符串参数和其他有用的东西。 我无法解决的是如何访问请求的HttpContext。 我有几件事情存储在HttpContext中,我想在requestInterceptor内部访问,但是Im正努力去找它们。 当我在Visual Studio中使用quickwatch时,可以看到它隐藏在requestContext的私有成员内部。 有人可以告诉我如何访问HttpContext,也许使用对RequestContext对象的反射?


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

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

    <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” />
    </system.serviceModel>
    
  • 完成之后,您可以随时使用静态Current属性访问当前的HttpContext实例。 例如:

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

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

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

    链接地址: http://www.djcxy.com/p/26891.html

    上一篇: Access HttpContext inside WCF RequestInterceptor

    下一篇: What is the WCF equivalent of HttpContext.Current.Request.RawUrl?