что эквивалентно global.asax Application_Start при использовании WAS в IIS7 - PullRequest
34 голосов
/ 16 марта 2010

Я хотел бы использовать netTcpBinding для моего приложения WCF, которое в настоящее время размещено в IIS7, что означает его настройку для использования WAS. Это довольно просто, однако, мое приложение ранее использовало событие Application_Start в файле global.asax. Мне не требуется доступ к httpContext (который, как я понимаю, доступ был удален в IIS7), однако я все же хотел бы подключиться к методам start или init?

Существует ли эквивалент при размещении приложения в WAS в сравнении с IIS7?

Использование классического режима не вариант (опять же, мне не интересен httpcontext, и это работает только при использовании привязки http) - и я видел пример размещения статического класса в папке app_code, выглядит как ужасный хак.

Ответы [ 2 ]

26 голосов
/ 16 марта 2010

Я считаю, AppInitialize() - это метод, который вы ищете. Вот статья об использовании его для инициализации Castle Windsor в службе WCF, размещенной на WAS:

Виндзорский замок и службы WCF без протокола HTTP

Суть статьи в том, чтобы вместо Application_Start() не вызываться в WAS:

protected void Application_Start(object sender, EventArgs e)
{
   var container = new WindsorContainer("ioc.config");
   DefaultServiceHostFactory.RegisterContainer(container.Kernel);
}

Использование:

public class InitialiseService
{
   /// <summary>
   /// Application initialisation method where we register our IOC container.
   /// </summary>
   public static void AppInitialize()
   {
      var container = new WindsorContainer("ioc.config");
      DefaultServiceHostFactory.RegisterContainer(container.Kernel);
   }
}

Цитировать Мэтта:

Признаюсь, я потратил некоторое время, рассматривая Host Factory более подробно, глядя, чтобы обернуть DefaultServiceHostFactory. Тем не менее, появляется быть гораздо более простым решением, и это использовать маленькое документированный метод AppInitialize. Если вы создаете класс (любой класс), положить его в папку ASP.NET App_Code в вашем проекте и дать ему подпись метода, как определено ниже, этот маленький ребенок будет уволен именно тогда, когда вы этого хотите. Затем вы можете инициализировать ваш IoC контейнер там.

13 голосов
/ 08 декабря 2011

AppInitialize - это действительный метод инициализации вашего сервиса. Но есть некоторые другие методы, которые могут работать лучше для вас, и они описаны в этой статье: Как инициализировать размещенные службы WCF

...