5

我有一个托管三个不同双工 WCF 通道的 Windows 服务。客户端可以连接以通过他们的回调合约将更新发送给他们。本质上存在三个 pub-sub 频道。

当客户端连接时,此服务需要很长时间才能反弹。调用ServiceHost.Close需要 10 秒才能返回(因此服务需要 30 多秒才能停止。)结果我closeTimeout的 in config 是 10 秒。更改此值表明这是问题的原因。

我该怎么做才能及时关闭频道?我不喜欢某些事情正在超时的想法。我可以打电话Abort,但似乎必须有更好的方法。我以前没有在非双工频道上看到过这种情况,所以假设这与它是双工的有关。

理想情况下,将立即通知客户端通道出现故障,以便用户可以立即看到更新已停止。

4

2 回答 2

1

“理想情况下,客户端会立即收到频道出现故障的通知,以便用户可以立即看到更新已停止。”

WCF 客户端实例具有您可以订阅的事件:

  • 关闭
  • 结束
  • 故障
  • 打开
  • 开幕。

一旦您的双工通道因任何原因停止,就会引发故障事件。

我想知道为什么您的服务主机需要 30 多秒才能关闭。你能提供一些示例代码吗?

于 2012-07-17T21:44:42.943 回答
0

可能,最好的方法是通知客户端(你有双工,所以你可以)并让客户端关闭通道。

于 2011-07-26T16:10:59.977 回答