WebSocket Клиент / Сервер. Внешний компонент
Разработка - Разработка внешних компонент
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
| Наименование | Скачано | Купить файл | По подписке PRO |
|---|---|---|---|
|
WebSocket Клиент / Сервер. Внешний компонент win_x86
.dll 2,75Mb
66
|
66 | 6 200 руб. Купить | 10 SM Скачать |
|
WebSocket Клиент / Сервер. Внешний компонент: win_x64
.dll 3,82Mb
115
|
115 | 6 200 руб. Купить | 10 SM Скачать |
|
server.pem (пароль "test")
.pem 3,40Kb
29
|
29 | 2 500 руб. Купить | 1 SM Скачать |
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Актуальная документация здесь 1c-websocket.readthedocs.io
WebSocket — протокол связи поверх TCP-соединения, предназначенный для обмена сообщениями между приложениями в режиме реального времени.
Основной смысл протокола - держать постоянное соединение между сервером и клиентом для обмена данными.
Данная разработка содержит в себе как Клиент так и Сервер websocket.
Для реализации сервера можно использовать такой алгоритм:
Регламентное задание с расписанием повторять каждую 1 секунду запускается на сервере, прослушивает порт и принимает соединения.
Если обработка входящих сообщений занимает продолжительное время - запускаем фоновое задание обработки и с ИД клиента. Затем возвращаем результат клиенту, если это требуется.
Позволяет подключаться и принимать подключения в роли сервера как в режиме без шифровки (ws://), так и используя протокол шифрования (wss://) (сертификат .pem (для примера в приложении))
Работать с брокером сообщений с помощью плагина web-stomp
Подробности https://www.cloudamqp.com/blog/2016-10-10-RabbitMQ-and-WebSockets.html
// Пример SLACK
Процедура SlackBot()
ПутьККомпоненте = "c:/websocket.dll";
ИДКанала = "C23535436TR";
ТокенСлак = "xora-3234234324....";
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + ТокенСлак);
Запрос = Новый HTTPЗапрос("api/rtm.connect", Заголовки);
Соединение = Новый HTTPСоединение("slack.com",,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Ответ = Соединение.Получить(Запрос);
Если НЕ Ответ.КодСостояния = 200 Тогда
ВызватьИсключение "Не верный ответ";
КонецЕсли;
Данные = ПолучитьЗначениеИзОтветаJSON(Ответ.ПолучитьТелоКакСтроку());
урл = Данные.Получить("url");
Если НЕ ЗначениеЗаполнено(урл) Тогда
ВызватьИсключение "Нет адреса подключения";
КонецЕсли;
Если НЕ ПодключитьВнешнююКомпоненту(ПутьККомпоненте, "WebSocket", ТипВнешнейКомпоненты.Native) Тогда
СисИнфо = Новый СистемнаяИнформация;
ОписаниеОшибки = НСтр("ru='Ошибка подключения компоненты ('") + СисИнфо.ТипПлатформы + "):
|" + ОписаниеОшибки();
ВызватьИсключение ОписаниеОшибки;
КонецЕсли;
Клиент = Новый("AddIn.WebSocket.Client");
ТекстСообщения = ПолучитьСтрокуJSON(Новый Структура("type, channel, text", "message", ИДКанала, "Listen for 1C Enterprise"));
Попытка
Клиент.Подключиться(урл);
Исключение
Описание = ОписаниеОшибки();
ТекстОшибки = Клиент.ОписаниеОшибки();
ТекстОписания = Описание + ": " + ТекстОшибки;
ВызватьИсключение ТекстОписания;
КонецПопытки;
Данные = "";
ГотовПринимать = Ложь;
Пока Клиент.Принять(0, Данные) Цикл
Значение = ПолучитьЗначениеИзОтветаJSON(Данные);
Текст = Значение.Получить("text");
Если Значение.Получить("type") = "hello" Тогда
Клиент.Отправить(ТекстСообщения);
ГотовПринимать = Истина;
КонецЕсли;
Если Текст = Неопределено ИЛИ НЕ Значение.Получить("reply_to") = Неопределено ИЛИ НЕ ГотовПринимать Тогда
Продолжить;
КонецЕсли;
Если НРег(Текст) = НРег("go away!") ИЛИ НРег(Текст) = НРег("11") Тогда
ТекстСообщения = ПолучитьСтрокуJSON(Новый Структура("type, channel, text", "message", ИДКанала, "ok. bye-bye )))"));
Клиент.Отправить(ТекстСообщения);
Сообщить("Меня отключили");
Прервать;
КонецЕсли;
Сообщить(Текст);
ТекстСообщения = ПолучитьСтрокуJSON(Новый Структура("type, channel, text", "message", ИДКанала, "Получил: "+ Текст));
Клиент.Отправить(ТекстСообщения);
КонецЦикла;
Клиент.Отключиться();
//Клиент = Неопределено;
КонецПроцедуры
Функция ПолучитьЗначениеИзОтветаJSON(ТекстJSON) Экспорт
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТекстJSON);
Значение = ПрочитатьJSON(ЧтениеJSON, Истина);
Возврат Значение;
КонецФункции
Функция ПолучитьСтрокуJSON(Значение) Экспорт
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Значение);
Возврат ЗаписьJSON.Закрыть();
КонецФункции
Собрать в архив файлы компонента поможет обработка
По теме:
- Работа с WebSocket из 1С в объекте Поле HTML Документа (HTML 5)
- 1C Messenger для отправки сообщений, файлов и обмена данными между пользователями 1С, вэб страницы, мобильными приложениями а ля Skype, WhatsApp
Тестировалось на платформе 8.3.11.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка внешних компонент Телефония, SIP Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)
5246 руб.
04.05.2018 52205 128 68
Разработка внешних компонент Разработчик 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)
Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).
5084 руб.
12.05.2020 34962 147 100
Разработка внешних компонент Инструментарий разработчика Разработчик 1С 8.3 Бесплатно (free)
Внешняя обработка проверяет выгрузку конфигурации, расширений и внешних обработок и находит места, где код руками делает то, что платформа умеет штатно: регулярки через COM, пауза пустым циклом, свой хеш и Base64, распаковка архивов программой, буфер обмена через HTML-поле. По каждой находке пишет, доступна ли замена на месте или мешает тонкий клиент.
13.10.2026 1362 145 nedomolkov.ivan 5
Разработка внешних компонент Разработчик 1С:Предприятие 8 Бесплатно (free)
Нативная внешняя компонента для 1С 8 для чтения файлов Excel без установленного Excel и делает это быстро, файл 68МБ загружается в таблицу значений ~1 секунду. Компонента поддерживает чтение двух форматов: Excel 2007+ и Excel 97-2003 Формат файла определяется автоматически по сигнатуре (первые 8 байт файла), а не по расширению. Позволяет открывать XLS и XLSX файлы и получать содержимое листов в виде ТаблицыЗначений или JSON-массива.
03.07.2026 2395 skyadmin 31
Разработка внешних компонент Разработчик 1С 8.3 Бесплатно (free)
В современных корпоративных решениях на платформе 1С:Предприятие 8.3 всё чаще возникает потребность в визуальном моделировании и автоматизации бизнес-процессов с использованием нотации BPMN 2.0. Стандартные средства платформы не предоставляют полноценного редактора BPMN, однако интеграция открытой библиотеки bpmn-js позволяет реализовать интерактивное моделирование бизнес-процессов непосредственно в 1С. В статье рассмотрены архитектура решения, пошаговая инструкция по сборке библиотеки из исходников для WebKit, а также примеры программного взаимодействия между 1С и JavaScript.
03.04.2026 4315 SultanovStas 8
Разработка внешних компонент Разработчик 1С 8.3 Россия Бесплатно (free)
Создать NativeAPI-компоненту для Python-скриптов? Это просто!
20.10.2025 11046 IlyaKuznetsov 10
Разработка внешних компонент Системный администратор Разработчик Стажер Бесплатно (free)
Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!
14.01.2025 8244 bayselonarrend 17
Разработка внешних компонент Разработчик 1С:Предприятие 8 Россия Бесплатно (free)
В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.
04.12.2024 13847 kovalevdmv 29
да, конечно, для того что бы принять соединение необходимо постоянно слушать порт. Как вариант, можно подвесить на регламентное задание которое будет постоянно висеть и перезапускаться в случае падения.
Варианта 2:
1. Блокировать исполнение кода до получения сообщения (или наступления таймаута)
2. Оставить объект компонента в памяти, не блокируя исполнение и периодически возвращаясь к проверке наличия сообщений, при долгих серверных обработках например, или обработчиком ожидания/действием пользователя на клиенте
Если не секрет, какую задачу хотите решить ?
>> Если не секрет, какую задачу хотите решить ?
Интеграция с WEB-CRM через REST.
Хочется подвесить соединение и ждать сообщений от CRM.
Я запихнул в обработку ожидания, но не вариант, т.к. "Получить()" получает за раз одно сообщение, а сообщений много, и очередь накапливается.
Было бы хорошо, чтоб компонента во ВнешнееСобытие передавала все поступающие сообщения.
Еще было бы хорошо, чтоб компонента имела фильтрацию сообщений по вхождению текста. Т.к. если от сервера их много, что часто бывает, то 1с может ощутимо тормозить на их фильтрации.
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Что бы экземпляр компоненты жил в потоке на сервере этот самый поток надо создать.
Как вариант, написать фоновое задание, которое будет создавать поток.
Этот поток передать во внешнюю компоненту вызовом метода и удерживать его там, передавая управление 1С только при получении сообщения.
Пока Истина Цикл
Сообщение = ВнешняяКомпонента.ПолучитьСообщение() // Здесь поток замирает до получения сообщения
ОбработкаСообщения(Сообщение);
КонецЦикла
websocket.DefaultDialer.Dial(*addr, http.Header{"Authorization": {"Bearer " + *token}})
По факту это аналог вашей, но с передачей заголовков.
Пример с сайта со slack также не подходит, так как в нем вначале вызывается http метод авторизации, а затем уже полученный url передается для соединения без заголовков.
У меня есть wss ссылка и токен для нее, я могу использовать вашу компоненту для работы или нет?
Вы когда к сайту подключаетесь по обычному http часто с таким сталкиваетесь? Все обычно передается в заголовках.
ВебСокетКлиент.Подключиться(АдресСервера);
ВебСокетКлиент.Отключиться();
ВебСокетКлиент.Подключиться(АдресСервера);
Зависает до перезагрузки 1С.
Чтобы прослушивать порт надо создавать объект AddIn.WebSocket.Server, нужно его инициализировать каждую секунду? Или где он должен храниться?
Я так понял в каком-нибудь общем модуле должен болтаться бесконечный цикл с Сервер.Принять(0, ИДКлиента, Данные) в котором будет обработчик приёма и отправки. Принял - оповестил, получил инструкцию по отправке (как...? через регистр сведений например?) - обработал.
У меня должна быть возможность оповестить всех, или часть пользователей о чём-нибудь, поэтому я должен всегда иметь возможность получить объект AddIn.WebSocket.Server с его соединениями. Как это сделать не через попу понять пока не могу.
Односекундное РЗ может быть стартером сервера с бесконечным циклом, а проверять что сервер запущен - как? Телнетом пробивать порт?
Я понимаю, что данная компонента даёт возможность, а дальше уже крутись как хочешь, но может вы уже кто-то соорудил на базе этого что-то нерукозадое? Пока на ум лезет всякая непотребность и гадость, которую нежелательно воплощать в жизнь. Может подскажите свой механизм, как пример? Плиз?
Если Вы хотите оповестить об изменении состояний, произведенных в другом сеансе - действительно нужен какой то способ передачи данных между сеансами, регистра. хранилище настроек, либо собор данных и отслеживание состояний в этом же сеансе,
например кеш остатков бонусов клиентов, если ПолученоСообщение = Сервер.Принять(5000,... Если Не ПолученоСообщение Тогда при простое сервера сделать запрос в базу, проверить изменилось ли состояние бонусов относительно кеша в текущем сеансе - отправить уведомление.
Да, это всего лишь дополнение возможности платформы. Это не готовое решение и не библиотека с готовым функционалом.
- Из действующих, которые на текущий момент удалось реализовать - поднятый сервер, клиенты на мобильных устройствах через браузер подключаются и получают события и данные для отражения в реальном времени (дисплей заказов на складе, текущие отгрузки, очередь клиентов). Авторизация организована примерно как в Slack, если первым сообщением получен пакет, который соответствует структуре и по полученным данным разрешена авторизация - то клиент работает, иначе разрыв соединения.
- Обмен данными между двумя базами на одном сервере. Модифицирована универсальная обработка выгрузки загрузки по правилам, которая получает текст выгруженного XML и отправляет по соединению. принимающая сторона отправляет полученный текст в фоновое задание на исполнение загрузки, в дуплексе.
Получается что-то вроде брокера сообщений, но сообщения сразу доставляются в приемник, без записи за диск
Ну то есть регламентное задание, примерно вот такого характера:
Если НЕ порт занят (телнет) Тогда (или ... что-то адекватное может? Как проверить компонента зависла или нет?)
Инициализировать сервер
Запустить бесконечный цикл, типа
ПустьРаботает = Истина;
Пока ПустьРаботает Цикл
Если Сервер.Принять(1000, ИДКлиента, Данные) Тогда;
ОбработкаПринятого(Сервер,ИДКлиента,Данные);
КонецЕсли;
ОпросЗаданийКОтправке(Сервер);
КонецЦикла
Не будет являться говнокодом, как вы думаете?
Можно вместо проверки порта проверять актуальность даты последнего опроса заданий... хз..
А как наверняка уничтожить серверное соединение из другого сеанса, если с компонентой что-то случится? (освободить порт)
Понятие говнокода - оно относительное, например если разработка вашего решения будет стоить в 10 раз дешевле для бизнеса, то ему (бизнесу) абсолютно наппевать, насколько хорошо или плохо Вас оценит любой другой специалист. С другой стороны, если вдруг Вы покинете этот бизнес и разработку придется поддерживать другому специалисту, который вообще не в курсе про существование таких способов интеграции - другой специалист расскажет что Вы сделали все плохо и это говнокод. Это нужно переделывать и стоить это будет в 10 раз дороже ;)
По идее, Компонента = Неопределено (и компонента.Остановить()) должны освобождать занятые ресурсы. Можно регламентное задание перезапускать с периодичностью и в расписании указать завершать принудительно через...
Как Вы, наверное, знаете в платформе есть механизмы удержания сеансов, соединений, сборщик мусора и т.д. эту совокупность нужно тестировать в комплексе
Но, похоже, всё это мне не пригодится. Выкладываю её сюда, может кто-то сэкономит своё время.
Да...уж... думал более-менее клиент интересный написать, соединился при создании формы, а передать дальше объект Клиент нельзя.
Ни запихать во временное хранилище, ни произвольным реквизитом формы... В строку только значение не делал... если бы даже получилось - это всё равно дичь какая-то. Хотя казалось бы объект да объект. С сервером тоже как-то грустно. Впервые почувствовал импотенцию от интерпретируемых языков программирования.
Производителю данной фичи однозначно респект. Интересный опыт. Хоть мозги размял.
Тогда не вижу смысла в компоненте. Сервер можно и так дергать...
Смысл был именно в том, чтобы держать постоянную связь с КЛИЕНТОМ, и хранить идентификаторы соединений с клиентами для того, чтобы при появлении новой информации оповестить КЛИЕНТОМ. То есть смысл именно в том, чтобы дёргать клиентов. То есть где-то должно быть фоновое задание с бесконечным циклом, в котором хранятся подключения.
Такой цикл должен держать актуальную таблицу подключений в памяти, держать соединения, принимать от клиента запросы и опрашивать другую таблицу на предмет заданий для отправки клиентам (например из РС).
В случае появления нового задания - отправлять данные клиенту через уже активное соединение.
ИДКлиента - это номер соединения. Если я правильно понял, номер меняется при каждом приеме нового сообщения?
Логика така:
открыл форму, подключился к серверу, ожидаю сообщений от сервера..
Где брать идКлиента?
Спасибо.
Посмотрел в документации - у вас идет авторизация через http, на который вы передаете токен, а http возвращает вам серкретный url, по которому идет просто соединение на WebSocket. В моем случае адрес сокета заранее известен, нужно на него передать такой же токен, как вы делаете по http. Сервис сторонний, изменить его нельзя. Поддерживает ли компонента передачу параметра для авторизации в заголовке через ваш метод "Подключиться"?
не через файл ни через архив
добавлены 2 общих макета:
WebSocketDll64 - дд, файл dll ВК для x64
WebSocketAddIn - дд, zip архив с файлом манифеста и двумя fфайлам dll 32 и 64.
&НаКлиенте
Процедура TestClient64(Команда)
ПутьКомпоненты = "ОбщийМакет.WebSocketDll64";
ИмяКомпоненты = "WebSocket64";
ТестКомпонентыНаКлиенте(ПутьКомпоненты, ИмяКомпоненты);
КонецПроцедуры
&НаКлиенте
Процедура TestClientZip(Команда)
ПутьКомпоненты = "ОбщийМакет.WebSocketAddIn";
ИмяКомпоненты = "WebSocketAddIn";
ТестКомпонентыНаКлиенте(ПутьКомпоненты, ИмяКомпоненты);
КонецПроцедуры
&НаКлиенте
Процедура ТестКомпонентыНаКлиенте(ПутьКомпоненты, ИмяКомпоненты)
НачатьУстановкуВнешнейКомпоненты(Новый ОписаниеОповещения("ПослеУстановкиВК", ЭтаФорма, Новый Структура("ПутьКомпоненты, ИмяКомпоненты", ПутьКомпоненты, ИмяКомпоненты)), ПутьКомпоненты);
КонецПроцедуры
&НаКлиенте
Процедура ПослеУстановкиВК(ДопПараметры) Экспорт
НачатьПодключениеВнешнейКомпоненты(Новый ОписаниеОповещения("ПослеПодключенияВнешнейКомпоненты", ЭтаФорма, ДопПараметры), ДопПараметры.ПутьКомпоненты, ДопПараметры.ИмяКомпоненты, ТипВнешнейКомпоненты.Native);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПодключенияВнешнейКомпоненты(Подключено, ДопПараметры) Экспорт
ИмяКласса = "AddIn." + ДопПараметры.ИмяКомпоненты + ".Client";
Клиент = Новый(ИмяКласса);
АдресСервера = "wss://echo.websocket.org";
Попытка
Клиент.Подключиться(АдресСервера);
Исключение
Описание = ОписаниеОшибки();
ТекстОшибки = Клиент.ОписаниеОшибки();
ТекстОписания = Описание + ": " + ТекстОшибки;
ВызватьИсключение ТекстОписания;
КонецПопытки;
Клиент.Отключиться();
КонецПроцедуры
ПоказатьВ случае с zip получаем ошибку:
Тип не определен (AddIn.WebSocketAddIn.Client)
{ВнешняяОбработка.TestWebSocket.Форма.Форма.Форма(53)}: Клиент = Новый(ИмяКласса);
Тестирование работы на сервере
&НаСервере
Процедура TestServer64НаСервере()
ПутьКомпоненты = "ОбщийМакет.WebSocketDll64";
ПодключитьВнешнююКомпоненту(ПутьКомпоненты, "WebSocket64", ТипВнешнейКомпоненты.Native);
Клиент = Новый("AddIn.WebSocket64.Client");
АдресСервера = "wss://echo.websocket.org";
Попытка
Клиент.Подключиться(АдресСервера);
Исключение
Описание = ОписаниеОшибки();
ТекстОшибки = Клиент.ОписаниеОшибки();
ТекстОписания = Описание + ": " + ТекстОшибки;
ВызватьИсключение ТекстОписания;
КонецПопытки;
Клиент.Отключиться();
КонецПроцедуры
&НаСервере
Процедура TestServerZipНаСервере()
ПутьКомпоненты = "ОбщийМакет.WebSocketAddIn";
ПодключитьВнешнююКомпоненту(ПутьКомпоненты, "WebSocketAddIn", ТипВнешнейКомпоненты.Native);
Клиент = Новый("AddIn.WebSocketAddIn.Client");
АдресСервера = "wss://echo.websocket.org";
Попытка
Клиент.Подключиться(АдресСервера);
Исключение
Описание = ОписаниеОшибки();
ТекстОшибки = Клиент.ОписаниеОшибки();
ТекстОписания = Описание + ": " + ТекстОшибки;
ВызватьИсключение ТекстОписания;
КонецПопытки;
Клиент.Отключиться();
КонецПроцедуры
ПоказатьВ случае с zip получаем:
Тип не определен (AddIn.WebSocketAddIn.Client)
{ВнешняяОбработка.TestWebSocket.Форма.Форма.Форма(144)}: Клиент = Новый("AddIn.WebSocketAddIn.Client");
{ВнешняяОбработка.TestWebSocket.Форма.Форма.Форма(166)}: TestServerZipНаСервере();
Через архив ни на сервере, ни на клиенте не подключается.
Текст из файла манифеста:
<?xml version="1.0" encoding="UTF-8"?>
<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle" name="websocket">
<component os="Windows" path="1c-websocket_Win_32.dll" type="native" arch="i386"/>
<component os="Windows" path="1c-websocket_Win_64.dll" type="native" arch="x86_64"/>
</bundle>
А есть демо версия что бы понять будет работать в рамках нашей задачи или нет?
Задача есть служба для обслуживаения терминалов Приватбанк которая общается по протоколу WEBSOCKET и вот не понятно будет ли работать с вашей компонентой.
&НаКлиенте
Процедура УстановитьКомпоненту()
ПутьКомпоненты = Путь_DLL;
УстановитьВнешнююКомпоненту(ПутьКомпоненты);
Если НЕ ПодключитьВнешнююКомпоненту(ПутьКомпоненты,"WebSocket", ТипВнешнейКомпоненты.Native) Тогда
ВызватьИсключение "Ошибка подключения внешнего компонента";
КонецЕсли;
КонецПроцедуры ПоказатьВ результате получаю ошибку
"Установка внешней компоненты не выполнена!
В процессе установки произошла ошибка!
Возможно, отсутствует компонента для используемого клиентского приложения"
Версия платформы
8.3.13.1513
И о каком конкретно методе речь?
Конфигурация 1С: Управление Торговлей 10.3
ПутьКомпоненты = "D:\3111111\PUBID_937068-1c-websocket_Win_64.dll";
Если НЕ ПодключитьВнешнююКомпоненту(ПутьКомпоненты,"WebSocket", ТипВнешнейКомпоненты.Native) Тогда
Сообщить("Ошибка подключения внешнего компонента");
Возврат;
КонецЕсли;
Клиент_ = Новый("AddIn.WebSocket.Client");
Попытка
Клиент_.Подключиться("ws://192.168.88.223:3001");
Исключение
Описание = ОписаниеОшибки();
ТекстОшибки = Клиент_.ОписаниеОшибки();
ТекстОписания = Описание + ": " + ТекстОшибки;
Сообщить(ТекстОписания);
КонецПопытки; ПоказатьПопытка
Клиент.Подключиться(СтрокаПодключения+"/chat?access_token="+Токен);
Исключение
Описание = ОписаниеОшибки();
ТекстОшибки = Клиент.ОписаниеОшибки();
ТекстОписания = Описание + ": " + ТекстОшибки;
ВызватьИсключение ТекстОписания;
КонецПопытки;
//!!! Тут все прошло успешно
ТекстСообщения = ПолучитьСтрокуJSON(Новый Структура("type, target, arguments", "Invocation", "Pong", Новый Массив));
Клиент.Отправить(ТекстСообщения);
Данные = "";
Клиент.Принять(0, Данные);
Значение = ПолучитьЗначениеИзОтветаJSON(Данные);
Показатьмы получаем такие данные в ответе "{"error":"Handshake was canceled."}"
Не подскажете, в чем может быть ошибка?
Рейтинг: 369
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 937068
Создание 16.11.18 13:54
Обновление 22.12.18 08:47
Просмотры 44099
Загрузки 210
Рейтинг
36
Комментарии 75
Код открыт Нет
Рубрики Разработка внешних компонент
Кому
Системный администратор
,
Разработчик
Тип файла Компонента, плагин (dll, vbs,..)
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)