2009-10-27 58 views
6

我使用WCF REST stater kit來構建純粹的xml over HTTP服務。作爲使用RequestInterceptor進行身份驗證的Im的一部分。在RequestInterceptor內部,我可以訪問一個System.ServiceModel.Channels.RequestContext對象,從中我可以獲取請求URL,查詢字符串參數和其他有用的東西。我無法解決的是如何訪問請求的HttpContext。我有幾件事情存儲在HttpContext中,我想在requestInterceptor內部訪問,但是Im正努力去找它們。當我在Visual Studio中使用quickwatch時,可以看到它隱藏在requestContext的私有成員內部。有人可以告訴我如何訪問HttpContext,也許使用對RequestContext對象的反射?在WCF RequestInterceptor內部訪問HttpContext

回答

9

只要打開兼容性,就可以在ASP.NET中託管的任何WCF服務中訪問ASP.NET的HttpContext。這兩個步驟完成:

  1. 應用AspNetCompatibilityRequirementsAttribute到服務類,並設置RequirementsMode屬性爲必需
  2. 確保您啓用兼容通過配置如下:

    <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運行時。您可以使用HttpRequestResponseMessagePropertyHttpResponseMessageProperty類獲得幾乎所有您需要的信息。請參閱this section of MSDN titled WCF and ASP.NET

+0

我已經有了上面提到的所有東西。我能夠訪問正常的OperationContract方法內部但在一個requestInterceptor內的HttpContext(http://weblogs.asp.net/gsusx/archive/2008/11/26/extending-restful-services-with-a-custom-request -interceptor.aspx?CommentPosted =真#commentmessage) – 2009-10-28 14:34:46