wcf连接处理最佳实践

时间:2010-08-25 08:40:07

标签: .net wcf client

我有一个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?  
     }  
   }  
}

此致

1 个答案:

答案 0 :(得分:1)

第一种方法很常见。第二种方法是完全错误的。对您的问题最重要的提示是:如果您关闭/中止代理,则无法再次使用它。它只打开一次。

如果您使用第一种方法,则每次都创建新代理并“打开”新连接。这里打开对于不同的绑定和情况可以具有不同的含义。拨打电话后,您可以正常关闭代理。这也将通知服务器关闭连接。

第二种方法使用类似的步骤,除了强行关闭连接的最后一步。这不会通知服务器关闭连接。但是您将无法在服务器上重用未关闭的连接。

如果要重用代理,则必须将其保持打开状态。比你必须处理服务器上超时的一些其他复杂性(receiveTimeout - 默认连接在10分钟不活动后关闭)和未处理的异常。如果您有基于会话的连接或服务,则每个未处理的异常都会使通信通道出现故障,您只能在通道上调用Abort。