2011-03-23 77 views
3

我有WCF服务器和WCF客户端。当部署新版本的客户端时,我想检查它是否已准备好运行,所以我必须检查服务器是否在线。WCF:如何检查服务器是否可访问?

我不想做任何真正的服务器调用(因为调用可以改变生产数据),或者在服务器上创建空的{...}“测试”方法。

是否可以检查WCF服务器端点是否存在,并在没有方法调用的情况下侦听连接?

我想:

factory = new ChannelFactory<IServer>()) 
factory.CreateChannel(); 

factory = new ChannelFactory<IServer>()) 
factory.Open(); 

,但没有异常,如果服务器处于脱机状态。 如何在没有服务器方法调用的情况下检查服务器状态?

预先感谢您!

回答

5

不,没有办法检查端点是否正在侦听而不打电话给它。客户端可能无法连接到端点有各种原因,因此唯一真正确定的方法是通过拨打电话。另外请记住,终端可能随时无法访问,因此客户需要为此做好准备。

因此,有两种选择你:

  1. 在过去,我已经加入了Ping方法对我的服务,简单地返回true。但那只能告诉你,该服务在那个时候是可用的。
  2. 作为一个更可靠的机制,我可能会在每个服务调用(EndpointNotFoundException IIRC)上捕获相关的WCF异常并从中推导出失败。这允许您容忍随着时间的推移发生的故障 - 例如,在初始连接之后。
+0

嗨,@Samuel,你为什么放弃Ping方法? – 2011-03-23 10:07:08

+1

@Andrew,刚刚更新了我的回答 - 原因是你需要让Pinging确保服务仍然运行。只要尝试拨打电话并查看是否成功,就容易得多。 – 2011-03-23 10:10:51

+0

+1准确地说 - 即使在你的服务上有一个Ping方法**也不能保证**几秒钟内下一次服务调用会成功 - 所以它根本不会告诉你任何东西......只需调用服务并准备好处理可能发生的任何可能的异常! – 2011-03-23 10:14:36