Как избежать проблем холодного запуска с приложениями WCF, размещенными на IIS? - PullRequest
6 голосов
/ 18 февраля 2010

У нас есть система, в которой мы размещаем несколько приложений WCF в IIS. У некоторых из этих приложений немного больше времени запуска, занимающего пару секунд (больше, чем пользователи будут рады ждать). Как только он запущен и работает, все быстро, так что это действительно только время запуска.

Клиент также должен перерабатывать пулы приложений каждую ночь.

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

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

Поскольку одно приложение wcf в IIS может иметь только один заголовок узла, единственным другим способом будет настройка второго веб-сайта iis, указывающего на то же приложение. Я просто не уверен, что это поможет, так как это будет в другом контексте хоста.

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

Любые идеи будут высоко оценены.

Спасибо

Gineer

Ответы [ 2 ]

3 голосов
/ 19 февраля 2010

Отлично. Спасибо Dercsár .

После быстрого Google я нашел следующую тему по теме: Использование модуля разогрева приложений IIS

Ограничения здесь заключаются в том, что это доступно только в Windows 2008 R2 с IIS 7.5. Несмотря на то, что наш клиент находится в процессе обновления до Win 2K8R2, это может занять некоторое время.

Кто-нибудь знает решение, которое будет работать для Windows 2003 с IIS 6, или нам придется написать что-то, что сделает эту работу?

Gineer

2 голосов
/ 24 февраля 2010

Для тех из нас, кто работает на версии IIS до 7.5, мы находимся в процессе тестирования следующего решения ...

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

Затем мы подумали, что можем просто предоставить пользовательские заголовки хоста в веб-запросе локальному хосту.

Оказывается, вы не можете обновить имя заголовка хоста в WebRequest.Это поле доступно только для чтения.

При работе с прокси-классом все работает.См .: http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/1b35c665-fe32-4433-8877-a62f2d400a8e/

И небольшой фрагмент моего тестового кода ниже на C #.

        WebRequest req = WebRequest.Create("<Correct Host name>");
        req.Proxy = new WebProxy("127.0.0.1");

        StreamReader stream = new StreamReader(
            req.GetResponse().GetResponseStream());

        StringBuilder sb = new StringBuilder();

        String LineString;

        while ((LineString = stream.ReadLine()) != null)
        {
            if (LineString.Length > 0)
                sb.Append(LineString);
        }
        stream.Close();

        String response = sb.ToString();

Возможно, это не то, для чего был предназначен прокси-класс, но, похоже, он работает в любом случае.

Gineer

Ps.Нет, вам не нужно устанавливать какой-либо фактический прокси-сервер на локальный хост-компьютер.

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