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

标签 .net wcf idisposable

使用自定义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.aspxhttp://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.iinstanceprovider.aspx)。

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

关于.net - 使用自定义ServiceHostFactory时是否需要Dispose()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7532288/

相关文章:

c# - Silverlight 和搜索引擎

c# - HTTP 和 HTTP WCF 服务

entity-framework - 使用和不使用带有 DbContext [代码优先] 的 using 语句有什么区别?

c# - 如果对象是 IDisposable 类的字段,我们是否应该将它们标记为只读

.net - [Wix Bundle Managed Bootstrapper]错误0x80070002 : Failed to create the managed bootstrapper application

c# - 事件队列无法正常工作 winforms

.net - httplistener 在端口 80 上不起作用?

wcf - 如何在 WCF 中设置多个后备端点

wcf - 端点与 web/app.config 的编程配置

c# - IDisposable 的享元和工厂问题