【问题标题】:Exception throwing in WCF without throwing exception在 WCF 中抛出异常而不抛出异常
【发布时间】:2012-01-24 22:03:29
【问题描述】:

我有一个从客户端调用的 WCF 服务。当客户端之间来回数据密集,调试过程中客户端停止时,不知何故服务中出现异常,必须重新加载服务。就我而言,该服务大约需要 10 分钟才能加载(它加载数据)。我不会在 WCF 本身中抛出任何异常。我将所有服务调用/函数封装在“try and catch { return null }”中(将 null 返回给客户端而不是中断),但是客户端中仍然发生异常并且服务中断。

这个错误发生在哪里?这是通信异常,WCF 服务内部的一些随机异常。我想捕捉这个异常,而不是让整个服务出错(需要等待 10 分钟才能重新启动服务)。是否有任何工具/代码可以捕获 WCF 内的任何和所有异常并且不会使其出错。网络连接中断等一些例外情况是我们无法控制的。我不会抛出任何我自己的异常,例如“新异常(“发生某事”)。)

感谢您的帮助。

【问题讨论】:

  • 有什么异常?它说什么?有内部异常吗?需要更多细节。
  • 它是“CommunicationException”。
  • {"底层连接已关闭:接收时发生意外错误。"} {"无法从传输连接读取数据:现有连接被远程主机强制关闭。"} {“接收到asdf232.com/Service.svc 的 HTTP 响应时发生错误。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务正在关闭)。有关详细信息,请参阅服务器日志。"}

标签: c# wcf


【解决方案1】:

请参阅我的回答 here 以启用跟踪,以便您可以找出 WCF 服务中发生异常的位置。除此之外,我怀疑任何人都可以给你一个充分的理由来说明你的 WCF 服务出现问题的原因。

【讨论】:

  • 这发生在调试期间,它在 MSDN 通信异常文章中说。关于故障等的一些事情。
【解决方案2】:

只是猜测:您说您的服务会加载大量数据。您从服务中返回了多少数据?如果您返回一个巨大的列表,则此异常可能是由错误的客户端-服务器配置引起的。您可能应该增加 maxReceivedMessageSize 和 maxBufferSize;有时还会在服务器和客户端增加 DataContractSerializer 的 maxItemsInObjectGraph。

此外,为了捕获服务器上的所有异常而不是多个 try-catch 块,您可以实现 IErrorHandler。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-17
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2012-04-30
    • 2011-05-30
    相关资源
    最近更新 更多