关闭和处置WCF服务

时间:2020-03-05 18:42:20  来源:igfitidea点击:

正如MSDN在此处概述的那样,ICommunicationObject上的Close方法可以引发两种类型的异常。我知道为什么Close方法可以引发这些异常,但是我不明白的是为什么服务代理上的Dispose方法调用Close方法而没有try的原因。Dispose方法不是我们要确保不会引发任何异常的地方吗?

解决方案

回答

在.NET代码中,这似乎是一种常见的设计模式。这是《框架设计指南》的引文

Consider providing method Close(), in addition to the Dispose(), if close is standard terminology in the area. When doing so, it is important that you make the Close implementation identical to Dispose ...

这是一篇博客文章,我们可以在其中找到有关System.ServiceModel.ClientBase设计问题的解决方法

回答

是的,通常Dispose是我们要确保不会引发异常的地方之一。但是,基于此MSDN论坛线程,此行为有一些历史原因。因此,推荐的模式是try {Close} / catch {Abort}范例。