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

McA*_*hey 2 .net wcf idisposable

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

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

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

我确实装饰了该服务, [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 所以我预计还会发生一些我不知道的事情。在创建服务实例的客户端应用程序中,我通过finally块对引用进行Dispose()操作,但是是否有必要在服务器端的工厂中执行类似的操作?

    Finally
        service.Dispose()
    End Try
Run Code Online (Sandbox Code Playgroud)

谢谢

car*_*ira 5

服务主机工厂返回一个服务主机,而不是服务类的实例。该工厂通常在每次激活服务时只调用一次,并且使用它返回的主机,直到 IIS 应用程序池被回收为止。服务实例由 处理IInstanceProvider,而不是服务主机(尽管在创建主机时,如果您想要处置服务实例,则可以更改实例提供程序 - 有关实例提供程序的更多信息,请参阅http://blogs. msdn.com/b/carlosfigueira/archive/2011/05/31/wcf-extensibility-iinstanceprovider.aspxhttp://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.iinstanceprovider.aspx) 。

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