gpt4 book ai didi

wcf - 如何处理低级 WCF 错误?

转载 作者:行者123 更新时间:2023-12-04 12:01:53 25 4
gpt4 key购买 nike

我的服务中有标准错误处理:

  • 我有一个连接到服务的 IErrorHandler 来处理服务执行期间的意外错误。
  • 我在所有服务方法中都有 try/catch block 来处理预期的情况。

  • 但是,在某些情况下,服务器上会抛出异常并且两者都不会被调用。

    这是服务器异常没有发送到 IErrorHandler 的情况:
  • 将服务器绑定(bind)上的 receiveTimout 设置为 5 秒。
  • 在客户端执行此操作:

  • .
    Service1Client sc = new Service1Client();
    ICommunicationObject o = sc as ICommunicationObject;

    o.Open(); // open channel

    sc.GetData(10); // do a first call

    Thread.Sleep(10000); // wait longer than the server receiveTimeout

    sc.GetData(10); // Attempt another call: server throws a FaulException

    在这种情况下,错误会在服务器上引发,但我找不到处理它的方法(并记录它)。我知道会引发错误,因为如果我在服务器进程上附加调试器并中断所有异常,调试器就会中断。

    我发现了其他类似的情况,其中低级错误没有传递给我的程序。

    我在哪里可以 Hook 我的代码,以确保我可以在服务器上发生的所有异常返回到客户端应用程序之前处理它们?我应该实现自己的 IChannel 还是其他一些低级接口(interface)?

    谢谢

    2009 年 9 月 21 日更新 : 见 this Microsoft WCF 论坛上的主题。如果我想处理这种类型的异常,我可能必须实现自己的 Channel。当我有更多信息时,我会再次更新这篇文章。

    最佳答案

    经过大量研究和实验,答案是:

    目前(.Net 3.5)没有一种机制允许处理在 WCF 调用的上下文中可能发生的所有可能的异常。

    服务方法执行期间发生的异常可以通过以下方式轻松处理:

  • 所有服务方法中的 Try/catch block 以处理预期的情况。
  • IErrorHandler 连接到服务以处理服务执行期间的意外错误。

  • 但是,对于低级 WCF 基础结构错误,没有完美的解决方案。现有的最佳解决方案似乎是实现自定义 channel 以捕获更多异常。

    this Microsoft Connect Bug Report , Microsoft 确认没有办法处理所有类型的 WCF 基础结构错误。

    this thread on the Microsoft WCF forums ,有一个关于如何实现自定义 channel 的示例。该解决方案仅适用于 HTTP,不适用于 HTTPS。此外,自定义 channel 也不会捕获一些 WCF 基础结构错误(请参阅该特定线程中的更多详细信息)。

    关于wcf - 如何处理低级 WCF 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1271887/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com