我有一个 WCF 服务-客户端对。我们一直依赖于在客户端的工厂方法上调用 Open() 来确保在我们进行任何调用之前服务可用。就像是:
MyClient GetClient()
{
MyClient client = new MyClient();
try
{
client.Open();
return client;
}
catch(Exception)
{
//perform an (important) error-handling here
}
}
这样,调用者代码将执行以下操作:
client = factory.GetClient();
client.CallMethodInTheService();
他们不需要担心错误处理。
当我们在 wshttpbinding 中将安全模式设置为 Windows 并将 clientCredentialType 设置为 Windows 时,这将起作用。client.Open() 将在服务不可用时抛出异常,因此错误处理代码将被执行。但是,现在我们在无法使用基于 Windows 凭据的安全性的环境中进行部署,因此我们将安全模式设置为无。但是,这会导致 client.Open() 在服务不可用时不再抛出异常,而我们遇到了一些问题,因为我们依赖于工厂的 catch 块中的这段代码。
当我们使用消息安全性而不是禁用安全性时,Open() 抛出异常的原因是什么?如果 security 设置为 none,我们如何执行类似的可用性检查?我认为在每个单独的调用中放置带有错误处理的 try catch 并不是一个好的解决方案。工厂方法是否有另一种方法可以在返回客户端对象之前检查服务的可用性?