我正在开发一个适用于WCF服务的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”事件处理程序中关闭它?
谢谢,
答案 0 :(得分:2)
Close
会阻塞。
如果您不希望阻止调用代码,还有BeginClose
/ EndClose
代码的异步变体,但如果您调用.Close
,我会看到它等到.Close
返回之前您的未完成来电解决。
另请注意,在已完成的处理程序中调用它可能会导致对同一客户端对象的多个异步调用出现问题...我建议使用.Close
或.BeginClose
<在调用代码中执行此操作/ p>
更新:From the documentation(虽然有点埋葬)
此方法导致 ICommunicationObject优雅地 从已打开状态转换为 封闭状态。 Close方法 允许任何未完成的工作 在返回之前完成。 (对于 例如,完成发送任何缓冲 邮件。)
...
在达到关闭状态后关闭返回。