Вопрос

Не работает бизнес-процесс с OData

Вопрос начинающего. Что нужно: послать запрос из внешнего (Internet) bpm'a во внутренний с ИНН клиента на предмет наличия такового. Делаю это через OData. Код задания-сценария:

/*static readonly XNamespace ds = "http://schemas.microsoft.com/ado/2007/08/dataservices";
static readonly XNamespace dsmd = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
static readonly XNamespace atom = "http://www.w3.org/2005/Atom";*/
bool flag = false;
string requestUri = "https://server/0//ServiceModel/EntityDataService.svc/"+
"ContactCollection?$filter= INN eq '1111111111'&$select=INN";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var request = HttpWebRequest.Create(requestUri) as HttpWebRequest;
request.Method = "GET";
request.Credentials = new NetworkCredential("login", "password");
using (var response = request.GetResponse())
{
    XDocument xmlDoc = XDocument.Load(response.GetResponseStream());
    var contacts = xmlDoc.Descendants("entry").Select(x => new
    {
        INN = x.Element("content").Element("m:properties").
               Element("d:INN").Value
    });
    if (contacts.Count() > 0)
    {
        flag = true;
    }
}
Set("flag",flag);
return true;

Исходящий параметр flag добавила, библиотеки System.Net, System.Linq, System.Xml, System.Xml.Linq подключила. Максимально захардкодила. В Visual Studio работает, а при переносе в bpm - нет. К логам доступа пока нет. Схема процесса в bpm

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

Нравится

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

Добрый день!

А внутренний bpm опубликован на внешку, т.е. доступен вне вашей сети?

И есть какая нибудь информация об ошибке (в журнале БП)? 

Особых проблем в вашем коде не вижу.

Сидоров Александр В., спасибо за ответ. Внутренний - только в локальной сети. А в Журнал БП мой процесс не попадает. А возможно ли вообще достучаться из Интернета в локалку?

Лисовец Татьяна,

Нет, достучаться не получится. Стенд должен быть опубликован: т.е. развернут может быть внутри (на мощностях в вашей локальной сети), но должен иметь внешний адрес

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

А если доступ всё же есть, но что-то работает не так, то лучше смотреть не в журнале процессов (я так понял, на «внешнем» сайте), а в логах HTTP-сервера «внутреннего» сайта, где должны быть видны все HTTP-запросы к сайту и их результаты.

В коде смущает, что используете basic-аутентификацию, а не отдельный запрос к AuthService.svc. Базовая тоже допустима для OData, но имеет недостатки.

Зверев Александр,

спасибо за совет. А в логах на сервере такая вот ошибка: 

System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified

 

Я перенаправила запрос сервера сам на себя. Он же так должен сработать? Но ситуация та же

Вообще, это обычно пишет из-за отсутствия доступа к SQL-серверу с базой данных. Но непонятно, как Вы такое получили при обращении к сайту по OData. Возможно, из полного текста ошибки будет понятнее.

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