Нужно ли Dispose () при использовании пользовательских ServiceHostFactory? - PullRequest
1 голос
/ 23 сентября 2011

Нужно ли Dispose () при использовании пользовательского ServiceHostFactory?

В моем файле WCF .svc я определил собственную Фабрику как: <%@ ServiceHost Factory="Service.ServiceHostFactory" %>

Похоже, что Dispose () не вызывается, поскольку переопределенный метод CreateServiceHost () не вызывается при каждом выполнении приложения, вызывающего службу. (Кроме того, ведение журнала не выполняется после каждого вызова, а созданный мной файл trace.xml говорит, что он используется другим процессом).

У меня есть служба, украшенная [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] поэтому я ожидаю, что происходит что-то еще, о чем я не знаю. В клиентском приложении, где создается экземпляр для службы, я выполняю ссылку на ссылку через блок finally, но необходимо ли выполнять аналогичную операцию на фабрике на стороне сервера?

    Finally
        service.Dispose()
    End Try

Спасибо

1 Ответ

4 голосов
/ 23 сентября 2011

Фабрика хостов сервиса возвращает сервис хост , а не экземпляр класса сервиса.Фабрика обычно вызывается только один раз за активацию службы, а возвращаемый хост используется до тех пор, пока пул приложений 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).

Короче говоря, вы должны не утилизировать сервис (или это хост?), Который вы возвращаете с фабрики хостов сервиса.Если вы хотите обработать удаление службы, вы должны реализовать свой собственный поставщик экземпляров.

...