使用自定义ServiceHostFactory时是否需要Dispose()?
在我的 WCF .svc 文件中,我将自定义工厂定义为:
<%@ ServiceHost Factory="Service.ServiceHostFactory" %>
似乎没有调用 Dispose(),因为在每次执行调用服务的应用程序时都没有调用重写的 CreateServiceHost() 方法。 (此外,除其他外,每次调用后都不会执行日志记录,并且我生成的trace.xml 文件表明它正在被另一个进程使用)。
我的服务确实装饰有
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
所以我预计还会发生一些我不知道的事情。在创建服务实例的客户端应用程序中,我通过finally block 对引用进行Dispose()处理,但是否有必要在服务器端的工厂中执行类似的操作?
Finally
service.Dispose()
End Try
谢谢
最佳答案
服务主机工厂返回一个服务主机,而不是服务类的实例。该工厂通常在每次激活服务时只调用一次,并且使用它返回的主机,直到 IIS 应用程序池被回收为止。服务实例由 IInstanceProvider
处理,而不是由服务主机处理(尽管在创建主机时,如果您想要处置服务实例,可以更改实例提供程序 - 有关实例提供程序的更多信息,请参阅http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/31/wcf-extensibility-iinstanceprovider.aspx和http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.iinstanceprovider.aspx)。
简而言之,您不应该处置从服务主机工厂返回的服务(或者是主机?)。如果您想处理服务处置,您应该实现自己的实例提供程序。
关于.net - 使用自定义ServiceHostFactory时是否需要Dispose()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7532288/