我希望在我的代码中实现更好的关闭WCF连接的解决方案,并处理该过程中出现的任何异常问题。我计划实施 这里 所述的解决方案,但我不想在我的类中重复此操作,而是想编写一个静态类,将我打开的连接发送到该类中进行关闭和异常处理,如下所示:
public static class WCFManager
{
public static void CloseConnection(ServiceClient serviceClient)
{
try
{
serviceClient.Close();
}
catch (CommunicationException e)
{
var error = e.Message;
serviceClient.Abort();
//TODO: Log error for communication exception
}
catch (TimeoutException e)
{
var error = e.Message;
serviceClient.Abort();
//TODO: Log error for timeout exception
}
catch (Exception e)
{
var error = e.Message;
serviceClient.Abort();
//TODO: Log error for exception
}
}
}
我遇到的问题是,我有许多服务客户端类型,但我不确定应该针对哪个基类使用WCFManager.CloseConnection()方法。每个服务客户端似乎都是一个独特的类,我找不到适合的接口或基类。例如:
//Inside Class1:
var alphaServiceClient = new AlphaService.AlphaServiceClient();
alphaServiceClient.Open();
WCFManager.CloseConnection(alphaServiceClient); //<-- Requires AlphaServiceClient type
//Inside Class2:
var betaServiceClient = new BetaService.BetaServiceClient();
betaServiceClient.Open();
WCFManager.CloseConnection(betaServiceClient); //<-- Requires BetaServiceClient type
问题:
1: 我想避免为每个服务客户端类型创建WCFManager.CloseConnection()的覆盖,但这是我唯一的选择吗?
2: 这是一个好的选择吗?还是将连接传递会导致更多的潜在问题?
3. 既然我正在跨2-4个服务器负载平衡我的WCF服务器,每次使用时关闭连接是最好的选择,还是创建对每个ServiceClient的静态引用是更好的方案(我很确定不是,但很想听听其他人的意见!)
提示: 我正在使用NetTcpBinding,并在解决方案资源管理器中添加ServiceReferences。
谢谢!