- Аналог COM/OLE-доступа к 1С: Предприятие 8.2 для Linux и других ОС 26.09.2012 11:02
- Портирование COM на Linux
- Аналог COM/OLE-доступа к 1С: Предприятие 8.2 для Linux и других ОС
- Идея создания
- Простые примеры
- Расширенные примеры
- Замена веб-сервисов/COM/OLE в 1С:Предприятие 8.2
- Замена в 1С:Предприятие 8.2 COM/OLE для доступа из Linux и других операционных систем
- Преимущества
- Идея создания
- Простые примеры
- Расширенные примеры
- Многопоточность
Аналог COM/OLE-доступа к 1С: Предприятие 8.2 для Linux и других ОС 26.09.2012 11:02
Elisy Business Connector позволяет взаимодействовать с системами 1С: Предприятие через Интернет-технологии. Решение является кроссплатформенным и более эффективным, чем традиционный доступ через COM/OLE.
Elisy Business Connector – это связующий компонент. Он позволяет связываться с опубликованными информационными базами 1С: Предприятие на Apache/IIS и в облачных сервисах. Для отправки запросов и получения ответов используется http-протокол и форматы JSON/XML. В решение вошли многие разработки команды Elisy Software Design в области интеграции с 1С: .Net Bridge, MdInternals, Decompiler, Proxy.
Используемый подход является кроссплатформенным: он не только позволяет обращаться к системам 1С: Предприятие, работающим на Windows и Linux, но также к системам, размещенным на облачных сервисах. Через Java и Mono поддерживаются мобильные и другие операционные системы. Сейчас компонент доступен для Java, .Net framework, Silverlight и Mono. Архитектура Business Connector устроена так, что в будущем позволит перенести компонент на другие популярные фреймворки. Внутри семейства систем 1С: Предприятие компонент доступен на Windows через технологию 1C.Net: Предприятие.
Business Connector является более эффективным, чем COM/OLE-доступ к 1С: Предприятие через тонкий клиент. Преимущества достигаются за счет архитектуры, спланированной для кроссплатформенной и многопоточной работы. На компьютере, с которого осуществляется доступ, можно не устанавливать 1С: Предприятие. Доступ можно организовать из любой операционной системы.
Планируется, что основное применение компонент получит при интеграции Интернет-проектов с конфигурациями 1С: Предприятие, такими как: Бухгалтерия и Управление Торговлей. Это могут быть Интернет-магазины или билинговые системы.
Читать дальше →
Источник
Портирование COM на Linux
Мне нравится технология COM. Но речь пойдет не о технологии, восхвалении или недостатках COM, а опыте переноса и реализации на Linux. Велосипед? Целесообразность? Давайте не будем на этом заострять внимание.
В общем понимании, объект класса, реализующий как минимум один COM-интерфейс. Реализация объекта в основном скрывается в динамически подключаемой библиотеке, называемой COM-сервер (2) , для использования публикуются и распространяются интерфейсы.
COM-интерфейс, абстрактный класс содержащий только чисто виртуальные функции. Выделяется особый интерфейс IUnknown, любой COM-объект обязан реализовывать данный интерфейс.
Каждый COM-интерфейс должен содержать некий свой идентификатор. В COM он определяется структурой GUID и вот тут столкнемся с первым недостатком COM. GUID непонятен и не читаем ну и все остальное описанное на Wiki. Нам он то же нужен, но в более читаемом и понятном виде (назовем его uiid).
Помимо идентификатора интерфейса, выделяется и идентификатор класса (clsuid), необходимый для создания объекта. В нашем случае, т.к. это более менее читаемый идентификатор, который может определять суть, можно пока забыть о их публикации (возможно это не хорошо).
Резюме
COM-объект, содержит единственный идентификатор класса. Реализует как минимум один COM-интерфейс — IUnknown (любой COM-интерфейс имеет уникальный идентификатор интерфейса). Разные реализации COM-объекта могут иметь один и тот же идентификатор класса (пример: release и debug версия).
Динамически подключаемой библиотека (для Linux это Shared object — so) реализующая как минимум один COM-объект. Сервер должен экспортировать определенный набор функций:
Создает объект класса по clsuid, увеличивает количество ссылок на so, каждый раз при успешном создании объекта. Вызов IUnknown::AddRef, так же должен увеличивать счетчик ссылок на so, а IUnknown::Release должен уменьшать.
Если количество ссылок на SO равно 0, то можно выгружать библиотеку.
Регистрирует в “реестре” все clsuid сервера. Вызывается единожды при инсталляции COM-сервера.
Удаляет из “реестра” записи о зарегистрированных clsuid сервера. Вызывается единожды при деинсталляции COM-сервера.
Пример SimpleHello, объявляем интерфейс IHello:
Набор макросов скрывает реализации функций, предоставляя более структурированное объявление и логику.
Dom::Implement — скрывает реализацию методов интерфейса IUnknown, добавляет “сахарок”, при объявлении интерфейсов реализуемых объектом (С++11 и variadic templates):
Интерфейс IRegistryServer — определяет набор методов работы с “реестром” COM-серверов.
Важность реестра можно недооценить, но он является наверное главным столпом COM. Microsoft пишет в системный реестр, создает сложную структуру описания интерфейсов и их атрибутов (idl), я пошел немного по другому пути.
В реализации реестр базируется на файловой системе.
Какие плюшки? Понятность, простота, возможность восстановления, особая плюшка при регистрации сервера можно задать некого рода namespace (директорию относительно базового реестра в которой будет регистрироваться объекты сервера), тем самым можно реализовать целостность и версионность приложений использующих технологию.
Из недостатков, возможные проблемы с безопасностью, подмена реализаций объектов.
Как использовать, пример приложения (4)
Для того чтобы заставить все работать потребуется еще небольшая “библиотечка” и небольшая “программка”.
“Библиотечка” — ни что иное как обертка реализующая и собирающая все в единое целое, работу с реестром, загрузку\выгрузку SO, создание объектов.
Она единственная должна быть указана при сборке приложения. Все остальное, “хочется верить”, она сделает сама.
“Программка” — regsrv — собственно это аналог программы Microsoft RegSrv32, выполняющей те же действия (+ возможность указания namespace, + возможность получения списка зарегистрированных clsuid и COM-серверов).
Dom (Dynamic Object Model), моя реализация для Linux.
Источник
Аналог COM/OLE-доступа к 1С: Предприятие 8.2 для Linux и других ОС
Elisy Business Connector позволяет взаимодействовать с системами 1С: Предприятие через Интернет-технологии. Решение является кроссплатформенным и более эффективным, чем традиционный доступ через COM/OLE.
Elisy Business Connector – это связующий компонент. Он позволяет связываться с опубликованными информационными базами 1С: Предприятие на Apache/IIS и в облачных сервисах. Для отправки запросов и получения ответов используется http-протокол и форматы JSON/XML. В решение вошли многие разработки команды Elisy Software Design в области интеграции с 1С: .Net Bridge, MdInternals, Decompiler, Proxy.
Используемый подход является кроссплатформенным: он не только позволяет обращаться к системам 1С: Предприятие, работающим на Windows и Linux, но также к системам, размещенным на облачных сервисах. Через Java и Mono поддерживаются мобильные и другие операционные системы. Сейчас компонент доступен для Java, .Net framework, Silverlight и Mono. Архитектура Business Connector устроена так, что в будущем позволит перенести компонент на другие популярные фреймворки. Внутри семейства систем 1С: Предприятие компонент доступен на Windows через технологию 1C.Net: Предприятие.
Business Connector является более эффективным, чем COM/OLE-доступ к 1С: Предприятие через тонкий клиент. Преимущества достигаются за счет архитектуры, спланированной для кроссплатформенной и многопоточной работы. На компьютере, с которого осуществляется доступ, можно не устанавливать 1С: Предприятие. Доступ можно организовать из любой операционной системы.
Планируется, что основное применение компонент получит при интеграции Интернет-проектов с конфигурациями 1С: Предприятие, такими как: Бухгалтерия и Управление Торговлей. Это могут быть Интернет-магазины или билинговые системы.
Идея создания
С выходом ознакомительной версии 1С: Предприятие 8.3 стала ясна четкая направленность компании 1С на кроссплатформенность: на одновременную поддержку Windows и Linux.
Это значит, что в будущем традиционно используемые в 1С Windows-технологии должны быть пересмотрены в сторону универсальности и общей доступности как из Windows, так и из Linux. В первую очередь это касается удобной COM/OLE-технологии. В системах 1С, начиная с 7.7, COM использовался в основном в 2х случаях:
- Внешние компоненты по технологии COM. Частным случаем является создание и использование зарегистрированных в реестре COM-серверов сторонних разработчиков, таких как: генераторы штрихкодов, VBScript с регулярными выражениями, сокеты и др. В 1С 8.2 был представлен альтернативный Native API-интерфейс, который доступен из Linux. Но при этом Native API более урезан по функциональности, чем COM-доступ, например, не предусмотрен аналог IDispatch-объектов. Также урезанной альтернативой Linux станет вызов через командную строку приложений и обработка файлов на их выходе.
- Внешний доступ к приложению 1С: Предприятие через COM/OLE. Урезанная альтернатива – запуск скриптов 1С по расписанию с генерированием файлов-флагов, а также написание и публикация специализированных SOAP веб-сервисов.
Решение для первой проблемы не может впечатлить своей универсальностью и эффективностью с точки зрения разработчика. Так как всеобъемлющее Native API-приложение должно быть скомпилировано для Windows, Linux, (MacOS в 8.3), а также для популярных браузеров: IE, FireFox, Chrome, Opera, Safari. Число поддерживаемых проектов увеличивает вероятность ошибок из-за специфики каждой из поддерживаемых ИТ-архитектур.
Вторая проблема не славится стандартными решениями. Задания, генерирующие файлы-флаги, запускаются только по расписанию, а не по требованию. А веб-сервисы требуют вмешательства в конфигурацию, сложны конфигурированием и ограничены SOAP-стандартом.
Более универсальный подход для решения второй проблемы, положенный в основу Elisy Business Connector, состоит в следующем. Опубликованная через веб-браузер конфигурация 1С версии 8.2 и выше рассматривается как набор веб-сервисов с доступом по http/https. Используемые форматы JSON и XML обеспечивют универсальное подключение более легкое, чем через SOAP.
Насколько перспективен Linux для 1С: Предприятие в ближайшее время? Скорее всего, доля Linux в локальных сетях коммерческих компаний возрастет не сильно в ближайшие 10-20 лет. Но всю картину меняют облачные сервисы 1С, которые с вероятностью 99% будут строиться не на основе Windows Azure. Это значит, что значительная часть типовых конфигураций будет размещена на Linux с экономией на поддержке и сисадминах. Какую конкретно долю займут облачные сервисы сказать трудно.
Простые примеры
Простые примеры демонстрируют возможности версии 1.0, которая доступна для Java, Mono, Net framework, Silverlight. Это первая версия, предназначенная для ознакомления сообщества с технологией. На основе полученных отзывов и замечаний будет планироваться расширение функциональности конечного продукта и расширение или сокращение поддерживаемых платформ.
- Подключение к информационной базе и отключение;
- Получение информации о подключении;
- Вызов удаленных серверных методов без параметров;
- Распознавание простейшего типа: строка;
- Поддержка Java 1.6, .Net framework 4, Silverlight 4, Mono 2.8
Особенности программирования для Java:
- Названия методов для Java начинаются с прописной буквы. Например, Open, Close и GetUserList следует писать как open, close и getUserList.
Особенности программирования для Silverlight:
- 1. Политика безопасности запрещает в Сильверлайте междоменные обращения. Поэтому необходимо создать файл clientaccesspolicy.xml или crossdomain.xml в корневом каталоге домена, к которому выполняется обращение. Соответственно, нельзя обращаться к приложениям с демо-сервера 1С так как таких файлов на сервере 1С нет.
- 2. Приведенный ниже код нужно запускать в отдельном потоке, так как Сильверлайт очень трепетно относится к основному GUI-потоку и асинхронные вызовы, задействующие основной поток дают некорректные результаты (Например, HttpWebResponse.EndGetResponse(), запущенный в основном потоке возвращает null).
Пример возвращает строку, полученную при запуске серверной функции ПолучитьТекстЗапросаДокументыРасчетовСПоставщиками модуля ВзаиморасчетыСервер :
Данный пример получает в массив users всех пользователей информационной базы из списка при запуске 1С:
Расширенные примеры
Расширенные примеры будут доступны в обновлении 1.1, над которым начата работа. В первую очередь будет выполнена реализация для .Net framework и Mono, которые стали лидерами по числу скачиваемых библиотек.
Запланировано в версии 1.1:
- Распознавание простейших типов: строка, число, дата, булево, неопределено;
- Распознавание составных типов: структура, массив;
- Распознавание ссылочных типов: справочник;
- Состояние соединения: открыто, разорвано, закрыто, поломано;
Комплексный пример для инициализации структуры с простейшими типами и вызов серверной процедуры Invoke в серверном модуле ElisyBusinessConnector , возвращающий эту же структуру. Считается, что подключение Сonnection уже создано (см. предыдущие примеры).
Пример выполняет запрос и возвращает предопределенный элемент из справочника Организации. Используется процедура Query в серверном модуле ElisyBusinessConnector :
Источник
Замена веб-сервисов/COM/OLE в 1С:Предприятие 8.2
Замена в 1С:Предприятие 8.2 COM/OLE для доступа из Linux и других операционных систем
Elisy Business Connector позволяет взаимодействовать с системами 1С:Предприятие через Интернет-технологии. Решение является кроссплатформенным и более эффективным, чем традиционный доступ через COM/OLE.
Elisy Business Connector – это связующий компонент. Он позволяет связываться с опубликованными информационными базами 1С:Предприятие на Apache/IIS и в облачных сервисах. Для отправки запросов и получения ответов используется http-протокол и форматы JSON/XML. В решение вошли многие разработки команды Elisy Software Design в области интеграции с 1С: .Net Bridge, MdInternals, Decompiler, Proxy.
Преимущества
Преимущества Business Connector перед веб-сервисами:
- Кроссплатформенность, ориентация на платформы разработки. Ориентация на протокол SOAP в веб-сервисах не гарантирует совместимость между платформами.
- Наличие совместимого API и использование родных объектов для популярных платформ Java/Mono/.Net. Веб-сервисы поддерживают стандарт SOAP, реализация которого может отличаться у популярных платформ разработки.
- Последовательные обращения в Business Connector проходят в одной сессии. Каждое обращение к веб-операции через веб-сервис создает отдельный сеанс.
- Кэширование возвращаемых значений модулей с повторным использованием. Для веб-сервисов не предусмотрен параметр «Повторное использование».
- Большая доступность технологии за счет протокола http. Доступность и настройка веб-сервисов может быть ограничена или затруднена на сервисах SaaS. Настройка веб-сервисов происходит сложнее, чем публикация 1С на веб-сервере.
Преимущества Business Connector перед COM/OLE:
- Кроссплатформенность и поддержка разных операционных систем. COM/OLE-приложения нацелены только на Windows.
- Совместимость с 64-разрядными Windows-приложениями. Одна сборка .Net/Mono/Java может работать на 32- и 64-разрядных приложениях. Технология COM/OLE требует различных версий библиотек для 32- и 64-разрыдных приложений.
- Большая доступность на виртуальных машинах, облачных системах, сервисах SaaS и мобильных устройствах.
- Нет привязки к аппаратному ключу защиты.
Используемый подход является кроссплатформенным: он не только позволяет обращаться к системам 1С:Предприятие, работающим на Windows и Linux, но также к системам, размещенным на облачных сервисах. Через Java и Mono поддерживаются мобильные и другие операционные системы. Сейчас компонент доступен для Java, .Net framework, Silverlight и Mono. Архитектура Business Connector устроена так, что в будущем позволит перенести компонент на другие популярные фреймворки. Внутри семейства систем 1С:Предприятие компонент доступен на Windows через технологию 1C.Net:Предприятие.
Business Connector является более эффективным, чем COM/OLE-доступ к 1С:Предприятие через тонкий клиент. Преимущества достигаются за счет архитектуры, спланированной для кроссплатформенной и многопоточной работы. На компьютере, с которого осуществляется доступ, можно не устанавливать 1С:Предприятие. Доступ можно организовать из любой операционной системы.
Планируется, что основное применение компонент получит при интеграции Интернет-проектов с конфигурациями 1С:Предприятие, такими как: Бухгалтерия и Управление Торговлей. Это могут быть Интернет-магазины или билинговые системы.
Идея создания
С выходом ознакомительной версии 1С:Предприятие 8.3 стала ясна четкая направленность компании 1С на кроссплатформенность: на одновременную поддержку Windows и Linux.
[more]
Это значит, что в будущем традиционно используемые в 1С Windows-технологии должны быть пересмотрены в сторону универсальности и общей доступности как из Windows, так и из Linux. В первую очередь это касается удобной COM/OLE-технологии. В системах 1С, начиная с 7.7, COM использовался в основном в 2х случаях:
- Внешние компоненты по технологии COM. Частным случаем является создание и использование зарегистрированных в реестре COM-серверов сторонних разработчиков, таких как: генераторы штрихкодов, VBScript с регулярными выражениями, сокеты и др. В 1С 8.2 был представлен альтернативный Native API-интерфейс, который доступен из Linux. Но при этом Native API более урезан по функциональности, чем COM-доступ, например, не предусмотрен аналог IDispatch-объектов. Также урезанной альтернативой Linux станет вызов через командную строку приложений и обработка файлов на их выходе.
- Внешний доступ к приложению 1С:Предприятие через COM/OLE. Урезанная альтернатива – запуск скриптов 1С по расписанию с генерированием файлов-флагов, а также написание и публикация специализированных SOAP веб-сервисов.
Решение для первой проблемы не может впечатлить своей универсальностью и эффективностью с точки зрения разработчика. Так как всеобъемлющее Native API-приложение должно быть скомпилировано для Windows, Linux, (MacOS в 8.3), а также для популярных браузеров: IE, FireFox, Chrome, Opera, Safari. Число поддерживаемых проектов увеличивает вероятность ошибок из-за специфики каждой из поддерживаемых ИТ-архитектур.
Третья проблема не славится стандартными решениями. Задания, генерирующие файлы-флаги, запускаются только по расписанию, а не по требованию. А веб-сервисы требуют вмешательства в конфигурацию, сложны конфигурированием и ограничены SOAP-стандартом. Все это сопровождается известными нерешаемыми проблемами в Интернете при публикации и нераспознаваемыми SOAP-пакетами (случай с Java).
Универсальный подход для решения третьей проблемы, положенный в основу Elisy Business Connector, состоит в следующем. Опубликованная через веб-браузер конфигурация 1С версии 8.2 и выше рассматривается как набор веб-сервисов с доступом по http/https. Используемые форматы JSON и XML обеспечивют универсальное подключение более легкое, чем через SOAP.
Насколько перспективен Linux для 1С:Предприятие в ближайшее время? Скорее всего, доля Linux в локальных сетях коммерческих компаний возрастет не сильно в ближайшие 10-20 лет. Но всю картину меняют облачные сервисы 1С, которые с вероятностью 99% будут строиться не на основе Windows Azure. Это значит, что значительная часть типовых конфигураций будет размещена на Linux с экономией на поддержке и сисадминах. Какую конкретно долю займут облачные сервисы сказать трудно.
Простые примеры
Простые примеры демонстрируют возможности версии 1.0, которая доступна для Java, Mono, Net framework, Silverlight. Это первая версия, предназначенная для ознакомления сообщества с технологией. На основе полученных отзывов и замечаний будет планироваться расширение функциональности конечного продукта и расширение или сокращение поддерживаемых платформ.
Доступная функциональность:
- Подключение к информационной базе и отключение;
- Получение информации о подключении;
- Вызов удаленных серверных методов без параметров
- Распознавание простейшего типа: строка;
- Поддержка Java 1.6 SE, .Net framework 4, Silverlight 4, Mono 2.8
Особенности программирования для Java:
- Названия методов для Java начинаются с прописной буквы. Например, Open, Close и GetUserList следует писать как open, close и getUserList.
Особенности программирования для Silverlight:
- 1. Политика безопасности запрещает в Сильверлайте междоменные обращения. Поэтому необходимо создать файл clientaccesspolicy.xml или crossdomain.xml в корневом каталоге домена, к которому выполняется обращение. Соответственно, нельзя обращаться к приложениям с демо-сервера 1С так как таких файлов там нет.
- 2. Приведенный выше код нужно запускать в отдельном потоке, так как Сильверлайт очень трепетно относится к основному GUI-потоку и асинхронные вызовы, задействующие основной поток дают некорректные результаты (Например, HttpWebResponse.EndGetResponse(), запущенный в основном потоке возвращает null).
Пример возвращает строку, полученную при запуске серверной функции ПолучитьТекстЗапросаДокументыРасчетовСПоставщиками модуля ВзаиморасчетыСервер :
- string connectionString = «ws=\»http://demo-ma.1c.ru/trade\»;Usr=\»АфанасьевВМ (руководитель отдела оптовых продаж)\»;Pwd=\»\»;L=\»ru_RU\»»;
- Connection connection = new Connection(connectionString);
- connection.Open();
- connection.Login();
- GlobalContext gc = new GlobalContext(connection);
- string serverValue = gc.GetServerModule(«ВзаиморасчетыСервер»).Invoke(«ПолучитьТекстЗапросаДокументыРасчетовСПоставщиками», null).ToString();
- connection.Close();
Данный пример получает в массив users всех пользователей информационной базы из списка при запуске 1С:
- string connectionString = «ws=\»http://demo-ma.1c.ru/trade\»;Usr=\»АфанасьевВМ (руководитель отдела оптовых продаж)\»;Pwd=\»\»;L=\»ru_RU\»»;
- Connection connection = new Connection(connectionString);
- connection.Open();
- string[] users = connection.GetUserList();
Расширенные примеры
Расширенные примеры будут доступны в обновлении 1.1, над которым начата работа. В первую очередь будет выполнена реализация для .Net framework и Mono, которые стали лидерами по числу скачанных библиотек.
Запланировано в версии 1.1:
- Распознавание простейших типов: строка, число, дата, булево, неопределено
- Распознавание составных типов: структура, массив
- Распознавание ссылочных типов: справочник
- Состояние соединения: открыто, разорвано, закрыто, поломано
Комплексный пример для инициализации структуры с простейшими типами и вызов серверной процедуры Invoke в серверном модуле ElisyBusinessConnector , возвращающий эту же структуру. Считается, что подключение Сonnection уже создано (см. предыдущие примеры).
- StructureType s = new StructureType(GlobalContext);
- s[«null»] = new NullType();
- s[«undefined»] = new UndefinedType();
- s[«string»] = new StringType() < Value = "String1" >;
- s[«number»] = new NumberType() < Value = 12345.678 >;
- s[«date»] = new DateType() < Value = DateTime.Now >;
- s[«boolean»] = new BooleanType() < Value = true >;
- GlobalContext = new GlobalContext(Connection);
- var result = GlobalContext.GetServerModule(«ElisyBusinessConnector»).Invoke(«Invoke», new object[] < "result = parameters;", s >) as StructureType;
Пример выполняет запрос и возвращает предопределенный элемент из справочника Организации. Используется процедура Query в серверном модуле ElisyBusinessConnector :
- StructureType parameters = new StructureType(GlobalContext);
- IBaseType ref = GlobalContext.PredefinedValue(«Справочник.Организации. УправленческаяОрганизация»);
- parameters[«Ссылка»] = ref;
- var record = GlobalContext.GetServerModule(«ElisyBusinessConnector»).Invoke(«Query», new object[] <
- @»ВЫБРАТЬ Справочник.Ссылка КАК Ref, Справочник.Наименование КАК Name
- ИЗ Справочник.Организации КАК Справочник
- ГДЕ Справочник.Ссылка = &Ссылка»,
- parameters
- >).OfType().FirstOrDefault();
Многопоточность
Организация многопоточности возможна только в серверном режиме работы 1С на разных сессиях. Опыты показали, что выигрыша в производительности в файловом режиме работы 1С нет. Нет выигрыша также в серверном режиме на одной сессии – сервер 1С обрабатывает серверные вызовы для одной сессии последовательно.
Источник