我真的需要使用WCF调用CloseAsync

时间:2011-05-18 20:29:07

标签: silverlight wcf

如果我在silverlight中有这样的功能:

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

我是否真的需要调用closeasync,或者在程序完成后是否会调用它?

authenticationServiceClient是函数/

的局部变量

3 个答案:

答案 0 :(得分:2)

程序完成后,所有打开的连接都将关闭。

如果要在程序运行时处置资源,则它取决于客户端使用的绑定。如果您正在处理HTTP绑定,则不一定要调用Close [Async];如果您正在处理TCP绑定,那么Close实际上将关闭套接字,该套接字保持打开状态(一段时间)。

答案 1 :(得分:0)

我总是在Silverlight上遵循这种模式:

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

    // Close
    serviceClient.CloseAsync();
};

// Call
serviceClient.CallMethodAsync();

这没有必要,但这样做很好,因为浏览器确实有HTTP保持活动,而且一点管家不会伤害任何人。

答案 2 :(得分:0)

有一些模式(我也遵循这些模式)在方法调用之后立即关闭proxyclient,而不是在回调中。在这种情况下,代码看起来更干净,您不仅可以在回调中使用lambda,还可以使用委托函数。 像这样的东西:

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