如果我在Silverlight的功能是這樣的:我真的需要調用CloseAsync與WCF
authenticationServiceClient.testCompleted += callback;
authenticationServiceClient.testAsync();
我真的需要調用closeasync或程序完成時,將它稱爲我?
authenticationServiceClient是一個局部變量的函數/
如果我在Silverlight的功能是這樣的:我真的需要調用CloseAsync與WCF
authenticationServiceClient.testCompleted += callback;
authenticationServiceClient.testAsync();
我真的需要調用closeasync或程序完成時,將它稱爲我?
authenticationServiceClient是一個局部變量的函數/
當程序完成後,所有打開的連接將被關閉。
如果您想在程序運行時處理資源,那麼它取決於客戶端使用的綁定。如果你正在處理一個HTTP綁定,那麼調用Close [Async]並不是必須的。如果你正在處理TCP綁定,那麼Close實際上會關閉套接字,並保持打開狀態(一段時間)。
我公司始終遵循這種模式的Silverlight:
// Call
serviceClient.CallMethodCompleted += (s, a) =>
{
// Error?
if (a.Error == null)
{
// Do something
}
else
{
// Handle error
}
// Close
serviceClient.CloseAsync();
};
// Call
serviceClient.CallMethodAsync();
這是沒有必要的,但它是很好的做到這一點,因爲瀏覽器確實有保持HTTP連接和一個小管家從來沒有傷害任何人。
有一些模式(我也遵循)在方法調用後關閉proxyclient,而不是在回調中。在這種情況下,代碼看起來更清晰,您不僅可以在回調中使用lambda,而且可以使用委託函數。 這樣的事情:
....
serviceClient.CallMethodCompleted += (s, a) =>.....
// Call
serviceClient.CallMethodAsync();
// Close
serviceClient.CloseAsync();
從我的理解你不必把它放在回調。嘗試一下。 – zachary 2011-05-20 14:35:05
你不需要,但那不是一個好習慣。 – 2011-05-20 17:09:52