Добрый день! Перестала работаь синхронизация 1с - Creatio, которая была настроена через веб сервис. Интеграция работала в 1 сторону, данные с Creatio передавались в 1с. Пробовал получать доступ к сервису через Postman, все работает корректно, как на скринах 1 и 2, то есть аутентификация и последующий запрос дают результат

Когда те же действия происходят со стороны 1с, после попытки синхронизации данных появляется ошибка 401 - Unauthorized: Access is denied due to invalid credentials

 

При этом во время аутентификации ошибок нет, приходит статус 200 ок, пишет что подключение установлено, возвращает корректные значения типа (скрин 3):

 

{

    "Code": 0,

    "Message": "",

    "Exception": null,

    "PasswordChangeUrl": null,

    "RedirectUrl": null

}

 

но при попытке загрузить данные в 1с падет ошибка, "Непередбачений символ при читанні json" (скрин 4)

Если смотреть детальнее в чем причина, предоставлен xml

http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> http://www.w3.org/1999/xhtml"> 401 - Unauthorized: Access is denied due to invalid credentials. Server Error

401 - Unauthorized: Access is denied due to invalid credentials.

You do not have permission to view this directory or page using the credentials that you supplied.

Пользователи под которыми осуществляется вход, внесены в настройку "Не учитывать проверку доступа по IP-адресу"

 

Кто то может подсказать почему так происходит и как это исправить? 

 

Прикрепленные файлы

Нравится

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

Добрый день, Илья!

 

Попробуйте выдать пользователю, под которым выполняется этот запрос, роль системного администратора.

И дополнительно проверьте корректность заполнения Headers по примеру из статьи:

https://academy.creatio.com/docs/developer/integrations_and_api/data_se…

Kalymbet Anastasia,

сначала тоже думал что права доступа, но ту же ошибку получал и с под акаунта Supervisor. На сколько я понял, проблема оказалась в регистре заголовков колонок на стороне 1с, когда сменили регистр все заработало в штатном режиме

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

Коллеги, Добрый день, 

 

Пытаемся авторизоваться в демонстрационной версии одного веб-сервиса (Lamoda Fulfilment) из интерфейса Creatio OAUTH 2.0

 

При попытке авторизации в веб-сервисе получаем ошибку

Invalid grant_type parameter or parameter missing



При этом "собранный" запрос с передачей в GET необходимых тех же самых параметров client_id, client_secret и grant_type (даже с redirect_url) в адресной строке и как отдельный метод Creatio возвращает ответ без ошибок.



Дополнительные разрешения / scopes для пользователей веб-сервиса не требуются (это demo версия веб-сервиса, условия самые "лайтовые")

 

В связи с этим вопрос?

Кто-нибудь сталкивался с подобной проблемой и с чем может быть связано ?Изображение удалено.



Спасибо всем ответившим Изображение удалено.

Нравится

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

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

 

На данный момент такие типы авторизации OAuth 2.0 не поддерживаются. Так как в запрос не добавляется параметр grant_type.

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

Добрый день!

Создал свой WS с методом GET. Он не требует авторизации в BPM. По прямой ссылке он прекрасно выдает результат в браузере.

При попытке использования его в БП появляется сообщение: 

Ошибка HTTP 401.1 — Unauthorized

Я верно понимаю, что причина кроется именно в настройке самой BPM  для работы с WS, а не в настройке конкретного БП?

Нравится

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

В броузере вы подключились к своему сеансу, из БП нужно выполнить авторизацию

В броузере вы подключились к своему сеансу, из БП нужно выполнить авторизацию

Григорий Чех,

Верно ли понимаю, что можно в БП первым действием блок для работы с WS вставить, 

описать WS AuthService.svc/Login в справочнике WS и на первом шаге к нему обращаться так:

https://bpm/ServiceModel/AuthService.svc/Login

Тем самым решая проблему выполнения последующих блоков в рамках данного БП.

Или нужно c# кодом описывать логику дополнительно?

При работе с веб-сервисами кроме авторизации ещё нужно получать CSRF-токен. Если в итоге с авторизацией через AuthService не получится, можно переделать на basic-аутентификацию, как поступил автор темы тут. Правда, её не рекомендуют из-за недостатков.

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

Добрый день всем.

При попытке обращения к сервису через Js возникает 500 ошибка.

Пример объявления метода Сервиса:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "Upload", BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
   public string Upload(Stream fileContent, string fileName, string fileDestination) {

 

Пример вызова из Js:

var file = files[0];
    var reader = new FileReader();
    reader.readAsBinaryString(file);
    reader.addEventListener("load",
         function(item) {
	 var data = {
       	      fileContent: item.target.result,
	      fileName: file.name,
	      fileDestination: destinationPath
	 };
	 ServiceHelper.callService("KmFileUploadService",
	      "Upload",
     	      function(response) {
	           this.console.log(response);
	      },
	      data,
	      this
	 );
	 }.bind(this),
    false);

Кто знает, в чём конкретно может быть проблема? При попытках вызова сервиса (когда у метода всего 1 параметр) не возникает никаких проблем.

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

Нравится

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

Максим Шевченко пишет:

https://stackoverflow.com/questions/7999634/parsing-a-stream-and-a-para

 Хм, повторюсь. Я брал пример с исходников. Если там всё работает исправно то и в моем случае должно отрабатывать как часы. Тип роли не играет. Хоть 3 стринга там указать всё равно будет 500 ошибка.

Кисловский Михаил Андреевич,

ну, вот в данном случае как раз играет, поскольку в итоге получается WCF сервис, который имеет несколько другие нотации... тут Вам либо получать сырой поток данных и потом самому парсить, либо использовать какие-то простые типы данных для передачи в сервис... например, кодировать контент файла в BASE64 и вставлять в качестве параметра как string...

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

Добрый день,

Подскажите как добавить servicereference в bpm?
У меня есть тестовое приложения стороннего веб сервиса. Там через добавление servicereference и настройку веб конфига я обращаюсь к веб-сервису.

Возник вопрос как подключить веб-сервис в bpm.

Нравится

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

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

Здравствуйте, Антон!
Вы можете либо использовать HTTP-запросы для опрещения к сервису, либо сгенерировать прокси-класс и добавить его в виде схемы исходного кода в конфигурацию bpm'online, а затем подключать его пространство имен и пользоваться так же, как и в Вашем тестовом приложении через service reference.

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

Добрый день, коллеги!
Есть BPMOnline On-Demand с простым бизнес процессом который вставляет новый Лид.
Этот бизнес процесс вызывается поверх http с web-портала.
В общем виде, получается пара запросов:

// 1. Авторизация
HttpWebRequest.Create("https://....bpmonline.com/ServiceModel/AuthService.svc/Login?...");
...
// 2. Вызов бизнес процесса
HttpWebRequest.Create("https://....bpmonline.com/1/ServiceModel/ProcessEngineService.svc/ImportExternalLeadProcess/Execute?...");

Столкнулся с проблемой плохой производительности такого решения.
Запрос на авторизацию [1] выполняется стабильно за ~0.5c, а вот вызов БП [2] в первый раз после длительного перерыва (несколько часов) может выполняться 20-30с. При этом все последующие запросы отрабатывают все за те же стабильные ~0.5c.

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

Нравится

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

В IIS по умолчанию для пула приложений идет таймаут простоя (idleTimeout) 20 минут
Через 20 минут IIS завершит выполнение рабочего процесса (если к нему нету других обращений), и при следующем обращении IIS будет повторно создавать рабочий процесс.
Возможно, вам подойдет увеличить таймаут простоя до большего значения (настройка Пула приложений->Advanced settings->Idle timeout (minutes))

Здравствуйте.

При длительном отсутствии обращений к серверу ( 20 минут), сервер переходит в «спящий» режим (Idle). В этом режиме сбрасываются все кэши сервера, а также очищается память от выполненных запросов. При первом запросе сервер переходит в режим Normal (это занимает некоторое время).
2) При первом обращении к разделу или первое открытие карточки, после перехода сервера из режима Idle в режим Normal, приложение обращается к базе данных за необходимыми ресурсами и создает экземпляры классов для страницы, которые в результате сохраняются в кэш (это занимает приблизительно 7 сек. на сервере). При повторном обращении к уже закэшированной странице, она откроется за нормальное время (порядка 2,5-3 секунд), так как большинство необходимых данных берутся из кэша.

Таким образом проблемы с быстродействием действительно могут наблюдаться при обращении к приложению после длительного простоя, а также при первом после простоя открытии карточки/раздела, запуску БД и т.д.

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

Сообщите название Вашего сайта с приложением (можно в личку) - мы увеличим для Вас таймаут.

Добрый день!
Спасибо большое за разъяснение. Я что-то подобное предполагал.
Увеличьте пожалуйста таймаут до 24 часов для extrimassistance.bpmonline.com

Валерий, здравствуйте.
Уточните время и дату, когда можно будет провести процедуры - т.к. потребуется перезагрузка сайта, в течении которой система будет недоступна.

Дмитрий, здравствуйте.
Завтра (29.01.2013) в течении дня сайт будет свободен, можно провести необходимые работы.
Спасибо.

Валерий, хорошой.

Сообщу Вам дополнительно после внесения изменений.

Готово.

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

В этой статье я расскажу принципы работы с веб-сервисами 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.Х.

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

Часто у клиентов возникают вопросы по настройке IIS 7 для нормальной работы веб сервисов и веб формы Terrasoft 3.x.

Советы по настройке

Прочитайте внимательно соответствующие разделы руководства администратора и
руководство настройки Веб сервисов на IIS 7

Если вы все делаете по инструкции, но настроить все равно не получается, на что нужно обязательно обратить внимание:

1. Минимальный набор компонент сервера IIS 7

2. 64 битный IIS
Если у вас 64 битный IIS (Установлен на 64 битной ОС), необходимо перевести его в режим поддержки 32 битных приложений

3. .Net 4.0 для работы веб-формы
Для соответствующего пула приложений (в котором работает приложение веб-формы) необходимо выбрать .Net=4.0.x

4. Файл Web.config
В параметре TSLogin необходимо указывать пользователя, который имеет права на соответствующие разделы

5. Firewall
Множество проблем возникает из-за того, что Firewall (брандмауэр) блокирует входящие подключения к серверу. Необходимо корректно настроить правила.

Нравится

Поделиться

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

Может есть еще дополнения? У меня никак не хочет работать, и все по инструкции, и здесь замечания тоже учел ,но не хочет, хоть убей

Здравствуйте.
Я Вас наберу и мы попробуем всё настроить в режиме удалённого доступа.
С уважением, Terrasoft Support Team.

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

После добавления доменной авторизации, необходимо добавить еще один компонент сервера IIS - Windows Authentication.

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