Creatio development guide
PDF
Это документация Creatio версии 7.16.0. Мы рекомендуем использовать новую версию документации.

Создание пользовательского конфигурационного сервиса

Glossary Item Box

Общие положения

Сервисная модель Creatio реализует базовый набор веб-сервисов, с помощью которых может быть организована интеграция Creatio с внешними приложениями и системами. Примеры системных сервисов:

Эти сервисы реализованы на основе технологии WCF и управляются на уровне IIS.

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

Конфигурационный веб-сервис представляет собой RESTful-сервис, реализованный на базе технологии WCF. Он доступен по следующему адресу:

[Адрес приложения]/0/rest/[Название пользовательского сервиса]/[Конечная точка пользовательского сервиса]?[Опциональные параметры]

Например:

http://mysite.сreatio.com/0/rest/UsrCustomConfigurationService/GetContactIdByName?Name=User1

Пользовательский конфигурационный сервис доступен только после аутентификации пользователя с помощью сервиса AuthService.svc (см. "Аутентификация внешних запросов").

Чтобы создать пользовательский веб-сервис в конфигурации:

  1. В пакете разработки создайте схему типа [Исходный код].
  2. В исходном коде схемы создайте класс сервиса. Задействуйте пространство имен Terrasoft.Configuration или любое вложенное в него пространство имен. Пометьте класс атрибутами [ServiceContract] и [AspNetCompatibilityRequirements] с необходимыми параметрами. Класс сервиса должен быть наследником Terrasoft.Web.Common.BaseService.
  3. Добавьте в класс реализацию методов, соответствующую конечным точкам сервиса. Каждый метод сервиса должен быть помечен атрибутами [OperationContract] и [WebInvoke] с требуемыми параметрами. При необходимости передавать данные сложных типов (экземпляры объектов, коллекции, массивы и т. п.) вы можете реализовать дополнительные классы, экземпляры которых будет принимать или возвращать метод вашего сервиса. Каждый такой класс должен быть помечен атрибутом [DataContract], а поля класса — атрибутом [DataMember].
  4. Выполните публикацию схемы исходного кода.

После публикации схемы созданный веб-сервис станет доступен для вызова из программного кода конфигурационных схем, а также из внешних приложений (см. "Вызов конфигурационного сервиса из клиентской части приложения").

Особенности разработки конфигурационного веб-сервиса для обеспечения миграции от ASP.NET Framework к ASP.Net Core.

В базовом классе Terrasoft.Web.Common.BaseService уже определены свойства UserConnection и AppConnection, благодаря которым отпадает необходимость получать эти объекты из текущего контекста с помощью HttpContext.Current библиотеки System.Web фреймворка .NET Framework. Кроме этого в BaseService определено свойство HttpContextAccessor, которое предоставляет доступ к контексту.

Использование HttpContextAccessor обеспечивает унифицированный доступ к HttpContext в обоих фреймворках - и в ASP.NET Framework и ASP.Net Core.

Пример использования свойств родительского класса Terrasoft.Web.Common.BaseService.

namespace Terrasoft.Configuration.UsrCustomNamespace
{
    using Terrasoft.Web.Common;

    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class UsrCustomConfigurationService: BaseService
    {
        // Метод сервиса.
        [OperationContract]
        [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
        ResponseFormat = WebMessageFormat.Json)]
        public void SomeMethod() {
            ...
            var currentUser = UserConnection.CurrentUser; // UserConnection - свойство BaseService.
            var sdkHelpUrl = AppConnection.SdkHelpUrl; // AppConnection - свойство BaseService.
            var httpContext = HttpContextAccessor.GetInstance(); // HttpContextAccessor - свойство BaseService.
            ...
        }
    }
}

 

Для обеспечения миграции от ASP.NET Framework к ASP.Net Core сервисов, реализованых без наследования базового класса Terrasoft.Web.Common.BaseService, предоставлена возможность получать контекст двумя способами:

  • Не рекомендуемый способ: получать контекст через статическое свойство HttpContext.Current. Для обеспечения легкой миграции от фреймворка ASP.NET Framework к ASP.Net Core нужно добавить в исходный код сервиса с помощью директивы using пространство имен Terrasoft.Web.Http.Abstractions, в котором реализован унифицированный доступ к HttpContext, используя статическое свойство HttpContext.Current. При адаптации старого кода к новому фреймворку достаточно заменить namespace System.Web на Terrasoft.Web.Http.Abstractions.
  • Рекомендуемый способ: получать контекст через IHttpContextAccessor зарегистрированный в DI (ClassFactory) . Этот способ позволяет покрывать код тестами. Подробнее об использовании Фабрики классов можно узнать из статьи "Фабрика объектов замещающих классов".

Использовать в конфигурации конкретную реализацию доступа к контексту из ASP.NET (библиотека System.Web) или ASP.NET Core (библиотека Microsoft.AspNetCore.Http) запрещено.

Пример адаптации сервиса к ASP.Net Core

namespace Terrasoft.Configuration.UsrCustomNamespace
{
    using Terrasoft.Web.Http.Abstractions;  // Использовать вместо System.Web

    [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class UsrCustomConfigurationService
    {
        // Метод сервиса.
        [OperationContract]
        [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
        ResponseFormat = WebMessageFormat.Json)]
        public void SomeMethod() {
            ...
            var httpContext = HttpContext.Current;
            ...
        }
    }
}

 

Смотрите также:

© Terrasoft 2002-2020.

Был ли данный материал полезен?

Как можно улучшить эту статью?