2009-10-27 10 views
6

WCF REST stater kitを使用して、xml over HTTPサービスを構築しています。このImの一環として、RequestInterceptorを使用して認証を行います。 RequestInterceptorの内部では、System.ServiceModel.Channels.RequestContextオブジェクトにアクセスできます。このオブジェクトから、リクエストURL、クエリ文字列、その他の有用な情報を取得できます。私が解決できないことは、リクエストのHttpContextにアクセスする方法です。私はrequestInterceptor内でアクセスしたいが、私はそれらに到達するのに苦労しているHttpContextに格納されているいくつかのものがあります。 Visual Studio内でクイックウォッチを使用すると、requestContextのプライベートメンバーの中に埋め込まれていることがわかります。誰かが、おそらくRequestContextオブジェクトのリフレクションを使ってHttpContextにアクセスする方法を私に見せてもらえますか?WCF RequestInterceptor内のHttpContextにアクセス

答えて

9

互換性を有効にする限り、ASP.NETでホストされているWCFサービス内のASP.NETのHttpContextにアクセスできます。これは、2つのステップで行われます。

  1. あなたは以下を設定することで、互換性を可能にすることを確認し、あなたのサービスクラスにAspNetCompatibilityRequirementsAttributeを適用し、必要な
  2. にRequirementsModeプロパティを設定します。

    <system.serviceModel> 
        <serviceHostingEnvironment aspNetCompatibilityEnabled=”true” /> 
    </system.serviceModel> 
    

これを実行したら、いつでも現在のHttpContextインスタンスにthe static Current propertyを使ってアクセスできます。たとえば、次のようにASP.NETランタイムとの統合を有効にすると、要求ごとにいくつかの追加のオーバーヘッドが発生しないので、あなたがそれを必要としない場合は、あなたがそれを可能にし、ちょうど使用しないことによって、いくつかのパフォーマンスを節約できること

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

注意代わりにSystem.ServiceModel.Webランタイム。 HttpRequestResponseMessagePropertyクラスとHttpResponseMessagePropertyクラスを使用して、必要な情報をすべて入手できます。

件名の詳細については、this section of MSDN titled WCF and ASP.NETを参照してください。

+0

私はすでにあなたが上記のすべての事柄を整えています。私は通常のOperationContractメソッドの内部でHttpContextにアクセスできますが、requestInterceptor(http://weblogs.asp.net/gsusx/archive/2008/11/26/extending-restful-services-with-a-custom-request)の内部にあります。 -interceptor.aspx?CommentPosted = true#commentmessage) –

関連する問題