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

1

Есть ли способ получить код инициализации, который запускается при запуске веб-сайта с веб-службой или в пуле приложений? Код должен запускаться до того, как кто-либо попытается подключиться к Сервису. Я думал, что Application_Start в global.asax должен работать, но этот вызов также вызывается только после подключения первого клиента. Или, по крайней мере, что-то вроде "CronJob", которое запускается каждый раз, когда пул приложений перерабатывается и один раз вызывает веб-службу.

Обновление: оно должно быть выполнено сразу при запуске (начало сайта IIS или переработка пула приложений). Поскольку у меня есть некоторый интенсивный статический код инициализации, первый клиент, который подключается, имеет длительное время ожидания до возврата вызова. Я хотел бы предотвратить это, потому что это происходит каждый раз, когда пул приложений для этой службы перерабатывается.

Теги:
wcf

2 ответа

1
Лучший ответ

IIS 7.5 в Windows Server 2008 и выше поддерживает разминку пула приложений:

Функция разминирования пула приложений IIS. Эта функция активируется HTTP-запросом и предназначена для использования в большинстве приложений ASP.NET. Чтобы выполнить разминку приложений, IIS запускает рабочий процесс, а затем предварительно загружает CLR и любые необходимые сборки. Затем он использует симулятор HTTP-запроса для имитации реального запроса, который запускает оставшиеся задачи запуска, такие как компиляция и кеширование страниц, а также создание соединений с базой данных. Чтобы использовать этот подход, напишите специальный код запуска в методе Application_Start в Global.asax. Затем настройте разминку приложения IIS (в файле applicationHost.config) для URL-адреса приложения. Сведения о настройке IIS для разминки приложений см. В разделе "Пути конфигурации".

.Net 4.0 и выше поддерживает предварительный менеджер ASP.Net:

В.NET Framework 4 ASP.NET поддерживает функцию предварительной загрузки приложения. Эта функция может быть активирована либо HTTP, либо не HTTP-запросом, и дает вам программный контроль над всеми задачами предварительной загрузки. Этот подход предназначен для относительно сложных сценариев серверных приложений, где прикладной программе необходим независимый от протокола механизм для выполнения пользовательских задач предварительной загрузки. Примером такого приложения является Windows Communication Foundation (WCF). Чтобы использовать предварительный менеджер приложений ASP.NET, вы пишете управляемый тип, содержащий ваш код предварительной загрузки. Тип должен реализовывать интерфейс IProcessHostPreloadClient. Затем вы настраиваете свой собственный тип в качестве типа поставщика предварительной загрузки в конфигурации IIS в файле applicationHost.config.

1

Application_Start - это правильное место для добавления кода, но вы должны изменить настройки пула приложений. Обычно IIS запускает пул приложений и веб-сайт при первом запросе. Это можно изменить с AlwaysRunning опции AlwaysRunning в IIS 7.5.

В C:\Windows\System32\inetsrv\config\applicationHost.config:

<applicationPools> 
  <add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" /> 
</applicationPools>

http://msdn.microsoft.com/en-us/library/ee677260(v=azure.10).aspx

  • 0
    Я просто не могу заставить его работать. Я перепробовал все по ссылке. Кроме того, эти два параметра serviceAutoStartProvider=”Service” serviceAutoStartMode=”All/Custom” требуют, как кажется, AppFabric. Это работает без него?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню