Отключить веб сервис 1с
Возьмем для примера веб-сервер на базе MS IIS с публикациями баз 1С. Бывают случаи, когда сеансы пользователей зависают. Например, при использовании веб/тонкого клиента 1С.
Одно дело — клиент-серверный вариант, с применением СУБД. С ним проще. Открываете административную консоль и через список закрываете эти зависшие сеансы.
В случае файловой базы все не так тривиально. В Конфигураторе вы можете видеть эти якобы активные сеансы, но отдельной команды в интерфейсе на закрытие — попросту нет.
Стандартная рекомендация — перезапуск веб-сервера. В принципе, она должна помочь, и зависшие сеансы на файловых базах очистятся.
Но, на практике выполнить сложнее, т. к. баз бывает несколько и ведется активная работа других пользователей. Могут быть ошибки и потери связи. Плюс недовольства сотрудников, что их работу прервали.
Какое может быть решение? Один из выходов — более тонкая настройка IIS.
Сделать так, чтобы каждая опубликованная база (приложение) выполнялась в отдельном пуле приложений. По умолчанию все публикации «привязываются» к DefaultAppPool.
Выберите время и настройте IIS, чтобы каждой информационной базе был сопоставлен отдельный пул.
Или сгруппируйте базы так, как вам удобно, чтобы сократить количество пулов. Выходит, что базы будут не в одной «куче», а по отдельности.
- Откройте консоль «Диспетчер служб IIS».
- В левой части выберите «Пулы приложений», а справа по команде «Добавить пул приложений…» зарегистрируйте новый пул с настройками, аналогичными пулу по умолчанию. Добавьте понятное имя, например, по названию публикации ИБ.
- Перейдите в список опубликованных баз.
- Выберите ИБ, через «Основные настройки…» укажите новый пул из ранее созданного в п. 2.
- Повторите шаги 1-4 для других информационных баз при необходимости.
Теперь, когда появляется задача по закрытию зависших сеансов в 1С — вы перезапускаете соответствующий пул, а не веб-сервер. Таким образом не мешаете своим коллегам работать с базами.
"То взлет, то посадка. "
Для работы с web-сервисом я добавил в конфигурацию обработку "ТаблоВылетов", а в ней - одну форму, которую назначил основной. На форму я положил поле выбора "ВыборАэропорта", поле ввода "ДатаРейса", панель "ПанельТабло" с двумя страницами "Прилет" и "Вылет", при этом я снял флаг "Распределять по страницам" в свойствах панели, и табличное поле "ТаблицаТабло".
Взаимодействие с web-сервисом происходит по принципу "запрос-ответ", при этом для web-сервиса создается специальный объект-посредник. Поэтому я добавил реквизит формы "СервисАэрофлот" произвольного типа.
Если внимательно почитать описание сервиса, то можно увидеть, что web-сервис предоставляет данные о прилетах и вылетах через вызовы методов Arrival и Departure соответственно. При этом оба метода принимают в качестве параметров код аэропорта и нужную дату. Кроме того, web-сервис предоставляет возможность получить список аэропортов, по которым имеются данные в системе. Достаточно очевидным является следующий сценарий взаимодействия с web-сервисом:
1. Получить список аэропортов;
2. Выбрать нужный аэропорт и дату;
3. Получить данные о прилетах или вылетах;
Но прежде чем обращаться к web-сервису, необходимо инициализировать объект-посредник (типа WSПрокси), что я и сделал в обработчике открытия формы:
Первым параметром передается URI пространства имен web-сервиса. Узнать его можно открыв свойства web-сервиса в дереве WS-ссылки. Вторым и третьим параметром параметрами передаются соответственно имя и порт web-сервиса.
(не надо путать понятия "имя", "порт", "прокси" и т.п. в применении к web-сервисам с более привычными понятиями протокола TCP/IP. Соответствие между ними если и есть, то скорее смысловое. В общем случае нужно понимать, что, например порт web-сервиса и TCP-порт - это абсолютно разные вещи).
Таким образом я проинициализировал объект СервисАэрофлот типа WSПрокси, который по-сути своей является "оберткой" web-сервиса. Через него я смогу обращаться к методам web-сервиса как к "родным" методам платформы.
Первым делом я получил список аэропортов и заполнил список поля выбора "ВыборАэропорта":
Тут нужен небольшой комментарий по конструкции СписокАэропортов=СервисАэрофлот.AirportList().ПолучитьСписок("list");
Дело в том, что значения, возвращаемые методами web-сервисов, представляются в платформе объектами типа ОбъектXDTO. Поскольку тематика технологии XDTO выходит за рамки этой статьи, скажу лишь, что для превращения этого объекта в список (чем он и является), я вызвал его метод ПолучитьСписок(). Остальное в коде достаточно очевидно, включая названия полей структуры Аэропорт, которые я нашел на странице описания web-сервиса.
Теперь можно запустить конфигурацию и убедиться, что список поля выбора заполняется названиями аэропортов:
"День отлета, день прилета. "
Теперь у меня практически все готово для того, чтобы заставить мое табло функционировать. Осталось только его "выкрасить и выбросить" :) Чем и займусь:
Для того, чтобы проверить как это все работает, я добавил на командную панель формы кнопку "Обновить" с соответствующей картинкой, а в ее обработчике написал такое:
Сохраняю, запускаю, выбираю, нажимаю, получаю:
В версии 8.3.9 мы выполнили значительное количество задач по оптимизации разных механизмов платформы. Здесь хочется рассказать об одной из них. Это повышение производительности веб-сервисов.
Переиспользование сеансов
Недостаточная производительность веб-сервисов объяснялась тем, что каждый вызов веб-сервиса имел значительные накладные расходы на создание и завершение сеанса. Причём при создании каждый раз выполнялся обработчик УстановкаПараметровСеанса(), который в типовой конфигурации может быть довольно «тяжёлым».
Кроме этого существовал и функциональный недостаток. Веб-сервисы не обладали состоянием. Это не позволяло реализовывать логику, использующую сохранение состояния между вызовами веб-сервиса.
Этих результатов удалось достичь за счёт того, что мы реализовали две различные стратегии, обеспечивающие переиспользование сеансов:
При автоматическом переиспользовании сеансов клиент не имеет возможности влиять на количество сеансов и время их жизни. Ему просто автоматически выделяется сеанс из существующего пула сеансов. Такая стратегия подходит для высоконагруженных публичных сервисов, к которым обращаются клиенты, выполняющие шаблонные операции, и обладающие унифицированными привилегиями.
Например, это может быть автоматизация торговой деятельности удаленных торговых точек, предусматривающая периоды пиковой нагрузки на сервер. Для обработки будет выделено нужное количество сеансов. Они будут завершены по мере падения нагрузки.
Стратегия ручного управления сеансами подразумевает, что клиент самостоятельно управляет количеством сеансов и временем их жизни. Эта стратегия лучше подходит для высокоинтегрированных систем в рамках одной организации. Вы можете реализовать собственный алгоритм, который будет управлять временем жизни сеансов и их количеством.
Средства управления
- reuseSessions – аналог свойства ПовторноеИспользованиеСеансов, может принимать значения autouse, use и dontuse;
- sessionMaxAge - аналог свойства ВремяЖизниСеанса;
- poolTimeout - используется при автоматическом управлении сеансами, содержит время ожидания доступности сеанса;
- poolSize - используется при автоматическом управлении сеансами, содержит максимальное количество сеансов, которое может быть создано в пуле.
Например, файл default.vrd может выглядеть так:
Автоматическое переиспользование сеансов
Сеансы в пуле хранятся в разрезе типа сервиса, наименования сервиса, пользователя/пароля, значений разделителей и безопасного режима. Причём в пуле может быть несколько сеансов с одинаковыми значениями перечисленных реквизитов.
При вызове платформа проверяет, есть ли простаивающий сеанс с подходящим сочетанием этих реквизитов. Если такой сеанс есть, то он выделяется для обработки вызова. Если такого сеанса нет, то создается новый сеанс и выделяется для обработки.
Сеанс автоматически завершается по истечении периода бездействия (ВремяЖизниСеанса).
Если достигнуто максимальное количество сеансов (poolSize), то вызов ждет указное время (poolTimeout). Если за это время подходящий сеанс не освободился, то возвращается ошибка со статусом 406 Not Acceptable.
Настройки автоматического пула сеансов действуют в рамках публикации. Это значит, что если у вас есть несколько публикаций для одной и той же информационной базы, то при вызове действуют те параметры, которые указаны в публикации, к которой обращается текущий вызов. Таким образом, если в одной публикации для сервиса указан лимит в 3 сеанса, а в другой публикации 5, то общее количество сеансов, которое может быть создано для вашей информационной базы равняется сумме этих значений 8.
При выборе размера пула следует учитывать все разрезы, в которых хранятся сеансы в пуле. Мы рекомендуем устанавливать размер пула немного больше, чем количество возможных вариантов. Это позволит вам избежать ситуации, когда пул заполнен сеансами, и вызов с новой комбинацией разделителей/пользователей обработан быть не может.
Эта стратегия не подходит для сценариев, в которых нужно использовать сохранённое состояние сеанса на сервере. Потому что нет никакой гарантии, что при следующем вызове клиент будет подключен к тому же самому сеансу. Как мы говорили в начале, в пуле может быть несколько сеансов с одинаковыми значениями ключевых реквизитов.
Управление сеансами
После получения такого заголовка на сервере стартует сеанс информационной базы, происходит аутентификация, установка разделителей и вызывается обработчик УстановкаПараметровСеанса().
Для подключения ранее созданного сеанса, вам необходимо указать куки IBSession с идентификатором сеанса.
Эта стратегия позволяет вам реализовать сценарии, в которых используется состояние сеанса, сохранённое на сервере. Потому что вы имеете уникальный идентификатор сеанса. Единственное, о чём нужно помнить, что завершение сеанса может происходить не только по вашей «команде», но и автоматически. В том случае, когда превышен период бездействия сеанса (ВремяЖизниСеанса). Поэтому вы, как клиент сервиса, должны быть готовы к тому, что сеансовые данные могут быть сброшены, если сеанс завершен.
Веб-сервисы в расширениях
В дальнейшем мы будем рассматривать возможность поддержки этих свойств в расширениях.
Настройка веб-сервера IIS
Большинство пользователей при работе в тонком или веб-клиенте используют в основном публикацию информационных баз на основании протокола HTTP. С одной стороны — это простой и быстрый способ дать доступ к информационной базе пользователю, у которого нет дистрибутива тонкого клиента, и он может работать только в веб-клиенте или у пользователя нет прямого доступа к серверу "1С:Предприятие". С другой стороны – информационные базы, опубликованным таким образом, категорически не рекомендуются публиковать в глобальной сети Интернет, так как в таком случае используется незащищенный канал, данные по которому могут быть перехвачены злоумышленниками. Например, распространенные виды атак это:
Внимание! В статье не рассматривается выпуск и получение сертификата проверенных поставщиков. Этот пункт должен быть выполнен самостоятельно на основании предпочтений выбора провайдера услуг. В статье предполагается что, пропуская шаг выпуска самоподписанных сертификатов, у пользователя или администратора он имеется в наличие и будет подставлен в настроечные файлы, вместо указанных в статье самоподписанных сертификатов.
План работ:
Включение компонент веб-сервера.
Windows Server 2012 R2, 2016 и 2019.
Выпуск самоподписанного сертификата (Необязательно).
1. Включение компонент веб-сервера
По умолчанию в операционной среде Windows компоненты веб-сервера не установлены. В зависимости от версии установка может несущественно различаться. Мы будем рассматривать два варианта – это распространенный дистрибутив Windows 10, если планируются использовать для пробного включения шифрования протокола и Windows Server 2016/2018, если уже планируется непосредственное разворачивание публикации в продуктивной зоне.
1.1. Windows 10
Включение компонентов веб-сервера IIS в операционной системе Windows 10 выполняется достаточно просто. Для начала нужно открыть раздел "Программы и компоненты" ("Programs and Features") в панели управления (Control panel). Сделать можно это несколькими способами:
Нажать сочетание клавиш Win + R и в открывшемся окне ввести "appwiz.cpl" и нажать ОК.
Открыть панель управления (Control panel) и выбрать пункт меню Программы – Программы и компоненты (Programs – Programs and features).
В окне "Программы и компоненты" ("Programs and Features") нажмите на кнопку "Включение и отключение компонентов Windows" ("Turn Windows features on or off").
Когда откроется окно "Компоненты Windows" ("Windows features") в нем необходимо будет проставить флажки для следующих элементов:
Компоненты разработки приложений
Средства управления веб-сайтом
Консоль управления IIS
После этого нажимайте на кнопку "OK" и дождитесь завершения выполнения операции. После того как включение компонент будет выполнено, можно переходить к пункту "2. Публикация информационной базы".
1.2 Windows Server 2012 R2, 2016 и 2019
Настройка компонент для Windows Server 2012 R2, Windows Server 2016 и Windows Server 2019 одинаковая и все настройки производятся в диспетчере серверов (Server Manager).
Откройте диспетчер серверов (Server Manager) и нажмите Управление – Добавить роли и компоненты (Manage – Add Roles and Features).
В ответ на нажатие откроется окно мастера добавления ролей и компонентов (Add Roles and Features).
В этом окне нажмите два раза "Далее" ("Next") пока мастер не переключится на страницу ролей сервера (Server Roles).
Во вкладке роли сервера (Server Roles) установите флажок "Web Server IIS". Так как эта роль зависит от другой роли ([Tools] IIS Management Console), то будет предложено установить ее дополнительно. Это можно сделать с помощью нажатия кнопки "Добавить компоненты" (Add Features) в открывшемся окне. После чего нажимаем кнопку "Далее" ("Next") пока мастер не дойдет до вкладки "Роль веб-сервера IIS" ("Web Server Role IIS"). На этой вкладке нажимайте кнопку "Далее" ("Next") и попадете на вкладку "Службу ролей" ("Role Services"). Во вкладке нужно найти пункт "Application Development" и выбрать в нем с помощью флажков пункты "ISAPI Extensions" и "ISAPI Filters". Как только закончите с установкой флажков нажимайте "Далее" ("Next") и "Установить" ("Install").
На этом установка веб-сервера завершена. Можно переходить к настройкам сертификатов.
2. Выпуск самоподписанного сертификата
Выпуск самоподписанного сертификата для веб-сервера IIS максимально простой.
Для реальных систем не рекомендуем использовать самоподписанный сертификат.
Для начала процедуры выпуска откройте окно Диспетчера служб IIS (Internet Information Services (IIS) Manager) и выделите сервер в списке Подключений (Connections) . После этого нажмите на ссылку "Сертификаты сервера" ("Server Certificates") .
Откроется окно доступных сертификатов сервера (Server Certificates) в котором нужно нажать "Создать самозаверенный сертификат…" ("Create Self-Signed Certificate…").
В окне мастера создания самоподписанного сертификата остается указать только произвольное название сертификата. В большинстве случаев, во избежание путаницы лучше явно указывать в качестве значения "Полное имя сертификата" ("Specify a friendly name for the certificate") адрес сервера, на котором расположен сервер IIS. Как только имя сертификата будет задано нажимайте на кнопку OK и переходите к пункту привязки сертификата.
3. Привязка сертификата
Предполагается, что сертификат получен и добавлен в список сертификатов сервера. Если сертификат получен с помощью распространенного сертифицирующего центра, то его нужно предварительно импортировать в окне "Сертификаты сервера" ("Server Certificates").
Как только сертификат появится в списке, переходим непосредственно к его привязки к публикации сайта. Для этого выделяем "Default Web Site" и в окне "Действия" ("Actions") нажимаем на пункт "Привязки…" ("Binding…").
В этом окне можно увидеть, что публикация работает только на порту 80, который относится к незащищенному протоколу HTTP. Чтобы его расширить, нажмите кнопку Добавить… (Add…) слева от списка привязок сайта и в открывшемся окне выберите Тип (Type) в качестве значения "https". Завершением настройки будет выбор ранее импортированного сертификата в списке "SSL-сертификат" ("SSL certificate"). Нажимаем кнопку OK и закрываем мастер привязок сайта.
Можно переходить к публикации информационной и проверки его работоспособности.
4. Проверка публикации
Для публикации информационной базы нужно открыть конфигуратор конкретной базы от имени администратора и перейти в пункт меню "Администрирование". После этого выбрать "Публикация информационной базы".
В окне публикации указать имя публикации и по желанию определить каталог, где будут находиться настройки публикации. Его также можно оставить по умолчанию.
После этого требуется нажать кнопку "Опубликовать" и дождаться окончания операции.
Для проверки корректной работы нужно открыть страницу в браузере и перейти по ссылке, которая состоит из двух частей:
Читайте также: