使用自定义ServiceHostFactory时是否需要Dispose()?

时间:2011-09-23 16:46:20

标签: .net wcf idisposable

使用自定义ServiceHostFactory时是否需要Dispose()?

在我的WCF .svc文件中,我已将自定义工具定义为: <%@ ServiceHost Factory="Service.ServiceHostFactory" %>

似乎没有调用Dispose(),因为在每次执行调用服务的应用程序时都没有调用重写的CreateServiceHost()方法。 (另外,在每次调用之后都没有执行日志记录,我生成的trace.xml文件说它正在被另一个进程使用)。

我确实有装饰的服务 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 所以我希望其他事情正在发生,我不知道。在创建服务实例的客户端应用程序中,我通过finally块对参照进行Dispose(),但是是否有必要在服务器端的Factory中执行类似的操作?

    Finally
        service.Dispose()
    End Try

由于

1 个答案:

答案 0 :(得分:4)

服务主机工厂返回服务主机,而不是服务类的实例。通常在每次激活服务时调用工厂一次,并且在返回IIS应用程序池之前使用它返回的主机。服务实例由IInstanceProvider处理,而不是服务主机(尽管在创建主机时,如果要部署服务实例,可以更改实例提供程序 - 有关实例提供程序的更多信息,请参阅{ {3}}和http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/31/wcf-extensibility-iinstanceprovider.aspx)。

简而言之,您应该处置您从服务主机工厂返回的服务(或者它是主机?)。如果要处理服务处理,则应实现自己的实例提供程序。