C# 如何捕获对WCF数据服务的调用响应?

C# 如何捕获对WCF数据服务的调用响应?,c#,.net,entity-framework,wcf-data-services,C#,.net,Entity Framework,Wcf Data Services,问题:如何捕获对WCF数据服务的调用的响应(或者更具体地说,响应的状态代码) 精化:我有一个相当简单的WCF数据服务和一个记录器。大致如下: public class MyDefault : DataService<MyEntities> { private Logger logger = LogManager.GetCurrentClassLogger(); public static void InitializeService(DataServiceConfi

问题:如何捕获对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)
    }
}
公共类MyDefault:DataService
{
专用记录器Logger=LogManager.GetCurrentClassLogger();
公共静态void InitializeService(DataServiceConfiguration配置)
{
config.SetEntitySetAccessRule(“*”,EntitySetRights.All);
config.DataServiceBehavior.MaxProtocolVersion=DataServiceProtocolVersion.V3;
}
受保护的覆盖无效OnStartProcessingRequest(ProcessRequestArgs args)
{
logger.Info(args.RequestUri);
}
受保护的覆盖无效HandleException(HandleExceptionArgs)
{
logger.Error(args.ResponseStatusCode)
}
}
目标是获取所有请求及其结果的日志。上面的代码几乎做到了这一点,因为404确实会被记录下来,就像自定义错误一样,当事情真的出错时

但错过的是事情进展顺利的时候。如果没有这些信息,日志看起来非常奇怪,并且无法区分发生了什么非常奇怪的事情(即:没有响应和没有日志),或者当一切都按其应该的方式运行时(即:成功,但仍然没有日志)

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

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


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

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

ProcessingPipeline.ProcessedRequest += ProcessingPipeline_ProcessedRequest;

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

这个托管在IIS中吗?Web服务器日志不足以满足您的需求?这足以实现我想要的。当出现问题时,它不会启动,但我有
HandleException
。但是,此方法不允许访问
HttpResponse
对象。此时,
HttpContext.Current.Response
对象尚未更新。(会是吗?)。如果到今天年底还没有办法达到这个目标,我会接受这个答案,因为它确实很好地回答了最初的问题。