WCF 捕获异步异常

Posted

技术标签:

【中文标题】WCF 捕获异步异常【英文标题】:WCF Catch Asynch Exception 【发布时间】:2011-08-12 14:02:29 【问题描述】:

我有一种情况正在寻求建议。

我有一个 WCF 服务,在某些方法中我创建了一个对象,该对象反过来建立到服务器的套接字连接。我将这些连接对象“缓存”在对我的服务类“全局”的字典对象中。一旦建立这些连接,就会有一个与它们相关联的计时器,并且计时器回调会定期向服务器发送一条保持活动消息。

如果由于某种原因服务器连接中断,就会出现问题。发生这种情况时,我得到一个似乎会终止 WCF 服务的未处理异常。

我希望有一种方法可以捕获这些与计时器相关的异常并简单地关闭套接字并从缓存中删除连接对象,但我不确定是否有方法。一旦我离开使用连接对象的方法,似乎就没有什么可以捕获异步异常了。

【问题讨论】:

您能否发布一些有关异常的更多信息以及发送保持活动消息的计时器代码?你是如何连接到服务器的?你能告诉我们建立连接的代码吗? 您服务中的一些方法似乎是长期存在且长期运行的——您确定这是一个好的设计吗?这是单例服务吗? 【参考方案1】:

您需要开发某种连接管理器来保存和监控每个连接的状态。 keep-alive 计时器适用于状态跟踪,但您仍需要在使用前检查连接是否有效。

在任何情况下,使用错误连接时出现异常不应导致来自 WCF 服务的未处理异常,您应该将对连接管理器的访问包装在 try-catch 子句中。

干杯,

吉拉德

【讨论】:

我想知道是否可以向管理连接的对象添加一个事件,这样如果它们在发送时捕获异常,它们就可以触发一个事件。 “manager”对象将有一个事件处理程序,可以在事件触发时从缓存中删除连接对象。

以上是关于WCF 捕获异步异常的主要内容,如果未能解决你的问题,请参考以下文章

WCF 捕获异常“服务器没有提供有意义的回复..”

WP7:无法在对 WCF 服务的异步调用中捕获 FaultException

WCF Web 服务调用 - 要捕获哪些异常?

调用 WCF 服务时如何在 WPF 中捕获异常

捕获异步 void 方法引发的异常

来自异步方法的 Mvc .Net 捕获异常