Iis как отключить приложение
Веб-сервер IIS, как среда выполнения веб-приложения, имеет некоторое влияние на общую производительность. Например, чем короче конвейер обработки запросов в IIS, тем меньше кода будет выполняться и тем выше будет скорость работы. В IIS имеются механизмы, которые можно использовать для увеличения производительности приложения за счет снижения задержек и увеличения пропускной способности, а также некоторые механизмы, которые при правильной настройке могут увеличить общую производительность приложения.
Кэширование вывода
В IIS имеется два механизма кеширования: кеш в пространстве пользователя и кеш в пространстве ядра.
Кеширование в пространстве пользователя
Чтобы настроить кеширование, откройте приложение IIS Manager, выберите свое веб-приложение, откройте настройку Output Caching (Кеширование вывода), щелкните на ссылке Add (Добавить) в панели Actions (Действия), чтобы добавить новое правило кеширования, или выберите существующее правило для редактирования.
Чтобы создать новое правило кеширования в пространстве пользователя, добавьте новое правило, введите расширение имен файлов, которые требуется кешировать, и отметьте флажок User-mode caching (Кеширование в режиме пользователя) в диалоге Add Cache Rule (Добавить правило кеширования), как показано на рисунке ниже:
Кеширование в пространстве ядра
Настройка правил кеширования в пространстве ядра выполняется почти так же, как кеширование в пространстве пользователя. В диалоге настройки правила установите флажок Kernel-mode caching (Кеширование в режиме ядра) и выберите желаемый способ кеширования.
В одном правиле допускается использовать оба режима кеширования, в пространстве ядра и в пространстве пользователя. В этом случае IIS будет сначала пытаться применить кеширование в пространстве ядра. Если попытка не увенчается успехом, например, когда запрос содержит строку с параметрами, применяется кеширование в пространстве пользователя.
Если выбран вариант кеширования на определенный интервал времени в обоих режима, в пространстве ядра и в пространстве пользователя, оба интервала должны совпадать, в противном случае в обоих режимах будет использоваться интервал, установленный для кеширования в режиме ядра.
Настройка пула приложения
Понимание значения некоторых из этих настроек может помочь вам настроить работу пула и тем самым более полно удовлетворить потребности приложения.
Перезапуск
Изменяя параметр настройки перезапуска можно управлять моментом, когда пул приложения будет перезапускать рабочий процесс. Например, можно организовать перезапуск рабочего процесса через каждые несколько часов или когда будет превышен некоторый предел занимаемой памяти. Если с течением времени веб-приложение начинает потреблять большие объемы памяти (например, для хранения объектов), увеличение количества перезапусков может помочь удерживать его производительность на высоком уровне. С другой стороны, если веб-приложение не проявляет никаких проблем в процессе работы, уменьшение количества перезапусков предотвратит потерю информации о состоянии.
Тайм-аут простоя
По умолчанию пул приложения прекращает работу через 20 минут простоя. Если такие перерывы в работе ожидаемы, например, когда все пользователи уходят на обед, попробуйте увеличить тайм-аут или даже вообще отменить его.
Привязка процессов к ядрам процессора
По умолчанию пул приложения настроен так, что может использовать все доступные ядра процессора. Если у вас имеется какой-либо специализированный фоновый процесс, использующий все процессорное время, какое ему будет выделено, можете настроить привязку пула к определенным ядрам, освободив остальные для фонового процесса. Разумеется, при этом также потребуется настроить привязку фонового процесса к другим ядрам процессора, чтобы избежать конкуренции между ним и рабочим процессом за одни и те же ядра.
Веб-сад
Другим примером, когда может пригодиться наличие нескольких процессов, выполняющих одно и то же веб-приложение - использование 64-разрядного сервера IIS, выполняющего 32-разрядное веб-приложение. 64-разрядные серверы обычно имеют большой объем памяти, а 32-разрядное приложение может использовать не более 2 Гбайт, что часто приводит к увеличению частоты сборки мусора и, вероятно, к перезапускам пула приложения. Поддерживая два или три рабочих процесса для 32-разрядного веб-приложения, можно добиться более полного использования памяти сервера, уменьшить частоту сборки мусора и перезапусков пула приложения.
В настройках IIS пула приложения можно определить максимальное количество рабочих процессов, которое можно запустить для обслуживания запросов. Если установить этот параметр в значение больше 1 (значение по умолчанию), с ростом нагрузки на веб-приложение для него будут запускаться дополнительные рабочие процессы, вплоть до указанного максимума. Пул приложения, имеющий более одного процесса, называется «веб-садом» («Web Garden»). Каждый раз, когда устанавливается соединение с клиентом, оно связывается с рабочим процессом, который будет обслуживать запросы от этого клиента, при этом соблюдается равномерное распределение запросов от пользователей между процессами и уменьшаются накладные расходы на конкуренцию.
Имейте в виду, что использование веб-сада имеет и недостатки. Большее количество рабочих процессов занимает больший объем памяти, исключается возможность использовать механизм по умолчанию хранения информации о сеансе в памяти процесса, при выполнении нескольких рабочих на одном компьютере, между ними может возникать конкуренция за локальные ресурсы, например, за использование общего файла журнала.
Некоторое время назад мне была поставлена задача найти оптимальный способ программного управления удалённым IIS и реализовать его в виде некоего модуля. Задача интересная, с множеством трудностей, поэтому хочется поделиться своим опытом.
От первого варианта я отказался, поскольку довольно сложно разобраться в методах инструмента, что увеличивает шанс ошибки. При этом работа с ним напоминает работу с COM-компонентами.
Пример создания сайта с использованием WMI:
Второй вариант – это работа с конфигурационными XML файлами. То есть предполагалось практически вручную изменять root web.config файл на web серверах. Как понимаете, данный вариант меня тоже не устроил.
Третий же вариант позволил создавать сайты, делая всю низкоуровневую работу за разработчика. Дополнительным преимуществом этого инструмента является то, что IIS Manager использует именно эту библиотеку для выполнения всех доступных операций.
Конечно трудности при реализации решения всё-таки имелись. Я потратил много гугл-часов, чтобы заставить эту Microsoft.Web.Administration работать так, как мне было нужно. В Интернете можно найти много информации о том, как работать с данной библиотекой, что с её помощью можно сделать и т.п. Однако, вся эта информация сильно разбросана по разным статьям. Это и побудило меня написать о своём опыте «погружения в мир подводных камней» Microsoft.Web.Administration. Я постарался собрать в ней все проблемы, с которыми я столкнулся, и их решения. Вдруг кому-то пригодится.
Итак, начнём техническую часть.
У нас есть ферма web-серверов, каждый из которых управляется Windows Server 2012 Standard с IIS 8.0. Есть отдельный Application сервер, на котором запущен Windows service, использующий наш модуль. На этом сервере IIS не развернут. Нам нужно управлять web-серверами с Application сервера.
Подключение Microsoft.Web.Administration
Хорошо, создаём пользователя на удалённом сервере с логином и паролем. Создаём такого же пользователя на локальном компьютере с такими же логином и паролем (это важно, иначе приложение не залогиниться на удалённую машину). Запускаем. Та же проблема!
Изучаем проблему доступа более детально. Выясняется, что недостаточно создать пользователя с правами администратора. Ведь начиная с Windows Vista, появилась система UAC. И даже администратор компьютера в понимании этой системы вовсе не администратор, а пользователь с расширенными правами. Получается, чтобы наше приложение заработало, нужно отключить UAC на удалённом сервере. Однако, отключения UAC через Администрирование Windows недостаточно, т.к. проблема остаётся. Нужно полностью отключать UAC. Я делал это через реестр, как описано в статье по ссылке. Да, согласен, это не безопасно. Но это единственное решение. Благо заказчик на это согласен.
Последняя сложность, связанная с подключением библиотеки, также возникла из-за версионности сборок. На этапе активной разработки были найдены библиотеки с версиями 7.0.0.0 и 7.5.0.0 Вторая упрощала реализацию некоторых нетривиальных вещей, например, установку AlwaysRunning для пула приложений. Поэтому я сначала подключил её. Но после выгрузки на тестовый сервер, приложение снова упало. Оказывается, Microsoft.Web.Administration 7.5.0.0 работает только с IIS Express . Поэтому если вы планируете управлять полноценным IIS , используйте версию 7.0.0.0.
Реализация требований
Среди методов, которые я реализовал в модуле, есть и банальные, и такие, над которыми пришлось поломать голову. Я не буду описывать те вещи, которые можно легко найти в Интернете, и всё то, что и так понятно из названий методов библиотеки Microsoft.Web.Administration, например, создание веб сайта и байндингов для него. Вместо этого я сконцентрируюсь на проблемах, над которыми пришлось подумать, и для которых было сложно найти решение в Интернете (или вообще не удалось это сделать).
Многопоточность и многозадачность
Согласно требованиям к модулю, необходимо было предусмотреть возможность параллельного создания нескольких веб сайтов на одном или нескольких удалённых серверах. При этом два потока не могут управлять одним удалённым IIS , т.к. по факту это означает изменение одного и того же root web.config файла. Поэтому было принято решение сделать Lock потоков по имени веб сервера. Сделано это следующим образом:
В этом примере ServerName — это NetBIOS имя компьютера в локальной сети.
Каждый метод разрабатываемого модуля оборачивается в данный handler. Например, проверка существования веб сайта:
Почему мы каждый раз заново подключаемся к серверу?
Во-первых, система, в рамках которой выполнялось создание данного модуля, свободно конфигурируемая. Поэтому мы не знаем заранее, какие методы будут вызваны, в каком порядке и как долго будет нужен экземпляр класса модуля (назовём его MWAConnector).
Во-вторых, коннектор может понадобиться другому потоку. А если у нас открыто подключение одного коннектора, то мы не можем позволить подключение второго, т.к. иначе будет ошибка параллельного доступа к файлу на редактирование.
Исходя из этих соображений, в коде держится один экземпляр класса MWAConnector для нескольких операций, каждая из которых будет выполняться в независимом контексте отдельного подключения.
Недостаток такого подхода — затраты ресурсов на создание подключений. Этими издержками было решено пренебречь, т.к. они не являются узким местом модуля: непосредственное выполнение операции занимает в несколько раз больше процессорного времени, чем создание подключения.
Установка AlwaysRunning
Одной из задач было создание пула приложения с флагом AlwaysRunning. В свойствах класса ApplicationPool из библиотеки Microsoft.Web.Administration 7.0.0.0 можно найти многое: AutoStart, Enable32BitAppOnWin64, ManagedRuntimeVersion, QueueLength. Но там нет RunningMode. В сборке версии 7.5.0.0 это свойство есть, но, как было отмечено выше, эта версия работает только с IIS Express .
Решение проблемы нашлось. Делается это так:
Для сохранения изменений необходимо вызывать метод CommitChanges().
Установка PreloadEnabled
Другой проблемой, с которой я столкнулся, было отсутствие встроенного свойства для установки флага PreloadEnabled для веб приложений и сайта. Этот флаг отвечает за уменьшение времени первичной загрузки сайта после рестарта. Он полезен, когда сайт долго «прогревается». А некоторые из развёртываемых заказчиком сайтов именно такие.
В качестве решения я приведу фрагмент кода, который создаёт веб приложение для сайта:
Отметим, что имя веб-приложения должно начинаться с «/». Это необходимо, т.к. иначе возникнет ошибка в методе получения, создания или удаления приложения.
Изменение параметров сайта, как веб приложения
Иногда возникает необходимость изменить пул приложений для самого сайта. Проблема в том, что в классе Site нет такого свойства. Его можно найти только у экземпляра класса Application.
Решение – получить веб приложение сайта:
Удаление сайта
Более свежая библиотека Microsoft.Web.Administration содержит метод для удаления байндинга, принимающий вторым параметром флаг о необходимости удаления записи из системного конфига. Поэтому решение проблемы выглядит следующим образом:
В настоящее время данный модуль успешно справляется со своими задачами и работает в production. C его помощью еженедельно создаются десятки сайтов, веб приложений, пулов, виртуальных директорий.
Я привёл основные проблемы, с которыми столкнулся во время работы над модулем, и найденные мной решения. Надеюсь, этот материал будет кому-нибудь полезен. Если у кого-либо есть вопросы или предложения, задавайте – постараюсь ответить.
После чего жмем ОК и ждем, пока все скачается и установится. По данному пункту хотел еще пояснить, что проставлены необходимые для работы 1С компоненты, ничего кроме этого мне не понадобилось пока. Данный набор ставил и на WIN 7 и на WIN10
2. Первоначальная настройка IIS.
2.1. Дать доступ службе IIS к:
- Платформа1С (C:\Program Files (x86)\1cv8),
- База1С тут точного пути, нет у каждого он свой.
Для этого на каждой из папок клацаем правой кнопкой мыши Свойство-Безопасность - Изменить - Добавить -IIS_IUSRS; IUSR и проставить галочки полного доступа. После нажатия на ОК могут появиться ошибки "Отказ в доступе" нажимайте "Продолжить" и все.
2.2. Разрешить IIS работать с 32 битными приложениями.(Этот пункт нужен если у вас WIN 64-битная а 1C 32-битная, поэтому почти всем) Заходим Панель управления - Администрирование -Диспетчер служб IIS,
3. Публикация базы данных
3.1. Установка платформы обязательно с установленной галочкой "Модуль расширения веб-сервера"
3.2. Запускаем 1С под правами администратора в режиме Конфигуратор - Администрирование - Публикация на веб-сервере.
И все, больше ничего не нужно.
Есть один совет: Если база будет доступна через 1С, нелишнее для обеспечения дополнительной безопасности опубликовывать её с именем, которое будет ничего не значить. Лучше вообще случайным набором букв и цифр (qAdsfslj- например), пользователи, даже если работают через браузер, заходят по ссылке, а вам дополнительное спокойствие, но при таком подходе есть минус, если снял базу с публикации, например, для обновления, то имя будет меняться на наименование папки базы данных, и если не сохранил где-то это имя, то начинаешь искать эту ссылку, и ладно, если баз одна -две, а если их несколько десятков, то можно и перепутать. Попав пару раз, сделал следующим образом "D:\Bases1C\Buh\qAdsfslj" - где "Buh"-название понятное для меня а вот "qAdsfslj"- имя базы при публикации.
Если после установки и настройки IIS + 1C 8.3 (на АПАЧе все работало) внутри локальной сети все хорошо, а при входе через интернет вроде все хорошо, но при формировании табличного документа происходят странные вещи, вместо значков группировок отчета выходит "разорванный листочек", и выделить ячейку в отчете не получается (хотя при двойном нажатии расшифровки работают), а еще на экране нет картинок и штрихкодов в табличном документе (отчете) но если этот же отчет сохранить в эксель или распечатать, все выходит как надо. Значит, вы "попали" так же как и я (искал решение очень долго, почему и пишу данную статью).
Перепробовал все предложенные варианты настроек в интернете, не помогло, сменил Windows (7,10, 2008), компьютер, версии 1C и IIS (7.0, 7.5, 10) не помогает. При этом нужно учесть еще и такой момент что в этой же сети уже работает один сервер IIS+1С и там все работает как надо.
А дело было в том, что после того, как я запускал сервер, я тут же делал проброс порта через роутер наружу и поскольку уже имелся сервер работающий по 80 порту, пробрасывал на альтернативный (444, 98, 90, и тд. переустановок было много). и получал печальный результат. А нужно было сначала сделать прямой проброс 80-80 зайти в 1С через Интернет. а после можно менять порт на любой. Вариант был проверен неоднократно.
Буду рад, если кому-то поможет, и не позволит потерять очень много времени и нервов.
Конфигурация компьютера | |
Процессор: Intel Core i7-3770K | |
Материнская плата: Gigabyte GA-Z77X-D3H | |
Память: Corsair Vengeance 2x8GB | |
HDD: OCZ Vertex 4 256GB+WD RD1000M 3TB+WD30EZRX 3TB | |
Видеокарта: MSI GeForce GTX770 2GD5/OC Twin-Frozr 2GB GDDR5 | |
Блок питания: Corsair HX650 | |
CD/DVD: LG GH95NS | |
Монитор: DELL U2715H | |
ОС: Windows 7x64SP1 Максимальная | |
Прочее: Корпус:Lian Li PC-B25S Кулер:Prolimatech Armageddon, вентиляторы все Noktua |
Как правильно отключить эту службу в Панель управления\Программы\Программы и компоненты\ Включение или отключение компонентов Windows то есть какую галку снять ?
Или эта служба все таки нужна ? убрать галки
службы IIS
внедряемое веб-ядро служб IIS
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.
Конфигурация компьютера | |
ОС: OpenSUSE Tumbleweed en-us, Windows 10 Pro x64 en-us |
-------
Кто реку перешел, тому росы бояться ни к чему
Конфигурация компьютера | |
Процессор: Intel Core i7-3770K | |
Материнская плата: Gigabyte GA-Z77X-D3H | |
Память: Corsair Vengeance 2x8GB | |
HDD: OCZ Vertex 4 256GB+WD RD1000M 3TB+WD30EZRX 3TB | |
Видеокарта: MSI GeForce GTX770 2GD5/OC Twin-Frozr 2GB GDDR5 | |
Блок питания: Corsair HX650 | |
CD/DVD: LG GH95NS | |
Монитор: DELL U2715H | |
ОС: Windows 7x64SP1 Максимальная | |
Прочее: Корпус:Lian Li PC-B25S Кулер:Prolimatech Armageddon, вентиляторы все Noktua |
убрать галки службы IIS внедряемое веб-ядро служб IIS » |
Конфигурация компьютера | |
ОС: OpenSUSE Tumbleweed en-us, Windows 10 Pro x64 en-us |
В поле Начать поиск введите inetmgr и нажмите клавишу ВВОД.
На панели Действия выберите команду Пуск, если следует запустить веб-сервер, или Остановить, если следует его остановить.
Использование командной строки
Откройте окно командной строки с повышенными правами.
В командной строке введите net stop WAS и нажмите клавишу ВВОД; введите Y и нажмите клавишу ВВОД, чтобы остановить также службу веб-публикации.
Чтобы повторно запустить веб-сервер, введите net start W3SVC и нажмите клавишу ВВОД для запуска как службы активации Windows, так и службы веб-публикации.
Читайте также: