有什么方法可以判断DuplexClientBase是否正忙?

时间:2013-08-16 08:20:28

标签: wcf

我在看微软的双工WCF示例:

它开始here,但最后有趣的位是here与客户端。

  // Wait for callback messages to complete before
  // closing.
  System.Threading.Thread.Sleep(5000);

  // Close the WCF client.
  wcfClient.Close();
  Console.WriteLine("Done!");

如果您取消睡眠,您将获得例外

  

会话在邮件传输完成之前已关闭。

很明显,客户知道空气中有什么东西,有没有办法询问它的当前状态?有一个状态,但只是定义它是打开还是关闭(即连接不活动)。

1 个答案:

答案 0 :(得分:1)

这不完全正确。您的方法是单向方法调用。因此,当您从客户端呼叫服务时,该呼叫(或一组呼叫)已完成。换句话说,“消息”已经传递给服务,并且没有期望响应,因为它是单向的。它可能会回调回调合约......它可能不会。

当您设置双工频道时,您正站起一个端点,让服务重新开启(客户端本质上成为服务)。如果您关闭客户端,那么如果/当服务决定回调时,将发生通信异常。这就是这种消息交换模式的工作方式。

你真的回答了自己的问题。也就是说,当您检查状态时,它是打开,关闭(或出现故障)。当您使用双工通道时,在这种情况下打开意味着通道上可能存在“活动”。这就是睡眠的原因 - 允许服务时间回电。如果您查看SDK示例(http://msdn.microsoft.com/en-us/library/vstudio/ms752216(v=vs.110).aspx),它基本上会做同样的事情,除非它在那里等待您在关闭客户端应用程序之前按Enter键。

因此,在实际应用程序中(不是像这样的基于控制台的示例),要么保持客户端代理处于活动状态,要么将消息交换模式更改为请求/回复模式。