将响应正文从 IDispatchMessageInspector 传递到 Application_EndRequest



我想记录通过我的 WCF REST 服务传输的请求参数和响应正文。我可以在IDispatchMessageInspector中访问完整的响应。而且,我可以在Application_EndRequest操作期间访问存储在 Context.Items 中的请求标头和其他项目。

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

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

我目前正在尝试做类似的事情。 我正在记录传入请求,将其存储在数据库中,然后希望将日志 ID 传递给我的端点以供以后使用。 在 AfterReceiveRequest 调用中,只需将所需的任何内容添加到当前操作上下文的 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"]

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

相关内容

  • 没有找到相关文章

最新更新