Создание анонимного веб-сервиса
Glossary Item Box
Общие положения
Сервисная модель Creatio реализует базовый набор веб-сервисов, с помощью которых может быть организована интеграция Creatio с внешними приложениями и системами.
Примеры системных сервисов:
- EntityDataService.svc — обмен данными с Creatio по протоколу OData 3.
- odata — обмен данными с Creatio по протоколу OData 4.
- ProcessEngineService.svc — запуск бизнес-процессов Creatio из внешних приложений.
Эти сервисы реализованы на основе технологии WCF и управляются на уровне IIS.
Также в Creatio существуют конфигурационные веб-сервисы, предназначенные для вызова из клиентской части приложения. С помощью конфигурационных веб-сервисов можно реализовывать специфические интеграционные задачи. Как создать пользовательский конфигурационный сервис, читайте в статье "Создание пользовательского конфигурационного сервиса".
Большинство WCF-сервисов требуют предварительной аутентификации пользователя. Некоторые из сервисов, например, AuthService.svc, доступны для анонимного использования.
Анонимный доступ к конфигрурационным сервисам в ASP.Net Framework
Чтобы создать WCF-сервис, доступный без аутентификации пользователей:
- Создайте конфигурационный веб-сервис (при необходимости).
- Зарегистрируйте WCF-сервис в каталоге ..\Terrasoft.WebApp\ServiceModel.
- Сконфигурируйте WCF-сервис для протоколов http и https.
- Настройте доступ к WCF-сервису для всех пользователей.
Создание конфигурационного сервиса
Как создать конфигурационный сервис, читайте в статье "Создание пользовательского конфигурационного сервиса".
При создании анонимного конфигурационного сервиса необходимо использовать системное подключение SystemUserConnection вместо пользовательского UserConnection.
Для обеспечения работоспособности бизнес-процессов при работе с Entity из анонимного веб-сервиса после получения SystemUserConnection необходимо вызвать метод SessionHelper.SpecifyWebOperationIdentity пространства имён Terrasoft.Web.Common:
Terrasoft.Web.Common.SessionHelper.SpecifyWebOperationIdentity(HttpContextAccessor.GetInstance(), SystemUserConnection.CurrentUser);
Данный метод позволяет указать пользователя, от имени которого будет выполняться обработка данного http-запроса.
Регистрация WCF-сервиса
Для регистрации WCF-сервиса в каталоге ..\Terrasoft.WebApp\ServiceModel необходимо создать файл с расширением svc и добавить в него следующую запись:
<% @ServiceHost Service = "Service, ServiceNamespace" Factory = "Factory, FactoryNamespace" Debug = "Debug" Language = "Language" CodeBehind = "CodeBehind" %>
В атрибуте Service необходимо указать полное имя класса конфигурационного сервиса. Подробнее о WCF-директиве @ServiceHost читайте в документации Microsoft.
Конфигурирование WCF-сервиса для протоколов http и https
Для конфигурирования WCF-сервиса для протоколов http и https необходимо в файлах services.config, расположенных в каталогах ..\Terrasoft.WebApp\ServiceModel\http и ..\Terrasoft.WebApp\ServiceModel\https, добавить следующую запись:
<services> ... <service name="Terrasoft.Configuration.[Service name]"> <endpoint name="[Service name]EndPoint" address="" binding="webHttpBinding" behaviorConfiguration="RestServiceBehavior" bindingNamespace="http://Terrasoft.WebApp.ServiceModel" contract="Terrasoft.Configuration.[Service name]" /> </service> </services>
Здесь выполняется конфигурирование сервиса. Элемент <services> должен содержать перечень конфигураций всех сервисов приложения (вложенные элементы <service>). Атрибут name должен содержать название типа (класса или интерфейса), реализующего контракт сервиса. Вложенный элемент <endpoint> требует адрес, привязку и интерфейс, определяющий контракт сервиса, указанный в атрибуте name элемента <service>.
Подробное описание элементов конфигурирования сервиса доступно в документации Microsoft.
Настройка доступа к WCF-сервису для всех пользователей
Для настройки доступа к WCF-сервису для всех пользователей в файл ..\Terrasoft.WebApp\Web.config необходимо внести следующие изменения:
- Добавить элемент <location>, определяющий относительный путь и права доступа к сервису.
- В элементе <appSettings> изменить значение value для ключа "AllowedLocations", добавив в него относительный путь к сервису.
Пример изменений в файле ..\Terrasoft.WebApp\Web.config:
<?xml version="1.0" encoding="utf-8"?> <configuration> ... <location path="ServiceModel/[Service name].svc"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location> ... <appSettings> ... <add key="AllowedLocations" value="...;ServiceModel/[Service name].svc" /> ... </appSettings> ... </configuration>
После перезагрузки пула приложения в IIS сервис станет доступен по адресу:
[Адрес приложения]/0/ServiceModel/[Название сервиса].svc/[Конечная точка пользовательского сервиса]?[Опциональные параметры]
К сервису можно обращаться из браузера, как с предварительным вводом логина и пароля, так и без их использования.
Для настройки анонимного веб-сервиса требуется изменение конфигурационных файлов приложения. При обновлении приложения все конфигурационные файлы заменяются новыми. Следовательно, после обновления приложения потребуется повторная настройка веб-сервиса.
Анонимный доступ к конфигурационным сервисам в ASP.Net Core
Для анонимного доступа к конфигурационным сервисам в ASP.Net Core необходимо только добавить информацию о сервисе в блок AnonymousRoutes конфигурационного файла ..\Terrasoft.WebHost\appsettings.json.
"Terrasoft.Configuration.[Service name]": [ "/ServiceModel/[Service name].svc" ]
При этом исходный код сервиса изменять не нужно. Если используется пространство имен System.Web, то его необходимо заменить на Terrasoft.Web.Http.Abstractions.
Сервис будет доступен по следующим адресам:
[Адрес приложения]/ServiceModel/[Service name].svc/[Service endpoint name]?[Options] [Адрес приложения]/0/ServiceModel/[Service name].svc/[Service endpoint name]?[Options]
Смотрите также: