Подтвердить что ты не робот

Каков эквивалент Global.asax Application_Start при использовании WAS в IIS7

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

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

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

4b9b3361

Ответ 1

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

Замок Виндзор и службы HTTP-протокола, отличные от 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);
   }
}

Чтобы процитировать Matt:

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