Назад | Перейти на главную страницу

Как настроить IIS 7.5 без перезапуска + вызывать командный файл при каждом перезапуске ASP.NET

Запрос 1. Можно ли изменить «IP-адрес и ограничения домена» в IIS 7.5 без перезапуска IIS? Запрос 2 - как вызывать какой-либо пакетный файл (или исполняемый файл) каждый раз при перезапуске рабочего процесса ASP.NET?

У нас есть сайт ASP.NET MVC, который мы размещаем на сервере IIS 7.5. Нам нужно разогреть сайт, пройдя по многим страницам и функциональным возможностям сайта.

Идея состоит в том, чтобы реализовать что-то вроде ниже:

PS: Обратите внимание, что модуль разогрева IIS, который раньше был доступен на http://forums.iis.net/t/1176740.aspx был удален с некоторого времени.

PS: Пожалуйста, посмотрите https://stackoverflow.com/questions/7387123/how-to-warm-up-an-asp-net-mvc-application-on-iis-7-5/7387528#7387528 для запроса, ориентированного на разработчика.

Обновление 1. Следующий код был построен с использованием IIS в соответствии с ответом Скотта. К сожалению, вызов этих методов перезапускает рабочий процесс ASP.NET. Как это остановить? Кстати, я не публикую код для подпрограммы FindElement (), поскольку он кажется общим по своей природе.

    internal static void AllowOnlyLocalUsers()
    {
        using (ServerManager serverManager = new ServerManager())
        {
            Configuration config = serverManager.GetApplicationHostConfiguration();

            ConfigurationSection ipSecuritySection = config.GetSection("system.webServer/security/ipSecurity", "MyApplication");
            ipSecuritySection["allowUnlisted"] = false;

            ConfigurationElementCollection ipSecurityCollection = ipSecuritySection.GetCollection();

            ConfigurationElement addElement = ipSecurityCollection.CreateElement("add");
            addElement["ipAddress"] = @"127.0.0.1";
            addElement["allowed"] = true;
            ipSecurityCollection.Add(addElement);

            serverManager.CommitChanges();
        }
    }

    internal static void AllowAllUsers()
    {
        using (ServerManager serverManager = new ServerManager())
        {
            Configuration config = serverManager.GetApplicationHostConfiguration();

            ConfigurationSection ipSecuritySection = config.GetSection("system.webServer/security/ipSecurity", "MyApplication");
            ipSecuritySection["allowUnlisted"] = true;

            ConfigurationElementCollection ipSecurityCollection = ipSecuritySection.GetCollection();

            ConfigurationElement addElement = FindElement(ipSecurityCollection, "add", "ipAddress", @"127.0.0.1", "subnetMask", @"255.255.255.255", "domainName", @"");
            if (addElement != null)
            {
                ipSecurityCollection.Remove(addElement);
            }

            serverManager.CommitChanges();
        }
    }

Вы можете установить ограничения IP в applicationHost.config в теге местоположения для вашего сайта. Если вы это сделаете, это не приведет к перезапуску домена приложения. Другой вариант - перезапись URL-адресов на глобальном уровне.

Неделя 12 и неделя 18 в моей серии видео рассматриваются AppDomains и редактирование apphost.config.

Чтобы написать сценарий, используйте appcmd. Лучший способ сделать это - начать с редактора конфигурации в IIS, внести нужные изменения, а затем «Создать сценарий» на панели действий справа. Команда appcmd будет там.

Что касается второго вопроса, вам нужно будет обработать запуск вашего приложения в вашем проекте и запустить событие. Асинхронный вызов позволит ему запустить ваш сценарий запуска, позволяя странице продолжить, в противном случае вы столкнетесь с проблемой блокировки.

Microsoft выпустила модуль, который делает именно то, что вы просите. В Модуль инициализации приложения для IIS 7.5 улучшает скорость отклика веб-сайтов, загружая веб-приложения до поступления первого запроса.

Пока приложение запускается, модуль будет перенаправлять весь трафик на предоставленную вами html-страницу. Так что вам вообще не придется возиться с ip-ограничениями.

Вы можете указать серию URL-адресов, которые IIS будет предварительно загружать перед приемом запросов от реальных пользователей. Я не думаю, что вы можете получить истинный опыт входа в систему, но, может быть, вы можете настроить смоделированные страницы, которые не требуют входа в систему, чтобы выполнить ту же разминку, о которой вы просите?

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

Когда IIS обнаруживает, что активный рабочий процесс перезагружается, IIS не переключает активный трафик на новый переработанный рабочий процесс до тех пор, пока новый рабочий процесс не завершит выполнение всех URL инициализации приложений в новом процессе. Это гарантирует, что клиенты, просматривающие ваш веб-сайт, не увидят страницы инициализации приложения после того, как приложение работает и работает.

Этот модуль инициализации приложения IIS встроен в IIS 8.0, но доступно для загрузки для IIS 7.5.