Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Помогите с сокетами , Работа сокета на сервере          
vbi Подменю пользователя
сообщение 15.06.18, 9:38
Сообщение #1

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

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-сервис выполняется тоже на клиенте? только-что мысль пришла пока писал...

Сообщение отредактировал Vofka - 18.06.18, 8:09


Signature
Впроваджую, супроводжую

Batchir Подменю пользователя
сообщение 15.06.18, 10:10
Сообщение #2

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1426 раз
Рейтинг: 0

Попробуйте написать функцию в общем модуле повторного использования что то типа:

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


И её дергать для получения WinsocketClient. На сервере вроде должно отработать и возвращать ранее инициализированный объект при повторном вызове

Сообщение отредактировал Batchir - 15.06.18, 10:13

Спасибо сказали: vbi,

vbi Подменю пользователя
сообщение 15.06.18, 17:04
Сообщение #3

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

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

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


Signature
Впроваджую, супроводжую

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 10:09
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!