问题:如何捕获对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}}对象。
答案 0 :(得分:1)
您可以尝试访问DataServiceProcessingPipeline
对象并附加到ProcessedRequest
事件:
ProcessingPipeline.ProcessedRequest += ProcessingPipeline_ProcessedRequest;
void ProcessingPipeline_ProcessedRequest(object sender, DataServiceProcessingPipelineEventArgs e)
{
int statusCode = e.OperationContext.ResponseStatusCode;
}