Как закрыть ws соединение в 1с
Возьмем для примера веб-сервер на базе MS IIS с публикациями баз 1С. Бывают случаи, когда сеансы пользователей зависают. Например, при использовании веб/тонкого клиента 1С.
Одно дело — клиент-серверный вариант, с применением СУБД. С ним проще. Открываете административную консоль и через список закрываете эти зависшие сеансы.
В случае файловой базы все не так тривиально. В Конфигураторе вы можете видеть эти якобы активные сеансы, но отдельной команды в интерфейсе на закрытие — попросту нет.
Стандартная рекомендация — перезапуск веб-сервера. В принципе, она должна помочь, и зависшие сеансы на файловых базах очистятся.
Но, на практике выполнить сложнее, т. к. баз бывает несколько и ведется активная работа других пользователей. Могут быть ошибки и потери связи. Плюс недовольства сотрудников, что их работу прервали.
Какое может быть решение? Один из выходов — более тонкая настройка IIS.
Сделать так, чтобы каждая опубликованная база (приложение) выполнялась в отдельном пуле приложений. По умолчанию все публикации «привязываются» к DefaultAppPool.
Выберите время и настройте IIS, чтобы каждой информационной базе был сопоставлен отдельный пул.
Или сгруппируйте базы так, как вам удобно, чтобы сократить количество пулов. Выходит, что базы будут не в одной «куче», а по отдельности.
- Откройте консоль «Диспетчер служб IIS».
- В левой части выберите «Пулы приложений», а справа по команде «Добавить пул приложений…» зарегистрируйте новый пул с настройками, аналогичными пулу по умолчанию. Добавьте понятное имя, например, по названию публикации ИБ.
- Перейдите в список опубликованных баз.
- Выберите ИБ, через «Основные настройки…» укажите новый пул из ранее созданного в п. 2.
- Повторите шаги 1-4 для других информационных баз при необходимости.
Теперь, когда появляется задача по закрытию зависших сеансов в 1С — вы перезапускаете соответствующий пул, а не веб-сервер. Таким образом не мешаете своим коллегам работать с базами.
При интеграции 1С:Предприятие с другими системами возможны случаи когда работа возможна только по протоколам TCP\IP или UDP. Платформа 1С не предоставляет механизмов для прямого взаимодействия с этими протоколами, что крайне неудобно, но, тем не менее, не невозможно.
Для работы с этими протоколами в среде Windows предназначена технология Windows Sockets.
Реализует эту технологию библиотека Mswinsock.dll (Mswinsock.ocx).
В качестве транслятора в протоколы TCP\IP или UDP данных из (в) 1С:Предприятие можно использовать ActiveX компоненту, входящую в состав библиотеки Mswinsock.dll.
Эта библиотека входит в состав пакета Visual Basic который можно установить вместе с пакетом программ MS Office. Ну или найти в Интернете.
Её полноценное использование в среде 1С:Предприятие возможно только в качестве ActiveX элемента на форме.
На форме появится значок с двумя компьютерами, примерно такой (все зависит от используемой вами операционной системы и версии библиотеки).
Не забудьте для компоненты снять флажок видимости. Компонент не имеет элементов интерфейса, тем не менее 1С пытается его отрисовать, что приводит к некрасивым результатам.
После добавления компонента на форму становятся доступными все связанные с ним свойства и события. Наиболее часто используемые события добавляются на форму свойств.
Остальные свойства и события доступны через контекстную подсказку "IntelliSense" в модуле формы.
Свойства.
Из дополнительных свойств стоит отдельно выделить свойство "State" в это свойство содержит числовое значение текущего состояния компоненты - Статус.
Список возможных значений
Свойство Protocol содержит числовой параметр, указывающий, с каким протоколом работать. Protocol принимает одно из двух возможных значений
Свойство LocalPort числовой параметр, указывающий, какой порт будем прослушивать функцией Listen().
Свойства RemotePort и RemoteHost - это параметры, указывающие по какому адресу (IP или DNS) и на какой порт совершать подключение к серверу функцией Connect().
Для каждого параметра есть одноименная функция, которая возвращает текущее значение параметра или устанавливает новое значение. За исключением параметра State, для разработчика этот параметр ReadOnly.
Доступные события.
Error - Событие возникает при возникновении какой-либо ошибки.
Процедура WinSocketError ( Элемент , Number , Description , Scode , Source , HelpFile , HelpContext , CancelDisplay )В параметрах события возвращается
- Number - цифровой код возникшей ошибки,
- Description - текстовое описание ошибки,
- Scode - код ошибки в типе Long (HRESULT) SCODE
- Source - описание источника ошибки,
- HelpFile - ссылка на Файл справки
- HelpContext - контекст файла справки
- CancelDisplay - флаг отмены отображения стандартного окна об ошибке. По умолчанию значение - Истина. Окно не выводится.
DataArrival - возникает при поступлении данных.
Процедура WinSocketDataArrival ( Элемент , bytesTotal )
В параметр bytesTotal передается числовое значение, сколько байт было принято. Сами данные можно получить функцией GetData () . В параметр этой функции нужно передать строковую переменную, в которую функция вернет полученные данные.
Connect - событие возникает при успешном подключении к серверу. Возникает только на стороне клиента.
Процедура WinSocketConnect ( Элемент )
Сообщить ( "Покдлючение к " + Элемент . RemoteHost + " успешно." );
Это событие не имеет собственных параметров.можно работать только с параметрами самой компоненты.
ConnectionRequest - серверное событие, возникает при поступлении запроса на подключение.
Процедура WinSocketConnectionRequest ( Элемент , requestID )
Сообщить ( "Запрос подключения" );
Если НЕ WinSocket . State = 0 Тогда
WinSocket . Close ()
КонецЕсли;
WinSocket . Accept ( requestID );
Сообщить ( "Приконнектился " + WinSocket . RemoteHostIP );
В параметр requestID поступает идентификатор подключаемого клиента. При этом, обратите внимание, что перед разрешением на подключение функцией Accept(requestID) необходимо компоненту перевести в состояние "0", т.е. закрыть открытый прослушиваемый поток.
Тут же можем получить IP-адрес подключаемого клиента из параметра RemoteHostIP.
Теперь, после установления соединения, можем передавать данные в обе стороны.
Close - Событие, возникающее при вызове метода Close() т.е. при закрытии компоненты.
SendProgress - Событие, возникающее при передаче данных, возникает при каждом переданном байте - так что не стоит навешивать слижком громоздкую или ресурсоемкую логику. Да и как показала практика, в 1С это событие использовать нет смысла, потому как процедура, связанная с этим событием, срабатывает только 1 раз, когда форма получает обратно фокус ввода.
Процедура WinSocketSendProgress ( Элемент , bytesSent , bytesRemaining )
Сообщить ( "Байт отправленно - " + bytesSent + "/ байт осталось - " + bytesRemaining );
Из картинки видно, что вызов процедуры произошел только один раз.
SendComplete - Событие, возникающее при завершении отправки данных. Следующий код демонстрирует функционирование данного события.
Соединения кластера серверов 1С:Предприятия 8.1
Этот раздел содержит пояснения к списку соединений кластера серверов 1С:Предприятия, отображаемому в утилите администрирования клиент-серверного варианта работы. Подробная информация о работе утилиты администрирования клиент-серверного варианта работы содержится в главе "Утилита администрирования кластера серверов" книги "1С:Предприятие 8.1 Клиент-сервер".
Краткий и подробный список соединений
Утилита администрирования клиент-серверного варианта работы в различных ветках дерева объектов отображает список соединений кластера серверов в разрезе объекта текущей ветки.
Список соединений, отображаемый в ветке "Соединения" содержит краткий список всех соединений кластера серверов в целом, как это показано на рисунке.
В ветках "Процессы/<Имя_сервера>/Соединения" и "Рабочие серверы/<Имя_сервера>/Процессы/<Имя_сервера>/Соединения" также отображается краткий список соединений выбранного рабочего процесса.
В ветке "Информационные базы/<Информационная_база>/Соединения" отображается полный список соединений выбранной информационной базы.
Полный список соединений содержит максимально подробную информацию о каждом соединении. Для ее получения утилита администрирования кластера серверов устанавливает соединение не только с агентом центрального сервера кластера, но и с каждым из рабочих процессов (процесс rphost), которым принадлежат отображаемые соединения. При этом необходима аутентификация администратора каждой из информационных баз, которой принадлежат отображаемые соединения. Если аутентификация не выполнена, то в списке соединений отображается только краткая информация о соединениях. Соединения утилиты администрирования кластера серверов с рабочими процессами отображаются в списке соединений и могут оказать влияние на работу информационных баз, в частности на возможность перевода информационной базы в режим монопольного доступа.
Источники соединений
Среди свойств соединения имеется свойство "Приложение", которое определяет источник соединения. В зависимости от источника соединения могут использоваться для различных целей и оказывать различное влияние на работу информационных баз. Возможные источники соединений и особенности соединений от каждого из источников приведены в таблице.
"Да" в колонке "ИБ" означает, что соединение устанавливается с определенной информационной базой, требует аутентификации пользователя информационной базы и может оказывать влияние на работу информационной базы, в частности на возможность установки монопольного доступа к информационной базе. Для этих соединений возможно отображение свойств и принудительное удаление.
"Да" в колонке "Процесс" означает, что соединение устанавливается с рабочим процессом в целом и не требует аутентификации пользователя информационной базы. Эти соединения не мешают установке монопольного доступа к информационной базе, не требуют аутентификации пользователя информационной базы и не могут быть принудительно удалены. Для них также не возможно отображение диалога свойств.
Свойства соединений
В любом списке соединений имеется возможность просмотра свойств соединения. Диалог свойств содержит полную информацию о соединении, для получения которой необходимо соединение утилиты администрирования кластера серверов с рабочим процессом, которому принадлежит данное соединение, и аутентификация администратора информационной базы, которой принадлежит данное соединение. Если аутентификация администратора информационной базы не выполнена, то открытие диалога свойств соединения не возможно.
Отображение диалога свойств соединения возможно только для соединений с информационными базами, но не возможно для служебных соединений с кластером.
Соединения утилиты администрирования кластера серверов
- утилита администрирования кластера серверов будет закрыта;
- соединение утилиты администрирования кластера серверов с данным центральным сервером будет разорвано. Для этого в локальном меню ветки соответствующего центрального сервера необходимо выполнить пункт "Отсоединить" или "Refresh";
- соединения утилиты администрирования кластера серверов с информационной базой будут явно разорваны этой утилитой (или другим ее экземпляром).
При первом получении списка соединений информационной базы соединения данного экземпляра утилиты администрирования кластера серверов могут быть не отображены, поскольку они устанавливаются в процессе получения информации о соединениях и на момент начала получения списка соединений могут отсутствовать. Их можно будет увидеть при повторном отображении списка соединений информационной базы.
Удаление (разрыв) соединений
Удаление соединений с информационной базой может быть выполнено путем выбора одного или нескольких соединений с информационной базой и выполнения пункта "Delete" локального меню списка соединений.
При удалении соединения консоль посылает на сервер сигнал на разрыв клиентского соединения и удаляет строку соединения из отображаемого списка без дополнительного запроса нового списка соединений. Действия сервера после получения сигнала зависят от состояния клиентского потока. Если клиентский поток находится в клиентском приложении, то соединение разрывается. Если клиентский поток находится на сервере 1С:Предприятия, то отреагировать на сигнал он может только при переходе на новую строку кода на встроенном языке. Если клиентский поток находится в сервере баз данных, то сигнал передается серверу баз данных. Сервер баз данных также не всегда может прервать выполнение запроса. Если передача сигнала на разрыв соединения не приводит к фактическому разрыву соединения, то при обновлении списка соединений данное соединение появится снова.
Возможные решения
1. Проверка даты/времени на ПК
Проверьте корректность через «Панель управления — Часы и регион — Дата и время». Отправьте команду на автоматическую синхронизацию, если вы соединены с сетью Интернет.
2. Проверка доступности
Посмотрите сведения о сертификате. В открывшемся окне перейдите на последнюю закладку и убедитесь, что цепочка сертификатов корректная. Непрерывная и без каких-либо предупреждающих иконок.
Если адрес не открывается — другие распространенные причины:
• доступ заблокирован через файл hosts;
• нет доступа из-за прокси-сервера;
• ресурс блокирован firewall/антивирусом.
3. Отключение проверок
Список ИБ — Выбор базы — Изменить… — Дополнительно… — Далее >
Выберите клиентский сертификат: Не предоставлять
Выберите способ проверки сертификата сервера: Не проверять
Не проверять сертификат сервера
4. Игнорирование ошибки проверки отзыва
В конфигурацию платформы — в файл conf с расширением cfg — добавьте следующую опцию:
Расположение файла:
• C:\Program Files\1cv8\8.х.хх.хххх\bin\conf
• C:\Program Files (x86)\1cv8\8.х.хх.хххх\bin\conf
Данный механизм игнорирует именно ошибки проверки отзыва, а не отменяет проверку отзыва сертификата. Поэтому, если сертификат сервера отозван и это подтверждено, то соединение с таким сервером установлено не будет.
5. Импорт самоподписанного сертификата
Добавьте сертификат сервера на ПК, с которого вы подключаетесь, в список «Локальный компьютер — Доверенные корневые центры сертификации — Сертификаты».
В этом случае поставьте режим «Выберите способ проверки сертификата сервера = Хранилище сертификатов Windows». Или укажите файл сертификатов CA — как удобнее.
6. Диагностика ошибок
Используйте методические рекомендации по диагностике ошибок ОС Windows из официальной статьи 1С.
Если окружение настроено корректно и есть доверие к сертификату удаленного ресурса, то ошибки не будет. Пусть все получится. 🤗
Читайте также: