.net wcf连接处理最佳实践
我有一个wcf客户端 处理连接的最佳方式是什么 是否在每次需要联系服务时打开和关闭:.net wcf连接处理最佳实践,.net,wcf,client,.net,Wcf,Client,我有一个wcf客户端 处理连接的最佳方式是什么 是否在每次需要联系服务时打开和关闭: void doSomething(){ MyService service = new MyService(); //try service.doThis(10); ... service.doThat(20); service.Close() // catch } 或者,如果发生连接错误,我应该保持打开的引用并中止它并重新初
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?
}
}
}
第一种方法很常见。第二种方法是完全错误的。对于您的问题,最重要的提示是:如果关闭/中止代理,则不能再次使用它。它只打开一次 若使用第一种方法,则每次都会创建新代理,并“打开”新连接。这里的open对于不同的绑定和情况可能有不同的含义。打完电话后,您可以优雅地关闭代理。这还将通知服务器关闭连接 第二种方法使用类似的步骤,但最后一种方法强制关闭连接。这不会通知服务器连接已关闭。但您将无法在服务器上重用未关闭的连接
如果你想重用代理,你必须让它保持打开状态。此外,您还必须处理服务器超时(receiveTimeout-默认情况下,连接在10分钟不活动后关闭)和未处理的异常等其他复杂性。如果您有基于会话的连接或服务,每个未处理的异常都会使通信通道出现故障,并且您只能在通道上调用Abort。如果第一种方法很常见,是否每次打开新连接都会产生开销,或者开销可以忽略不计?这取决于您正在构建的应用程序类型和调用频率。每5-6秒调用一次,并行200个客户端,服务客户端是在客户端计算机或web应用程序上运行的应用程序?客户端是桌面应用程序,该服务托管在iis 6中