2015-05-19 129 views
1

如果我有一個創建CommunicationObject(確切地說是ClientBase)的循環,是否需要在其使用後調用Close()函數?處理WCF對象

while(true) 
{ 
Service client = new Service(); 
client.Close() // is in necessary? 
} 

是否CommunicationObject使用CLR收集後仍然保留的任何系統資源?如果是的話,如果我不關閉它會發生什麼?有沒有可能放棄這項服務?

+0

是的,你需要。否則,連接將不會關閉。此外,在處理服務客戶端時會出現一些問題[請參閱此問題的詳細信息](http://stackoverflow.com/questions/573872/what-is-the-best-workaround-for-the-wcf-client-使用塊發出) –

回答

0

是的,你需要關閉它。實際上服務是一次性的,所以使用使用陳述如下:

using(var client = new Service()){ 
    ... 
} // <-- this line will trigger the Close(); 

雖然有一點問題。如果客戶端狀態發生故障,Close方法可能會引發異常。做正確的事情會是這樣的:

由於這裏建議:https://msdn.microsoft.com/en-us/library/aa355056%28v=vs.110%29.aspx

個人而言,我覺得這有點矯枉過正。我始終只使用using語句。 (第一個代碼示例)