2011-05-18 28 views
1

如果我在Silverlight的功能是這樣的:我真的需要調用CloseAsync與WCF

authenticationServiceClient.testCompleted += callback; 
    authenticationServiceClient.testAsync(); 

我真的需要調用closeasync或程序完成時,將它稱爲我?

authenticationServiceClient是一個局部變量的函數/

回答

2

當程序完成後,所有打開的連接將被關閉。

如果您想在程序運行時處理資源,那麼它取決於客戶端使用的綁定。如果你正在處理一個HTTP綁定,那麼調用Close [Async]並不是必須的。如果你正在處理TCP綁定,那麼Close實際上會關閉套接字,並保持打開狀態(一段時間)。

0

我公司始終遵循這種模式的Silverlight:

// Call 
serviceClient.CallMethodCompleted += (s, a) => 
{ 
    // Error? 
    if (a.Error == null) 
    { 
     // Do something 
    } 
    else 
    { 
     // Handle error 
    } 

    // Close 
    serviceClient.CloseAsync(); 
}; 

// Call 
serviceClient.CallMethodAsync(); 

這是沒有必要的,但它是很好的做到這一點,因爲瀏覽器確實有保持HTTP連接和一個小管家從來沒有傷害任何人。

+0

從我的理解你不必把它放在回調。嘗試一下。 – zachary 2011-05-20 14:35:05

+0

你不需要,但那不是一個好習慣。 – 2011-05-20 17:09:52

0

有一些模式(我也遵循)在方法調用後關閉proxyclient,而不是在回調中。在這種情況下,代碼看起來更清晰,您不僅可以在回調中使用lambda,而且可以使用委託函數。 這樣的事情:

.... 
serviceClient.CallMethodCompleted += (s, a) =>..... 
// Call 
serviceClient.CallMethodAsync(); 
// Close 
serviceClient.CloseAsync();