0

WCFRESTサービスを介してトラフィックする要求パラメーターと応答本文をログに記録したいと思います。IDispatchMessageInspectorで完全な応答にアクセスできます。また、Application_EndRequestでの操作中に、Context.Itemsに格納しているリクエストヘッダーやその他のアイテムにアクセスできます。

デバッグ中に、操作がIDispatchMessageInspectorを通過し、次にApplication_EndRequestを通過することがわかります。私の考えは、応答をIDispatchMessageInspectorのどこかに保存してから、Application_EndRequestに応答を取得し、他の要求パラメーターと一緒にログに記録することです。

だから私の質問は:Application_EndRequestでアクセスできるように応答をどこに保存する必要がありますか?

4

1 に答える 1

1

私は現在、似たようなことをしようとしています。着信要求をログに記録してデータベースに保存し、後で使用するためにログIDをエンドポイントに渡したいと考えています。AfterReceiveRequest呼び出しで、必要なものを現在のoperationcontextのIncomingMessageProperties属性に追加するだけです

編集:以下のコードを修正しました

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;
    }

次に、次のコードを使用して、エンドポイントでLogRequestIDを読み取ることができます。

OperationContext.Current.IncomingMessageProperties["LogRequestID"]

必要に応じて、より複雑なものを渡すこともできます。お役に立てば幸いです。

于 2012-04-25T10:11:52.080 に答える