如何捕获对WCF数据服务的响应?

时间:2013-08-22 15:50:28

标签: c# .net entity-framework wcf-data-services

问题:如何捕获对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会被记录,就像自定义错误和事情真的出错一样。

但是,当事情进展顺利时会发生什么。没有这些信息,日志看起来很奇怪,并且不可能区分真正奇怪的事情(即:没有响应和没有日志),或者当一切都按照它应该的方式工作时(即:成功,但仍然没有日志)。 / p>

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

[编辑]
我可能过于简单了。这是已经登录的更大系统的一部分。关键是要将所有日志记录保存在一个地方和一种格式中。我之前简要介绍过Message Logging。也许还不够,我现在正在考虑更多。

然而,即使我能够根据自己的需要进行塑造,最初的问题引起了我的兴趣,我仍然想探讨是否至少可以看一下{{ 1}}对象。

1 个答案:

答案 0 :(得分:1)

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

ProcessingPipeline.ProcessedRequest += ProcessingPipeline_ProcessedRequest;

void ProcessingPipeline_ProcessedRequest(object sender, DataServiceProcessingPipelineEventArgs e)
{
    int statusCode = e.OperationContext.ResponseStatusCode;
}