我使用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对象上的反射?
答案 0 :(得分:9)
只要打开兼容性,就可以在ASP.NET中托管的任何WCF服务中访问ASP.NET的HttpContext。这分两步完成:
请确保通过配置以下内容来启用兼容性:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled=”true” />
</system.serviceModel>
完成后,您可以使用the static Current property随时访问当前的HttpContext实例。例如:
foreach(HttpCookie cookie in HttpContext.Current.Request.Cookies)
{
/* ... */
}
请注意,启用与ASP.NET运行时的集成会为每个请求带来一些额外的开销,因此如果您不需要它,可以通过不启用它来保存一些性能,而只需使用System.ServiceModel.Web运行时。您可以使用HttpRequestResponseMessageProperty和HttpResponseMessageProperty类访问所需的全部信息。
有关该主题的更多信息,请参阅this section of MSDN titled WCF and ASP.NET。