Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите с сокетами
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
vbi
8.3.8.2322, УТП для Украины 1.2.8.7Есть обработочка. В обработке клиентское подключение через "MSWinsock.Winsock". Она есть в сети и она отлично работает, вот фрагмент рабочего кода:
Перем WinsocketClient;

Функция АвторизоватьсяНаСервере() Экспорт
     WinsocketClient = Новый COMObject("MSWinsock.Winsock");        
     WinsocketClient.RemoteHost = "localhost";
     WinsocketClient.RemotePort = 12345;
     WinsocketClient.Connect();        
КонецФункции


У меня в модуле обычного приложения прописана серверная часть сокета которая слушает порт 12345 и принимает подключения.
Это все работает, но стоит убрать в нашей обработке глобальную переменную
Перем WinsocketClient;
,как обработка перестает работать. Очевидно что она осуществляет коннект не сразу а после выполнения процедуры "АвторизоватьсяНаСервере()". А так как переменной нет, "WinsocketClient" убивается сразу по завершении процедуры не успев подключится к серверу.
Зачем я это все излагаю. Дело в том, что мне эту обработку-клиент нужно перенести в серверный модуль 1С. Там функция АвторизоватьсяНаСервере() будет дергатся HTTPСервисом. И там никакого клиента и текущего пользователя нет. А в серверном модуле не может быть глобальных переменных.
Вопрос: Как мне после завершении функции "АвторизоватьсяНаСервере" заставить жить переменную "WinsocketClient", чтобы она осуществила "Connect()"?
P.S Или HTTP-сервис выполняется тоже на клиенте? только-что мысль пришла пока писал...
Batchir
Попробуйте написать функцию в общем модуле повторного использования что то типа:

Функция ПолучитьОбъектWinsocketClient() Экспорт
     WinsocketClient = Новый COMObject("MSWinsock.Winsock");        
     WinsocketClient.RemoteHost = "localhost";
     WinsocketClient.RemotePort = 12345;
     WinsocketClient.Connect();
     Возврат WinsocketClient;  
КонецФункции


И её дергать для получения WinsocketClient. На сервере вроде должно отработать и возвращать ранее инициализированный объект при повторном вызове
vbi
Цитата
Попробуйте написать функцию в общем модуле повторного использования что то типа
Гениально! Все работает! Модуль ставим на повторное использование возвращаемых значений в значение "На время сеанса". И в коде перед вызовом "ПолучитьОбъектWinsocketClient()" Вызываем ОбновитьПовторноИспользуемыеЗначения();

Тогда срабатывает при каждом вызове. В итое имеем рабочее решение, когда с помощю сокетов сервер дергает нужного клиента. А клиент уже обращается к данным и делает то что ему положено.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.