【问题标题】:How can I get the exception object inside a IDispatchMessageInspector?如何在 IDispatchMessageInspector 中获取异常对象?
【发布时间】:2017-06-10 18:58:33
【问题描述】:

我的 WCF 应用程序使用 IDispatchMessageInspector 进行一些高级监控 - 发生错误和未发生错误时。

我正在寻找一种方法来获取在我使用 IDispatchMessageInspector.BeforeSendReply 方法时在我的服务中发生的异常,因为我需要根据异常类型执行特定操作。

我不是在寻找修改\记录我的错误,因为我已经使用自定义 IErrorHandler 这样做了。

当我在IErrorHandler 中时,我曾考虑将异常添加到OperationContext,并在我回到IDispatchMessageInspector 时简单地阅读它,但我更喜欢内置的东西。

当我在IDispatchMessageInspector.BeforeSendReply 方法中时,有什么方法可以获取异常?也许在 OperationContext 的某个地方?

【问题讨论】:

    标签: c# wcf idispatchmessageinspector operationcontext


    【解决方案1】:

    IDispatchMessageInspector interface 允许您查看在发送之前到达端点的消息以及在发送回客户端之前的相应响应消息。

    关于可能有用的 BeforeSendReply() 方法需要注意的几点:

    • 如果消息被分派到的操作是单向操作 操作,此方法仍将由 WCF 运行时调用 操作时您的 IDispatchMessageInspector 实现 完成了它的执行。但是,“回复”参数表示 响应消息将为空,因此请务必检查 在处理消息之前。
    • 您可以在您的实现中检测操作是否显示消息 通过检查IsFault 被派去抛出异常/故障 回复消息的属性。这对于单向来说也是如此 操作(即使客户端永远不会看到它,服务器端 调度程序仍然正确地通知消息检查员)。

    【讨论】:

    • 感谢您的回答,但您没有回答我的问题。我知道我可以检查消息是否有错误,并且我知道调用何时发生,我需要 Exception 实例,并且我需要它在 IDispatchMessageInspector 中,因为我有一些监视逻辑,我在那里执行成功和失败消息。
    猜你喜欢
    • 2010-12-12
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多