Как инициализировать объект службы при самостоятельном размещении в WCF - PullRequest
4 голосов
/ 08 октября 2008

Я размещаю службу в службе Windows.

В следующем фрагменте создается экземпляр объекта ServiceHost:

Host = new ServiceHost(typeof(Services.DocumentInfoService));

Класс DocumentInfoService реализует интерфейс контракта, который имеет методы, которые вызывают бизнес-объекты, требующие инициализации (фактически строку подключения). В идеале я хотел бы, чтобы процесс хостинга получил строку подключения из файла конфигурации и передал ее конструктору для моего сервисного объекта, DocumentInfoService, который бы удерживал ее и использовал для передачи по мере необходимости бизнес-объектам.

Однако конструктор ServiceHost принимает объект System.Type, поэтому экземпляры DocumentInfoService создаются с помощью конструктора по умолчанию. Я заметил, что существует другой метод конструктора для ServiceHost, который принимает экземпляр объекта, но документы указывают, что он предназначен для использования с синглетонами.

Есть ли у меня способ добраться до моего объекта после его создания, чтобы я мог передать ему некоторые данные инициализации?

Ответы [ 2 ]

4 голосов
/ 08 октября 2008

ServiceHost создаст экземпляры службы на основе привязки и поведения, настроенных для конечной точки. Там нет конкретного момента времени, когда вы можете положиться на экземпляр службы. Следовательно, ServiceHost не предоставляет экземпляры службы.

Что вы можете сделать, это добавить код в свой конструктор сервисных объектов, чтобы сам прочитать соответствующие значения конфигурации через класс ConfigurationManager .

Конечно, если вы не сохраните свою конфигурацию в app.config, это не сработает для вас. Альтернативный подход мог бы иметь хорошо известный одноэлементный объект, к которому экземпляры службы обращаются при создании, чтобы получить необходимую конфигурацию.

И есть также возможность создания собственного ServiceHost или собственной ServiceHostFactory для явного управления созданием службы. Это даст вам доступ к новым экземплярам службы в момент создания. Я бы держался подальше от этого варианта, хотя. Это не стоит усилий для вашего сценария.

3 голосов
/ 08 октября 2008

Реализуйте свой собственный ServiceHost. Смотри также http://hyperthink.net/blog/servicehostfactory-vs-servicehostfactorybase/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...