Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net wcf连接处理最佳实践_.net_Wcf_Client - Fatal编程技术网

.net 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 } 或者,如果发生连接错误,我应该保持打开的引用并中止它并重新初

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

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

若使用第一种方法,则每次都会创建新代理,并“打开”新连接。这里的open对于不同的绑定和情况可能有不同的含义。打完电话后,您可以优雅地关闭代理。这还将通知服务器关闭连接

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


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

如果第一种方法很常见,是否每次打开新连接都会产生开销,或者开销可以忽略不计?这取决于您正在构建的应用程序类型和调用频率。每5-6秒调用一次,并行200个客户端,服务客户端是在客户端计算机或web应用程序上运行的应用程序?客户端是桌面应用程序,该服务托管在iis 6中