2011-04-25 108 views
3

我有一种情况,我正在寻找建议。WCF抓住异步异常

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

如果出于某种原因导致服务器连接断开,则会出现问题。当发生这种情况时,我得到一个未处理的异常,似乎杀死了WCF服务。

我希望有一种方法,我可以捕获这些计时器相关的异常,只需关闭套接字并从缓存中删除连接对象,但我不知道有一种方法。看起来,一旦我离开使用连接对象的方法,没有什么可以捕获异步异常。

+0

你能发布有关异常,也许计时器代码发送保活消息,一些信息呢?你如何连接到服务器?你能向我们展示设置你连接的代码吗? – flayn 2011-04-25 21:18:56

+0

您服务中的一些方法似乎很长寿并且长期运行 - 您确定这是一个很好的设计吗?这是单身服务吗? – 2011-04-26 10:01:49

回答

0

你需要开发某种连接管理器,它保存并监视每个连接的状态。保持活动状态的定时器适用于状态追踪,但在使用之前,您仍然需要检查连接是否有效。

在任何情况下,使用故障连接时发生异常都不应导致WCF服务产生未发现的异常,您应该将对连接管理器的访问包装在try-catch子句中。

干杯,

吉拉德

+0

我想知道是否可以将事件添加到管理连接的对象,以便如果发送时它们捕获异常,则可以触发事件。 “管理器”对象具有事件处理程序,可以在事件触发时从缓存中删除连接对象。 – 2011-04-27 16:51:33