2012-04-20 1 views
0

私のWCF RESTサービスを介してトラフィックのあるリクエストパラメータとレスポンスボディを記録したいと思います。 IDispatchMessageInspectorで完全な応答にアクセスできます。また、Application_EndRequestの操作中にContext.Itemsに格納されているリクエストヘッダーやその他のアイテムにアクセスできます。IDispatchMessageInspectorからApplication_EndRequestへレスポンスボディを渡す

私のデバッグ中、私は操作がIDispatchMessageInspectorを通り、次にApplication_EndRequestを経由するのが分かります。私の考えは、IDispatchMessageInspectorのどこかにレスポンスを格納し、次にApplication_EndRequestにレスポンスを取得し、それを他のリクエストパラメータとともにログに記録します。

私の質問は次のとおりです。Application_EndRequestでアクセスできるようにレスポンスを保存する必要がありますか?

答えて

1

私は現在、同様のことをやろうとしています。私は着信要求をログに記録し、データベースに格納し、後で使用するためにログIDをエンドポイントに渡したいと考えています。

編集:あなたのAfterReceiveRequest呼び出しでは、単にあなたが現在のOperationContextのIncomingMessageProperties属性に必要なものは何でも追加修正された私は、その後で私のエンドポイントにLogRequestIDを読むことができます

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) 
    { 
     MessageBuffer buffer = request.CreateBufferedCopy(Int32.MaxValue); 
     request = buffer.CreateMessage(); 
     int LogRequestID = Logging.LogIncomingRequest(buffer.CreateMessage()); 

     OperationContext.Current.IncomingMessageProperties.Add("LogRequestID", LogRequestID); 

     return null; 
    } 

以下のコード次のコード:

OperationContext.Current.IncomingMessageProperties["LogRequestID"] 

必要に応じてさらに複雑なものを渡すこともできます。希望が役立ちます。

関連する問題