由于网络不良,WCF异步方法失败

时间:2013-09-26 14:05:49

标签: c# wcf asynchronous

我是WCF的新手。我很想知道关于异步方法的两件事:

  1. 当我向服务发送请求时,由于某种原因网络出现故障会发生什么?我是否会遇到任何类型的异常或类似的东西?

  2. 当服务尝试响应请求时网络出现故障会怎样?结果会丢失吗?

  3. 感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

通过TCP(包括HTTP)向WCF发送消息将分为三个阶段:

  1. 客户端向WCF服务发送消息
  2. 只有在成功接收到整个消息后,才会对其进行反序列化,并将其内容传递给相应的服务操作。服务操作即将完成。
  3. 响应(即您从服务操作返回或抛出的内容)被发送到客户端。
  4. 如果在1期间连接丢失,您的服务将看不到该消息,您的客户端将抛出异常。

    如果在2.期间连接丢失,我认为(但您可以轻松地模拟它,例如使用Thread.Sleep()),服务操作将继续执行。

    如果在3.期间连接丢失,响应将丢失,但操作将会运行。

答案 1 :(得分:2)

如果服务没有响应,将抛出

异常。该程序将收到例外。 你可以使用try ... catch块来捕获它。然后写入日志文件,如果你想记录它。

根据我的经验,大多数第一个连接需要时间来初始化。 有时,如果服务提示响应,我会得到EndpointNotFoundExceptionTimeoutException

因此,我创建了一种通过将消息“连接”传递给服务来初始化连接的方法,如果连接建立,服务将返回“连接”消息。 否则,如果它返回异常,我将让它重试。

我设置了重试次数= 5.如果连接仍未建立,它将循环5次。一旦建立,它将继续进行下一个过程。

我们无法控制网络连接,我们无法预料到哪一点,哪一部分失败了。 但是我们可以在服务失败时控制我们的程序。如果服务失败,取决于您想要做什么。也许清理数据,重启过程或立即停止程序并记录错误进行调查。