【问题标题】:Exception logging on request with WCF使用 WCF 请求异常日志记录
【发布时间】:2013-12-26 16:22:06
【问题描述】:

我的项目中有一组 Web 服务。所有这些 Web 服务都使用 Nlog 登录数据库,目前它使用继承 IClientMessageInspector 的类将所有请求和响应记录到数据库中。现在,当出现异常时,我只需要记录请求。我该怎么做?

public void AfterRecieveReply(ref Message,object correlationState)
{
    _logger.Debug(reply.ToString());
}

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
    _logger.Debug(request.ToString());
}

【问题讨论】:

    标签: c# wcf web-services logging soap


    【解决方案1】:

    如果服务器端代码抛出异常,它将被包装成 SOAP 错误。在您的AfterReceiveReply 方法中,异常将导致消息将IsFault 属性设置为true。

    没有办法知道BeforeSendRequest 中是否发生了这种情况,因为该异常甚至还没有发生;您必须记录每个请求,或者以某种方式保存它们以备后用。一种方法是从每个BeforeSendRequest 调用中返回一个新的Guid,并使用Dictionary<Guid, Message> 来存储所有请求。当回复表明发生故障时,您可以稍后查看异常请求。

    【讨论】:

    • Michael 你能给我一个示例代码我无法使用 DIctionary
    • 嗨,迈克尔,你告诉的技术奏效了,如果没有响应,然后它没有来 afterrecievereply 正确....比我如何记录请求,只要它不去 AfterRecieveReply 和每当响应丢失。
    • 这会更难,您需要某种计时器来检查您的字典中的“丢失”请求并记录它们。但是 WCF 调用应该是阻塞的,我认为即使超时,你也应该总是得到响应,我不确定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2011-10-23
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多