在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。 这是分两步完成的:
确保通过配置以下设置来启用兼容性:
<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?