0

问题:如何捕获对 WCF 数据服务的调用的响应(或更具体地说,响应的状态代码)?

详细说明:我有一个带有记录器的相当简单的 WCF 数据服务。类似于以下内容:

public class MyDefault : DataService<MyEntities>
{
    private Logger logger = LogManager.GetCurrentClassLogger();

    public static void InitializeService(DataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule("*", EntitySetRights.All);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
    }

    protected override void OnStartProcessingRequest(ProcessRequestArgs args)
    {
        logger.Info(args.RequestUri);
    }

    protected override void HandleException(HandleExceptionArgs args)
    {
        logger.Error(args.ResponseStatusCode)
    }
}

目标是获取所有请求及其结果的日志。上面的代码几乎可以做到这一点,因为 404 确实会被记录,就像自定义错误和事情真的出错时一样。

但错过的是当事情进展顺利时。如果没有这些信息,日志看起来真的很奇怪,并且无法区分真正奇怪的事情发生(即:没有响应和没有日志)或一切都按应有的方式工作(即:成功,但仍然没有日志)。

所以真正的问题是:如何使用与传入请求相同的记录器来记录响应的状态代码?

[编辑]
我可能过于简单化了。这是一个更大的系统的一部分,该系统已经进行了日志记录。关键是将所有日志记录在一个地方和一种格式。我之前曾简要介绍过消息记录。也许还不够,我现在正在研究更多。

然而,即使我能够根据自己的需要来塑造它,最初的问题已经激起了我的兴趣,我仍然想探索是否有可能至少看看这个HttpResponse对象。

4

1 回答 1

1

您可以尝试访问该DataServiceProcessingPipeline对象并附加到ProcessedRequest事件:

ProcessingPipeline.ProcessedRequest += ProcessingPipeline_ProcessedRequest;

void ProcessingPipeline_ProcessedRequest(object sender, DataServiceProcessingPipelineEventArgs e)
{
    int statusCode = e.OperationContext.ResponseStatusCode;
}
于 2013-08-23T08:00:29.457 回答