2011-01-21 20 views
0

RequestInterceptorを使用すると、要求からHTTPヘッダーを抽出して処理できます。応答を更新することもできます。しかし、要求自​​体にHTTPヘッダーを更新および/または挿入して、後続のプロセッサー(例えば、インターセプター、許可マネージャー)が存在するようにする方法はありますか?WCF RESTサービス更新ヘッダー

答えて

1

WCFには、このような処理を行うための拡張ポイントのがあります。おそらく後にはIDispatchMessageInspectorを実装するカスタム動作があります。

次のようになりますクラスを作成します。

public class MyCustomBehavior : IDispatchMessageInspector, IEndpointBehavior 
{ 
    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) 
    { 
     //here you can work with request.Headers. 
     return null; 
    } 

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) 
    { 
     endpointDispatcher.DispatchRuntime.MessageInspectors.Add(this); 
    } 

    //there are a bunch of other methods needed 
    //but you can leave their implementations empty. 
    //... 
} 

あなたは、あなたがサービスを開くプログラム的に前にサービスのエンドポイントにカスタム動作を追加することができます

host.Description.Endpoints[0].Behaviors.Add(new WcfService2.MyCustomBehavior()); 

パオロPialorsiはgood tutorialを持っていますメッセージ・インスペクタを書くことを扱う。

+0

ヘッダーはMessageクラスで読み取り専用です。 public abstract MessageHeadersヘッダー{get; }。 –

+0

はい、 'Headers'はget-onlyですが、' Headers.Add(...) 'を呼び出してコレクションを変更することはできます。 –

1

あなたはhttp://wcf.codeplex.comを見てきましたか?新しいHTTPスタックには、このようなすべての種類の処理を可能にするパイプラインモデルがあります。

+0

プレビューのままではまだ使用できません。古いRESTスターターキットを使用しています。要求ヘッダーは読み取り専用です。公開密封クラスHttpRequestMessageProperty { ... public WebHeaderCollectionヘッダー{get; } ... } –

+0

@amit_g RESTスターターキットのライセンスは、MSが実際のバージョンをリリースすると基本的には使用できなくなります。サーバー側のものについては、実際のバージョンは.Net 4にあり、ライセンスはもはや有効ではありません。 –

関連する問題