Может ли сервис самостоятельного хостинга WCF иметь логику инициализации? - PullRequest
1 голос
/ 10 августа 2010

Я создал библиотеку служб WCF в VS2010 и могу запустить службу, выбрав Debug-> Start New Instance из контекстного меню проекта.

Могу ли я дополнительно определить некоторую логику инициализации, которая будет выполняться дослужба запущена?

РЕДАКТИРОВАТЬ:

Я пытаюсь добиться инициализации NHibernate и нескольких других элементов, чтобы они были готовы к моменту запуска службы.

1 Ответ

7 голосов
/ 10 августа 2010

Если вы ведете себя самостоятельно (то есть пишете свой хост WCF самостоятельно) - конечно, нет проблем, сделайте все, что вам нужно сделать, прежде чем позвонить .Open() на ServiceHost.

ServiceHost host = new ServiceHost(typeof(YourServiceClass));

// do your initialization here
........

host.Open();

Если вы используете IIS или WAS или AppFabric для размещения службы WCF: я сомневаюсь, поскольку это сервер активации на основе сообщений, например, они запускают хост службы для обработки запроса по требованию, когда поступает запрос, и я не знаю ни одной точки расширения, чтобы войти в процесс инициализации, если вы используете обычный класс ServiceHost для хостинга.

Тем не менее: вы, конечно, можете определить своих собственных потомков ServiceHost - получить свой хост настраиваемой службы из ServiceHost или ServiceHostBase - они должны дать вам очки, чтобы войти в процесс инициализации (переопределяя InitializeRuntime метод или реагирование на событие Opening).

См. Документы MSDN по:

  • ServiceHostBase абстрактный базовый класс для хостов настраиваемых служб
  • ServiceHost как конкретная реализация ServiceHostBase для возможности наследования от
  • Таможенный сервисный хост , объясняющий тонкости того, как этого всего достичь
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...