Знакомимся с HTTP-сервисами в OneScript

25.11.19

Разработка - OneScript

В статье описан механизм HTTP-сервисов в OneScript, а также приведен пример интеграции и совместной работы с 1С:Предприятие

Скачать исходный код

Наименование Файл Версия Размер
HTTP-сервисы в OneScript. Знакомство:
.zip 4,39Mb
24
.zip 4,39Mb 24 Скачать

Введение

Начиная с версии 1.0.19, в среде OneScript, появился экспериментальный механизм http-сервисов. Он является аналогом механизма http-сервисов в 1С:Предприятие и позволяет взаимодействовать со средой OneScript по протоколу http практически также, как это происходит в среде 1С:Предприятие.

По сути – это классическое приложение (сайт) ASP.NET, с возможностью исполнения кода, написанного на языке 1С, в среде OneScript.

Для чего это может быть использовано

В отличие от технологии (//infostart.ru/public/722160/), которая ориентирована на полноценную веб-разработку, механизм http-сервисов скорее ориентирован на быстрое создание небольших сервисов, которые являются неким промежуточным звеном, между пользователем/внешним сервисом и информационной системой на базе 1С:Предприятие, в тех случаях, когда непосредственное использование средств платформы неудобно или невозможно по каким-либо причинам.

В качестве примера, в настоящей статье рассматривается реализация сервиса сброса пароля пользователя информационной базы, аналогично тому, как это реализовано на сайте Инфостарт. Подобный сервис может быть использован совместно с подсистемой Самообслуживание клиентов, для самостоятельного восстановления доступа внешнего пользователя в информационную базу.

Описание сервиса и логика работы

Итак, нам необходимо реализовать сервис самостоятельного восстановления доступа в информационную базу для внешних пользователей. В качестве образца, используем сервис восстановления доступа, который реализован на сайте Инфостарт. Логику его работы можно описать примерно следующей последовательностью действий:

  1. Пользователь, забывший пароль переходит по ссылке “Забыли пароль”
  2. В появившуюся форму ввода, пользователь вводит идентификационные данные (в нашем случае – это имя пользователя ИБ и адрес электронной почты).
  3. Пользователь нажимает кнопку Создать запрос и идентификационные данные поступают на вход сервиса.
  4. Сервис проверяет правильность данных (существует ли такой пользователь, активен ли он), а также допустимость создания запроса на сброс пароля (как пример - защита от перебора и создания множества валидных запросов).
  5. В случае успеха, сервис создает запрос на сброс пароля в информационной базе и сообщает об этом пользователю. Пользователю отправляется сообщение с кодом или ссылкой для подтверждения запроса. В случае, невозможности создания запроса выдается сообщение об ошибке. Запрос должен действительным ограниченный промежуток времени.
  6. Пользователь переходит на страницу подтверждения, ссылка на которую отправляется пользователю и вводит код подтверждения.
  7. Пользователь нажимает на кнопку Подтвердить и код подтверждения поступает на вход сервиса.
  8. Сервис анализирует допустимость кода подтверждения и в случае успеха, сбрасывает пароль соответствующего пользователя. Новый пароль отправляется пользователю по электронной почте или телефону.

Выбор технологии для реализации

В общем случае, данный сервис может быть реализован с использованием следующих технологий:

  1. Только штатные средства платформы - http-сервисы. Недостатком данного подхода является сложность защиты от DDoS атак и как следствие – возможное снижение производительности работы для внутренних пользователей.
  2. Использование отличных от 1C технологий, таких, как php, asp.net, OneScript или других, совместно со средствами платформы.

В настоящей статье, мы остановим свой выбор на OneScript, поскольку для человека, программирующего на 1С она имеет наименьший порог вхождения.

Реализация

Поскольку в настоящее время OneScript не поддерживает отладку для web-приложений, а программирование в блокноте и отладка через Сообщить не наш метод J, реализуем сервис с использованием только штатных средств платформы, а затем перенесем его в OneScript.

В аттаче к публикации есть демо-конфигурация, содержащая пример простой реализации такого сервиса средствами платформы, а также web-приложение OneScript и дальнейшее изложение будет основано на этих материалах (к сожалению отсутствует возможность бесплатного аттача файлов, поэтому за стартмани L).

Описание конфигурации и особенности реализации

Для простоты, справочник ВнешниеПользователи содержит имя пользователя информационной базы, а также адрес электронной почты.

Все функции и процедуры, реализация которых одличается для OneScript и 1С (работа с макетами, работа с информационной базой), для простоты вынесены в общий модуль ПлатформозависимыеOneScript.

Для простоты, обновление данных об активных пользователях в локальной бд сервиса реализовано в ручном режиме.

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

Для упрощения миграции Имена обработчиков http-сервисов изменены на предопределенное имя

ОбработкаВызоваHTTPСервиса .

Для упрощения миграции корневые url сервисов соответствуют именам файлов os.

Перенос сервиса на OneScript

Документацию по установке и использованию http-сервисов в OneScript можно посмотреть по следующим ссылке: https://github.com/EvilBeaver/oscriptiocontent/blob/master/markdown/docs/ht­tp.md

Поскольку в подавляющем большинстве случаев, в качестве клиентской операционной системы у пользователей является ОС Windows, в дальнейшем, будет рассмотрена установка и настройка именно для этой ОС.

Предварительные условия

На компьютере должен быть установлен .NET Framework, версии не ниже 4.5.2

На компьютере должна быть установлен IIS или IIS Express.

На компьютере должна быть установлена платформа 1С:Предприятие, версии не ниже 8.3.5. (Не относится к OneScript, необходимо для работы с демо-базой).

Демонстрационная база и веб-сервисы должны быть опубликованы на IIS с именами chpwddb и chpwd соответственно (Не относится к OneScript, необходимо для работы с демо-базой).

Создание web-приложения OneScript

Поскольку http-сервисы OneScript представляют собой обычный сайт/web-приложение ASP.NET, первым делом необходимо создать web-приложение.

Скачиваем zip архив с сайта http://oscript.io/.

В IIS Manager создаем web-приложение, примерно как описано здесь: https://metanit.com/sharp/mvc/13.2.php (до момента работы с Visual Studio). В процессе В поле псевдоним вводим onescript (может быть любое имя в зависимости от ваших потребностей), в поле Физический путь создаем и выбираем папку приложения (в нашем случае onescript), Выбираем классический пул приложений ASP.NET 4.0 или ASP.NET 4.5. и нажимаем ОК.

В папке приложения (для IIS – это c:\inetpub\wwwroot\onescript, для IIS express что-то вроде C:\Users\<username>\Documents\IISExpress) создаем папку Bin. Копируем в нее все dll из скачанного архива.

В папке приложения создаем файл web.config, примерно следующего содержания:

<configuration>

  <system.web>

    <httpHandlers>

      <add verb="*" path="*.os" type="OneScript.ASPNETHandler.ASPNETHandler, ASPNETHandler"/>

    </httpHandlers>

    <customErrors mode="Off"/>

  </system.web>

  <system.webServer>

    <handlers>

      <add name="OneScript" path="*.os" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="File" preCondition="classicMode,runtimeVersionv4.0,bitness64"/>

      <add name="OneScript32" path="*.os" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="File" preCondition="classicMode,runtimeVersionv4.0,bitness32"/>

    </handlers>

   </system.webServer>

  <appSettings>

    <add key="CachingEnabled" value="true"/>

  </appSettings>

</configuration>

 

Наше приложение готово.

Создаем в папке приложения файл hello.os примерно следующего содержания:

// Предопределенная функция. Является точкой входа в обработку запроса.

Функция ОбработкаВызоваHTTPСервиса(Запрос) Экспорт

 

      Ответ = Новый HTTPСервисОтвет(200);

          Ответ.УстановитьТелоИзСтроки("Hello World!");

          Возврат Ответ;

КонецФункции

Тестируем приложение, набрав в строке браузера http://localhost/onescript.hello.os. Если все настроено верно, будет выведено соответствующее сообщение.

Добавление внешних библиотек

Для хранения данных о пользователях и запросах наше приложение нуждается хранилище данных, по аналогии с информационной базой. Для работы с СУБД, в OneScript есть прекрасная библиотека  //infostart.ru/public/672461/, которую мы и будем использовать. В демо-примере используется СУБД SQLite, однако библиотека поддерживает и другие распространенные СУБД.

Для получения бинарных файлов библиотеки я скомпилировал исходные файлы, которые взял с github (https://github.com/ret-Phoenix/oscript-sql). Возможно у автора есть возможность для загрузки бинарных файлов.

Полученные dll копируем в папку Bin нашего приложения и редактируем web.config добавив в секцию <appSettings> нижеследующую зпрись:

<add key="sql" value="attachAssembly" />

Где sql – имя dll без расширения (sql.dll – корневая dll библиотеки), значение attachAssembly – говорит о том, что необходимо загрузить dll при старте приложения.

Таким образом, после старта, из нашего кода будут доступны типы, предоставляемые этой библиотекой без использования директивы #Использовать и мы сможем использовать их в своем коде.

Для нашего примера, в папке приложения создадим подпапку db, которая будет использоваться для хранения локальной базы данных и дадим пользователю IUSR права на запись в эту папку.

Добавление внешних модулей

Еще одной возможностью является загрузка при старте локальных библиотек, которые представляют собой os файлы, имеющие формат общих модулей 1С:Предприятие. Их использование аналогично использованию общих модулей в платформе. Имена общих модулей в коде, соответствуют именам файлов os.

В нашем случае, в папке приложения создадим подпапку modules, где будут располагаться наши “общие модули”. Отредактируем файл web.config, добавив в секцию  <appSettings> нижеследующую зпрись:

<add key="commonModulesPath" value="~/modules/" />

 Где ~/modules/ - виртуальный путь к папке, где расположены файлы модулей.

При загрузке приложения, будут скомпилированы и загружены все файлы os, находящиеся в этой папке.

В нашем демонстрационном примере, мы перенесем в OneScript четыре общих модуля из конфигурации. Для этого создадим в паке modules четыре файла с именами КонфигурацияOneScript.os, ОбщиеФункции.os, ПлатформозависимыеOneScript.os и СлужебныйOneScript.os.

Поместим содержимое общих модулей из конфигуратора в соответствующие файлы и сохраним их. В файле ПлатформозависимыеOneScript.os Закомментируем код, который предназначен для работы в 1С и разкомментируем код, который предназначен для работы в OneScript.

Включение лога загрузки

Для определения проблем, при загрузке внешних библиотек и модулей можно включить лог загрузки, где будут отображаться все ошибки при загрузке “общих модулей” и внешних dll. Это можно сделать, добавив в web.config в секцию <appSettings> нижеследующую запись:

<add key="LogToPath" value="~/db/"/>

 Где ~/db/ - виртуальный путь к папке логов. Пользователь от имени которого выполняется web-приложение должен иметь права на запись в эту папку.

Для нашего примера – это ранее созданная папка папка db.

Ну вт в общем то и все, что касается возможностей, развертывания и настройки http-сервисов OneScript. Осталось проделать несколько операций, специфичных для демонстрационной базы.

Добавление шаблонов веб-страниц

В папке web-приложения создадим подпапку templates. В этой папке создадим два файла СоздатьЗапрос.ospt и подтвердитьЗапрос.ospt в соответствии с именами соответствующих макетов в конфигурации. Перенесем содержимое макетов в соответствующие файлы и отредактируем значения action соответственно на action=createrequest.os и action=confirmrequest.os . Данные файлы содержат html код наших страниц.

Добавление сервисов создания и подтверждения запросов

В папке web-приложения создадим файлы createrequest.os и confirmrequest.os. Перенесем в них содержимое соответствующих http сервисов из конфигуратра и сохраним файлы.

Добавление сервиса обновления данных о пользователях

В папке web-приложения создадим папку services. В продуктивных средах, лучше дать ей сложное название типа строкового представления GUID, для исключения доступа к служебным сервисам извне.

В этой папке создадим файлы updatelogin.os и createdb.os. Поместим в файл updatelogin.os содержимое обработчика соответствующего http-сервиса из конфигурации и сохраним файл. Поместим в файл created.os содержимое соответствующего общего модуля, предварительно раскомментировав его и сохраним файл.

Из браузера выполним создание БД и таблиц, набрав http://localhost/onescript/services/createdb.os. В папке db появится файл local.db.

Заключение

Ну вот собственно и все, наш демонстрационный сервис развернут и готов к работе.

В заключении хочу отметить, что на мой взгляд, механизмы http-сервисов в OneScript могут вполне успешно использоваться для создания небольших сервисов в информационных системах, построеных на платформе 1С:Предприятие, с минимальными усилиями на изучение неизвестных технологий и освоение новых средств разработки.

С более продвинутой методикой использования http-сервисов, позволяющей автоматизировать многие "ручные" операции можно познакомиться в этой статье.

См. также

Особенности национального Workflow: Github Actions и OneScript

Групповая разработка (Git, хранилище) OneScript Бесплатно (free)

Сегодня мы посмотрим на Github Actions - встроенный инструментарий Github для автоматизации рабочих процессов. Разберем, что это такое, зачем и причем тут OneScript.

25.03.2024    1561    bayselonarrend    3    

38

TCP прокси-сервер хранилища конфигурации 1С

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Платформа 1С v8.3 Бесплатно (free)

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    2999    kamisov    17    

59

Что такое ОСень? Или как лучшие практики из мира Java прижились в экосистеме OneScript

OneScript Бесплатно (free)

Думаете, на OneScript неудобно создавать сложные инфраструктурные приложения? Ошибаетесь. Благодаря фреймворку ОСень за последний год экосистема библиотек, упрощающих написание собственных приложений, существенно выросла. Расскажем о самых передовых технологиях OneScript. Спойлер: будет много рефлексии, мета-аннотаций, желудей, напильников и дубов с завязями.

21.11.2023    3256    NikitaIvanchenko    16    

46

Библиотека создания клиент-серверных приложений для сценарного языка OneScript

Инструментарий разработчика Работа с интерфейсом OneScript Россия Бесплатно (free)

Представленная библиотека позволяет создать многопоточный TCP сервер, к которому может одновременно подключиться множество TCP клиентов с удаленных компьютеров. Эти клиенты могут вызывать методы скриптов как на сервере, так и на других клиентах. Методы будут выполнены в контексте скрипта на удаленной машине. Возможна передача параметров в метод и получение результата. Для TCP клиента можно создать графический интерфейс с большим набором элементов управления, модальными диалоговыми окнами и с обработкой событий.

31.07.2023    2067    ahyahy    8    

32

Получаем статистику по git-репозиторию в разрезе разработчиков

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Бесплатно (free)

Итак! Представим, что наступил момент, когда разработка через исходный код реализована на предприятии в полном объеме. Мы разрабатываем в EDT или конфигураторе (но выгружаем конфигурацию в исходный код), версионируем внешние отчеты и обработки и расширения, собираем релизы, проверяем код статическим анализом, в разработке царит гармония и мир. Красота! Но менеджерам этого мало, всегда хочется чего-то еще, и вот мне прилетает задача - дай статистику по вкладу в код каждого разработчика.

13.03.2023    3796    ardn    3    

27

Прокси хранилища 1С (IIS, OneScript)

Групповая разработка (Git, хранилище) OneScript DevOps и автоматизация разработки Платформа 1С v8.3 Россия Бесплатно (free)

Избавляемся от версионной зависимости, проверяем комментарии, вызываем веб-хуки, делаем красивые пути. И все это на привычном IIS и понятном OneScript.

08.12.2022    8156    kamisov    57    

95

OneScript на страже порядка на сервере тестовых баз данных

Администрирование СУБД OneScript Бесплатно (free)

Наводим порядок на сервере тестовых баз с помощью любимого инструмента - OneScript. Находим заброшенные базы на сервере MS SQL, определяем кандидатов на удаление.

14.06.2022    4320    ardn    23    

39

Идем в Serverless с кодом 1С

Облачные сервисы, хостинг OneScript Россия Абонемент ($m)

Запускаем код OneScript в Serverless Container Яндекса.

1 стартмани

29.04.2022    3740    1    papami    2    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1522 16.01.18 11:27 Сейчас в теме
(0) Хорошая публикация.

Спасибо и за реализацию HTTP в OneScript, и за статью!
+
2. acsent 1200 16.01.18 12:22 Сейчас в теме
Пора уже свою CMS на 1с писать )))
+
3. nixel 1408 16.01.18 12:58 Сейчас в теме
Как how-to статья хорошая, но на мой взгляд не хватает картинок внутренностей сервисов. Из описания понятно, что есть некая база, в ней есть некие описанные сервисы, некие макеты, (еще и документ какой-то?) но без скачивания и ковыряния в конфе понять что конкретно происходит тяжеловато.

Возможно стоит добавить некоторое количество gif с демонстрацией работы сервиса и сами скриншоты "кишок" конфигурации.
+
4. acsent 1200 17.01.18 10:19 Сейчас в теме
(3) так вроде не база 1с, а просто скрипты на OneScript
+
5. blackhole321 1305 17.01.18 10:37 Сейчас в теме
(4)Там и скрипты и база
+
6. blackhole321 1305 17.01.18 11:31 Сейчас в теме
(3)Добавил скриншоты с конфигурацией и переносом. Так пойдет?
+
7. blackhole321 1305 17.01.18 11:35 Сейчас в теме
Обнаружил ошибку в скрипте создания БД.
Вместо:
Соединение = Новый Соединение();
Соединение.ТипСУБД = Соединение.ТипыСУБД.sqlite;
Соединение.СтрокаСоединения = "Data Source=" + ПолучитьФизическийПутьИзВиртуального("~/db/localdb.db;") + "PRAGMA journal_mode=WAL;Version=3;";
Соединение.Открыть();
Должно быть:
СредстваHTTP = Новый СредстваHTTP;
Соединение = Новый Соединение();
Соединение.ТипСУБД = Соединение.ТипыСУБД.sqlite;
Соединение.СтрокаСоединения = "Data Source=" + СредстваHTTP.ПолучитьФизическийПутьИзВиртуального("~/db/localdb.db") + ";PRAGMA journal_mode=WAL;Version=3;";
Соединение.Открыть();
В архиве поменял. Тем, кто скачал могу перевыслать архив с этим исправлением.
+
8. vlad3190 26.01.18 13:42 Сейчас в теме
При установке на Windows 7 (IIS Express) x64, выскочила ошибка:
"Ошибка HTTP 404.2 - Not Found Запрашиваемая страница не может быть отображена из-за применяемых на веб-сервере настроек списка ограничений ISAPI и CGI."

После ковыряний и гугления, помогла статья http://winitpro.ru/index.php/2012/05/24/nastraivaem-iis-7-5-dlya-raboty-s-asp-net-4-0/. Как оказалось, отсутсвовали разрешения на выполнение модулей isapi, которые прописаны в web.config. По всей видимости это может быть связано с тем, что .net framework нужной версии, я устанавливал после установки iis express.
+
9. alex_vert 31.05.19 09:52 Сейчас в теме
Первый раз работает, потом выскакивает сообщение:
Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
+
10. blackhole321 1305 31.05.19 09:56 Сейчас в теме
11. alex_vert 31.05.19 17:07 Сейчас в теме
(10) windows server 2016 standard
+
12. blackhole321 1305 31.05.19 17:12 Сейчас в теме
13. alex_vert 31.05.19 17:13 Сейчас в теме
(12)последняя с сайта OneScript-1.0.21.zip
+
14. blackhole321 1305 31.05.19 17:14 Сейчас в теме
(13)Ну тогда наверное что-то сломалось опять.
Я делал для 19, потом правил баги в 20. Что в 21 - не смотрел.
Для Вас принципиально 21?
+
15. alex_vert 31.05.19 17:14 Сейчас в теме
Еще есть ошибка в публикации нужно набирать не http://localhost/onescript.hello.os а http://localhost/onescript/hello.os
+
16. ktb 620 14.10.19 14:49 Сейчас в теме
А как подключать библиотеки oscript (#Использовать <имя библиотеки>)? Ругается "Библиотека не найдена" :-( Как указать путь к каталогу библиотек? Пробовал разместить в bin файл oscript.cfg, не помогло!
+
17. user863354 16.10.19 12:39 Сейчас в теме
Добрый день! А веб-форму с полями Пользователь и Электронная почта где создавали? В OneScript?
+
18. blackhole321 1305 16.10.19 12:45 Сейчас в теме
(17)Формы - это обычные html-страницы (или шаблоны на основе html-страниц). Могут создаваться где угодно, хоть в текстовом редакторе. Отдаются клиенту OneScript'ом.
+
19. user863354 16.10.19 13:09 Сейчас в теме
У меня стоит задача - создать простую форму с полями: возраст, ежемесячный доход, стаж работы, e-mail. Форма открывается по ссылке, пользователь заполняет форму и нажимает кнопку Отправить, после чего заполненные данные передаются в 1С, где происходит небольшой расчет и отправка отчета, например, о предварительной кредитоспособности физлица, на указанный e-mail. Как посоветуете это сделать?
+
20. user863354 16.10.19 13:20 Сейчас в теме
(19) и еще вопросик: могу ли я создать нужную мне веб-страницу с использованием Вашей каркасной конфигурации https://infostart.ru/public/841785/?
+
22. blackhole321 1305 16.10.19 13:40 Сейчас в теме
21. blackhole321 1305 16.10.19 13:40 Сейчас в теме
(19)
У меня стоит задача - создать простую форму

Во внутренней сети предприятия?
Сколько пользователей?
+
23. user1284675 21.06.22 15:13 Сейчас в теме
Добрый день, подскажите, каким способом подключить библиотеку onescript, а именно irac если она состоит не только из общих модулей, но и модулей классов, перечислений?
При подключении как #Использование irac или #Использование "абсолютный путь irac" выдает библиотека не найдена, хотя доступов у пользователя IIS точно достаточно.
+
24. blackhole321 1305 22.06.22 12:58 Сейчас в теме
(23)
При подключении как #Использование irac или #Использование "абсолютный путь irac" выдает библиотека не найдена, хотя доступов у пользователя IIS точно достаточно.

Добрый день!
#Использовать - не работает в http сервисах. Надо либо подключить необходимые классы в web.config, либо сделать их обработками и опять таки подключить их через web.config
+
25. user1284675 23.06.22 08:15 Сейчас в теме
(24) Доброе утро! Спасибо за ответ, а можете подсказать, как тогда быть с библиотеками типа irac? У нее не только модули классов, но и общие модули и макеты. Нужно дерево папок в modules добавлять и подключать в web.config? у меня не взлетело, приложение так не видит библиотеку.
+
27. blackhole321 1305 23.06.22 11:42 Сейчас в теме
(25)Тут к сожалению не подскажу, это надо смотреть разбираться.
+
26. user1284675 23.06.22 08:54 Сейчас в теме
и также можете еще пояснить, что в данном случае значит сделать обработками?
(24)
+
28. blackhole321 1305 23.06.22 11:44 Сейчас в теме
Оставьте свое сообщение