Всем доброго времени суток, хотелось бы немного прояснить вопрос.

Пробую вызывать веб-сервис из бизнес-процесса.

Через Postman, прохожу аунтентификацию через .../ServiceModel/AuthService.svc/Login, далее вызываю .../0/odata - получаю перечень таблиц и статус 200, то же самое через адресную строку браузера.



Но если вызывать этот веб-сервис через бизнес-процесс, кроме HTTP Error 401.1 - Unauthorized или Invalid user name or password не получил.

В бизнес-процессе пробовал вызывать сначала веб-сервис .../ServiceModel/AuthService.svc получать через параметры процесса BPMCSRF  - без результата.

Изображение удалено.

Через веб-сервис .../0/ServiceModel/EntityDataService.svc/  получаю статус 200 и ответ в виде XML.

Изображение удалено.

Суть вопроса почему .../0/odata возвращает статус 200 и данные через постман и браузер, а через бизнес-процесс возращает ошибку.

Приложение on-site. 

 

Нравится

2 комментария

Сергей,

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

Олег Нефедьев, спасибо.

Этот момент описан в документации, с аутентификацией с логином и паролем и в константах (пароль в зашифрованой константе) и в явном виде не работало, пробовал разные комбинации.

Показать все комментарии

Добрый день.

Мной разработан конфигурационный веб-сервис

 

[ServiceContract]
   [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
   public class ConnectorService : BaseService
   {
      [OperationContract]
      [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json,
            BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
      public bool CreateContact(string firstName, string middleName, string lastName)
      {
...
return true;
}
}



На страницах академии есть материалы о том как вызвать конфигурационный веб-сервис с с помощью Postman или ServiceHelper, но нет информации как его вызвать со страницы другого веб-сайта, например с использованием API XMLHttpRequest.  Функциональность и работоспособность веб-сервиса проверена с помошью Postman. Все работает.

Однако указанный метод  веб-сервиса должен вызываться со страницы стороннего сайта (доступ к которой имеется). 

Подскажите как вызвать конфигурационной веб-сервис Creatio со страницы другого веб-сайта. Желательно с примерами. 

Нравится

1 комментарий

Андрей, пример использования XMLHttpRequest для POST есть тут, но это наоборот, вызов со страниц 7.Х внешнего сервиса. В обратном направлении должно быть аналогично, но нужно учитывать необходимость авторизации при помощи AuthService и получение всех нужных кук, либо делать его доступным анонимно. Также по поводу возможных ограничений при работе с другого домена и путей их обхода см. темы: 1, 2, 3.

 

Другой вариант — работать с веб-сервисом не из браузера, а из серверного кода другого сайта. Конкретная реализация зависит от языка, на котором он написан: PHP, C#, Java, JS и др.

Показать все комментарии

Доброго времени суток, в общем проблема такая. Необходимо отправить на веб сервер данные в формате xml, на сколько я понял из документации элемент "Вызвать веб сервер" отправляет Json запросы  а не XML. Возможно ли отправить запрос в веб сервер в формате XML из элемента "Задание сценарии" или лучше каким нибудь другим ходом пойти? Буду признателен за советы , а желательно с  примером)  

Нравится

1 комментарий
Лучший ответ

Добрый день!

Да, лучше отправьте с помощью задания-сценария с использованием HttpWebRequest.

Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

Добрый день!

Да, лучше отправьте с помощью задания-сценария с использованием HttpWebRequest.

Пример:

var request = (HttpWebRequest)WebRequest.Create(serviceAddress);
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Timeout = timeout * 1000;
using (var dataStream = request.GetRequestStream())
{
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();
}
var resp = (HttpWebResponse)request.GetResponse();

Где postData - строка XML

Показать все комментарии

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

Работать с Web-сервисами из сторонних приложений можно двумя способами, все зависит от цели использования и конкретного языка программирования:
1. Работа через COM-объекты Terrasoft
2. Работа с Web-сервисами напрямую

Работа через COM-объекты

Первый вариант наименее трудоемкий и более удобный, но требует, чтобы на клиентской машине были зарегистрированы библиотеки Terrasoft (для использования COM-объектов). При этом вся работа с Web-сервисами будет выполняться COM-объектами Terrasoft, предоставляя доступ к данным и объектам через объектную модель платформы Terrasoft: IDataset, ISelectQuery и т.д.

Для подключения программно нужно выполнить следующий код (пример на Jscript, но это можно реализовать на любом языке, который работает с COM-объектами):

 

         // Создание экземпляров COM-объектов Connector и Configuration
         WSConnector = new ActiveXObject('TSDskObjectLibrary.DskConnector');      // Для версий 3.4.0+ объект создается ActiveXObject('TSObjectLibrary.Connector')
         var WSConfiguration = new ActiveXObject('TSObjectLibrary.Configuration');  
         WSConfiguration.DBExecutorTypeCode = 'WebServices';

         // Кэшироование созданного соединения
         Connector.Attributes('WSConnector') = WSConnector;

         // Установка строки соедения и название конфигурации настроенной на сервере
         WSConfiguration.SetConnectionString(
                   '"URL=http://192.168.227.128/TSWebServicesServerLibrary.dll/soap/IServer"' +
                   ',"ConfigurationName=Dev332"');

         // Открытие конфигурации
         var IsConnected = WSConnector.OpenConfiguration(
                   WSConfiguration,
                   1,           // Тип аутентификации: 0 - Windows Authentication, 1 - Server
                   'ddd',       // Имя пользователя
                   '');         // Пароль

 

После успешного подключения можем обращаться к любым объектам, получать данные и т.д. Например получение данных о контрагентах:

 

         // Получение сервиса ds_Account из коннектора к веб-сервисам
         var AccountDataset = WSConnector.Services.GetSingleItemByUSI('ds_Account');
         
         // Подготовка датасета: закрытие и очистка фильтров
         AccountDataset.Close();
         EnableDatasetFilters(AccountDataset, false);
         
         // Наложение фильтра по ID текущей записи
         ApplyDatasetFilter(AccountDataset, 'ID', dlData.Dataset('ID'), true);
         
         // Открытие датасета
         AccountDataset.Open();
         
         // Считывание данных
         if (AccountDataset.IsEOF) {
                   var Value = '(нет данных)';
                   edtWSName.Value = Value;
                   edtWSOfficialName.Value = Value;
                   edtWSCode.Value = Value;
         } else {
                   edtWSName.Value = AccountDataset.ValAsStr('Name');
                   edtWSOfficialName.Value = AccountDataset.ValAsStr('OfficialAccountName');
                   edtWSCode.Value = AccountDataset.ValAsStr('Code');  
         }
         
         // Закрытие датасета
         AccountDataset.Close();

 

Во вложении полный пример работы с Web-сервисами на Jscript, используя COM-объекты.

Работа с Web-сервисами напрямую

Этот тип работы сложнее, т.к. все запросы к Web-сервисам нужно посылать самостоятельно, а также самому обрабатывать ответ от сервера. При этом не используются COM-объекты Terrasoft, соответственно не нужно устанавливать и регистрировать библиотеки Terrasoft на каждом клиентском компьютере, откуда будут запрашиваться веб-сервисы.

Запросы Web-сервисам можно отправлять исходя из их интерфейса (WSDL) – описания всех методов с параметрами.

Для упрощенной разработки программ для работы с Web-сервисами в некоторых IDE, например Visual Studio, предусмотрен импорт WSDL (Add WebService Reference), при этом сама IDE генерирует оберточные классы для работы с Web-сервисами. Вызывая методы такого класса вы будете упрощенно вызывать соответствующие методы веб-сервиса.

Упрощение заключается в том, что для вызова метода Web-сервиса нужно отправить полный XML запрос, а с помощью оберточных классов – просто вызвать соответствующий метод с параметрами.

Пример на C# :

// Создание клиента Web-сервиса
        ws.IServer sc = new ws.ServerClient(); // ws.IServer – оберточный класс для работы с Web-сервисами Terrasoft
        ws.OpenConfigurationRequest rqOpenConfiguration = new ws.OpenConfigurationRequest(); // Запросы для открытия конфигурации
        ws.OpenConfigurationResponse rsOpenConfiguration = new ws.OpenConfigurationResponse();

// Открытие конфигурации
rqOpenConfiguration.ACompressionLevel = 0; //Without compression (zip)            
         rqOpenConfiguration.AConfigurationName = Configuration;
         rqOpenConfiguration.ADBExecutorTypeCode = "MSSQL";
         rqOpenConfiguration.AUserName = UserName;
         rqOpenConfiguration.AUserPassword = Password;
         rsOpenConfiguration = sc.OpenConfiguration(rqOpenConfiguration);

 

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

Во вложении полный пример работы с Web-сервисами на C#.

Отдельное спасибо Александру Кравчуку за предоставленные примеры.

Приятной разработки:)

Нравится

Поделиться

5 комментариев

Александр, здравствуйте.

Подскажите:
1) Доступна ли настройка веб сервиса на версии Terrasoft CRM 3.3.2.X ?
2) Приходилось ли применять какой то из способов на практике?

Здравствуйте, Анна!

1. Возможность настройки веб-сервиса на версии Terrasoft CRM 3.3.2 доступна.
2. Приведенные примеры взяты с реальных практических решений.

Простите, а нельзя ли прислать на почту neveryes@bk.ru полный пример работы с Web-сервисами на C#.

Потому что вложения как такового нет((

и на почту qart2003@gmail.com 

заранее спасибо!

Вложения можно скачать тут и тут. Обратите внимание, это всё о Terrasoft 3.Х.

Показать все комментарии