2010-03-23 154 views
2

我正在使用适用于WCF服务的Silverlight应用程序。在我的浏览器中加载服务元数据时,我注意到它提供了以下代码:Silverlight - 关闭服务

class Test 
{ 
    static void Main() 
    { 
     myServiceClient client = new myServiceClient(); 

     // Use the 'client' variable to call operations on the service. 

     // Always close the client. 
     client.Close(); 
    } 
} 

最后一行显示“始终关闭客户端”。我的问题是,什么时候应该关闭Silverlight应用程序中的客户端?如果在调用“[MyServiceOperation] Async”之后关闭它,还是应该在“[MyServiceOperation] Completed”事件处理程序中关闭它?

在异步场景中使用时,谢谢你,

回答

2

Close块。

也有代码的BeginClose/EndClose异步变种,如果你不想让你的调用代码块,但是从我可以看到,如果你调用.Close它会等到你的优秀调用之前.Close回报解决。

还要注意,调用它在你完成的处理可能导致多个异步调用同一客户对象的问题......我建议在调用代码要么.Close.BeginClose

更新这样做:From the documentation(虽然有点掩埋)

此方法导致一个 ICommunicationObject优雅地 从打开状态到 闭路状态转变。 Close方法 允许任何未完成的工作在返回之前完成 。在达到关闭状态后(对于 例如,发送完所有缓冲 消息。)

...

关闭回报。