将响应正文从IDispatchMessageInspector传递到Application_EndRequest

时间:2012-04-20 19:26:16

标签: wcf rest global-asax idispatchmessageinspector

我想记录通过我的WCF REST服务进行流量传输的请求参数和响应主体。我可以在IDispatchMessageInspector中访问完整响应。我可以在Application_EndRequest中的操作期间访问我在Context.Items中存储的请求标头和其他项。

在我的调试过程中,我看到操作通过IDispatchMessageInspector,然后通过Application_EndRequest。我的想法是将响应存储在IDispatchMessageInspector中,然后在Application_EndRequest中,我将检索响应并将其与其他请求参数一起记录。

所以我的问题是:我应该在哪里存储响应,以便它可以在Application_EndRequest中访问?

1 个答案:

答案 0 :(得分: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"]

如果需要,您还可以传递更复杂的内容。希望有所帮助。