ICommunicationObject
上的Close
方法可能会抛出两种类型的异常,如MSDN在此处所述。我理解Close
方法为什么会引发这些异常,但我不明白为什么服务代理上的Dispose
方法在其周围没有使用try
调用Close
方法。难道你不希望在Dispose
方法中确保不会引发任何异常吗?ICommunicationObject
上的Close
方法可能会抛出两种类型的异常,如MSDN在此处所述。我理解Close
方法为什么会引发这些异常,但我不明白为什么服务代理上的Dispose
方法在其周围没有使用try
调用Close
方法。难道你不希望在Dispose
方法中确保不会引发任何异常吗?这似乎是.NET代码中的常见设计模式。以下摘自《Framework设计指南》:
如果“close”在该领域中是标准术语,请考虑提供Close()方法,除了Dispose()之外。在这样做时,重要的是使Close实现与Dispose相同...
在博客文章中,您可以找到解决System.ServiceModel.ClientBase设计问题的解决方法。
通常,Dispose 是你要确保不会抛出异常的地方之一。但是,根据这个 MSDN 论坛帖子,存在一些历史原因造成了这种行为。因此,推荐的模式是 try{Close}/catch{Abort} 范例。