【发布时间】:2013-09-26 14:05:49
【问题描述】:
我是 WCF 的新手。我很想知道关于异步方法的两件事:
当我向服务发送请求时,由于某种原因网络出现故障会发生什么情况?我会遇到任何异常或类似的情况吗?
如果在服务尝试响应请求时网络出现故障会发生什么?结果会丢失吗?
感谢您的帮助!
【问题讨论】:
标签: c# wcf asynchronous
我是 WCF 的新手。我很想知道关于异步方法的两件事:
当我向服务发送请求时,由于某种原因网络出现故障会发生什么情况?我会遇到任何异常或类似的情况吗?
如果在服务尝试响应请求时网络出现故障会发生什么?结果会丢失吗?
感谢您的帮助!
【问题讨论】:
标签: c# wcf asynchronous
通过 TCP(包括 HTTP)向 WCF 发送消息大致经历了三个阶段:
如果在 1. 期间连接丢失,您的服务将看不到该消息,您的客户端将抛出异常。
如果在 2. 期间连接丢失,我认为(但您可以轻松模拟,例如使用 Thread.Sleep())服务操作会继续执行。
如果在 3. 期间断开连接,响应将丢失,但操作将运行。
【讨论】:
SendTimeout 和@ 的时间长度987654324@ 将在您 (a) 等待结果的那一行提出。
如果服务没有响应,将会抛出异常。该程序将收到异常。 你可以使用 try...catch 块来捕捉它。如果要记录,则写入日志文件。
根据我的经验,大多数情况下第一次连接需要时间来初始化。
如果服务有响应,有时我会收到 EndpointNotFoundException 或 TimeoutException。
因此,我创建了一个方法来通过向服务传递消息“正在连接”来初始化连接,如果连接建立,服务将返回一个“已连接”消息。 否则,如果它返回异常,我会让它重试。
我设置重试次数= 5。所以如果连接仍然没有建立,它将循环5次。一旦建立,它将继续下一个过程。
我们无法控制网络连接,我们无法预料到哪一点,哪一部分会失败。 但是我们可以在服务失败时控制我们的程序。如果服务失败,取决于您想要做什么。可能会清理数据,重新启动进程或立即停止程序并记录错误以进行调查。
【讨论】: