使用自定义ServiceHostFactory时是否需要Dispose()?
在我的WCF .svc文件中,我已将自定义工具定义为:
<%@ ServiceHost Factory="Service.ServiceHostFactory" %>
似乎没有调用Dispose(),因为在每次执行调用服务的应用程序时都没有调用重写的CreateServiceHost()方法。 (另外,在每次调用之后都没有执行日志记录,我生成的trace.xml文件说它正在被另一个进程使用)。
我确实有装饰的服务
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
所以我希望其他事情正在发生,我不知道。在创建服务实例的客户端应用程序中,我通过finally块对参照进行Dispose(),但是是否有必要在服务器端的Factory中执行类似的操作?
Finally
service.Dispose()
End Try
由于
答案 0 :(得分:4)
服务主机工厂返回服务主机,而不是服务类的实例。通常在每次激活服务时调用工厂一次,并且在返回IIS应用程序池之前使用它返回的主机。服务实例由IInstanceProvider
处理,而不是服务主机(尽管在创建主机时,如果要部署服务实例,可以更改实例提供程序 - 有关实例提供程序的更多信息,请参阅{ {3}}和http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/31/wcf-extensibility-iinstanceprovider.aspx)。
简而言之,您应该不处置您从服务主机工厂返回的服务(或者它是主机?)。如果要处理服务处理,则应实现自己的实例提供程序。