Каков метод ввода для службы WCF, размещенной на IIS? - PullRequest
2 голосов
/ 17 октября 2011

Немного справочной информации - Я пытаюсь разместить службу RESTful WCF в Azure. Как я понимаю, если у меня нет роли типа ASP.NET для роли, мне действительно не нужен класс global.asax (в котором есть метод application_start).

Из базового прототипирования все, что мне было нужно, это файл svc и его реализация, и он автоматически инициализируется при запуске роли (я имею в виду, размещается на IIS). Это здорово, потому что мне не нужен дополнительный код, кроме веб. Конфиг и мой сервис запущен. Мне не нужно создавать новый хост службы и начинать прослушивать его и т. Д. Я могу развернуть роль и сообщения POST в моем сервисе.

Проблема - У меня реализованы пользовательские классы журналирования и инициализации, которые нужно инициализировать при запуске службы. Я сконфигурировал свой сервис как одноэлементный, и я не уверен, куда мне поместить свои пользовательские компоненты инициализации.

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

Ответы [ 2 ]

2 голосов
/ 17 октября 2011

могу ли я предположить, что при поступлении первого запроса вызывается мой конструктор служб?

Да, но вы должны спросить себя, действительно ли вы хотите, чтобы ваша служба работала как синглтон?,Если вы довольны этим, тогда все будет хорошо;если вы не хотите, чтобы он работал как синглтон, вы должны посмотреть на ответ Рассела, используя собственную фабрику.

Посмотрите на Должен ли сервис WCF обычно быть одноэлементным или нет? для некоторого обсужденияо том, должны ли службы WCF быть одиночными.Вам нужно определиться с ситуацией, но обычно Службы WCF не являются одиночными, если они не нужны.

Чтобы реализовать собственную фабрику, см. Эту ссылку MSDN Расширение хостинга с помощью ServiceHostFactory.Как описано в ссылке, расширьте фабрику хоста службы следующим образом:

public class DerivedFactory : ServiceHostFactory
{
   public override ServiceHost CreateServiceHost( Type t, Uri[] baseAddresses )
   {
      return new ServiceHost(t, baseAddresses )
   }
}

И затем укажите свою фабрику в директиве ServiceHost

<% @ ServiceHost 
     Service="MyNamespace.MyService" 
     Factory="MyNamespace.DerivedFactory" %>
2 голосов
/ 17 октября 2011

Вы ищете ServiceHostFactory. Вы можете добавить деталь в файл SVC, чтобы использовать фабрику, где вы можете делать любые записи и т. Д., Которые вам могут понадобиться.

Я использовал это в прошлом, чтобы запустить фоновый рабочий, чтобы запустить отдельный поток для некоторой фоновой работы.

http://msdn.microsoft.com/en-us/library/system.servicemodel.activation.servicehostfactory.aspx

Надеюсь, это поможет вам достичь того, что вам нужно. :)

...