我有一个wcf客户端。
处理连接的最佳方法是什么?
每次需要联系服务时是否打开和关闭:
void doSomething(){
MyService service = new MyService();
//try
service.doThis(10);
...
service.doThat(20);
service.Close()
// catch
}
或者我应该保持打开引用并中止它并在发生连接错误时重新初始化:
class Myclass{
MyService service = new MyService();
...
void myFunction(){
try{
service.doThis(10);
}catch(...){
service.abort();
service = new Myservice();
// do something here, but what it a smart thing to to?
}
}
}
此致
答案 0 :(得分:1)
第一种方法很常见。第二种方法是完全错误的。对您的问题最重要的提示是:如果您关闭/中止代理,则无法再次使用它。它只打开一次。
如果您使用第一种方法,则每次都创建新代理并“打开”新连接。这里打开对于不同的绑定和情况可以具有不同的含义。拨打电话后,您可以正常关闭代理。这也将通知服务器关闭连接。
第二种方法使用类似的步骤,除了强行关闭连接的最后一步。这不会通知服务器关闭连接。但是您将无法在服务器上重用未关闭的连接。
如果要重用代理,则必须将其保持打开状态。比你必须处理服务器上超时的一些其他复杂性(receiveTimeout - 默认连接在10分钟不活动后关闭)和未处理的异常。如果您有基于会话的连接或服务,则每个未处理的异常都会使通信通道出现故障,您只能在通道上调用Abort。