2011-09-23 82 views
1

當使用自定義的ServiceHostFactory時是否需要Dispose()?當使用自定義的ServiceHostFactory時,是否需要Dispose()?

在我的WCF .svc文件我已經定義了一個自定義的工廠爲: <%@ ServiceHost Factory="Service.ServiceHostFactory" %>

看來,一個dispose()不被因爲被覆蓋的CreateServiceHost()方法不會被調用在每次執行所謂的調用該服務的應用程序。 (另外,在每次調用之後都不會執行日誌記錄,並且我生成的trace.xml文件表示它正在被另一個進程使用)。

我確實有用 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 裝飾的服務,所以我期望別的事情正在發生,我不知道。在創建服務的實例的客戶端應用程序中,我通過finally塊處理引用Dispose(),但是需要在服務器端的Factory中執行類似的操作嗎?

Finally 
     service.Dispose() 
    End Try 

感謝

回答

4

服務主機工廠返回服務主機,而不是服務類的一個實例。通常在每次激活服務時調用該工廠一次,並使用它返回的主機,直到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)。

所以總之,你應該而不是配置你從服務主機工廠返回的服務(或者它是主機?)。如果你想處理服務處理,你應該實現你自己的實例提供者。

+0

我們正在使用代理服務器運行,所以我想知道...如果服務主機是在特定服務器上創建的,請說代理服務器,是否會限制隨後創建的實例的位置?我遇到問題,看起來服務的實例無法訪問。 – McArthey

+0

服務實例將在運行服務主機的任何地方運行。 – carlosfigueira

+0

感謝您的確認。理解這一點,並閱讀您的博客,已經很大程度上提高了我的理解。 – McArthey

相關問題