Добрый день, коллеги!
Есть задача по интеграции сайта со сторонним приложением. На стороне реализовано api с рядом запросов. Но реализация сторонних запросов такова, что мне приходится в бизнес процессе вызывать запросы в цикле. Может кто-то подскажет вариант вызова вэб-сервиса в тексте задания-сценария БП?
Нравится
1 комментарий
23 апреля 2020 01:16
Ольга, можно либо самостоятельно реализовать логику вызова сервиса кодом (пример есть тут), либо настроить нужный веб-сервис в разделе обычным образом, а затем взять код запуска в схеме WebServiceUserTask и скопировать его в функцию в разрабатываемом БП вместе со всеми вспомогательными функциями и параметрами, которую затем запускайте в своём скрипте в цикле. Вот основная логика оттуда:
if (ServiceUrl == Guid.Empty || string.IsNullOrEmpty(ServiceMethod)) {
return true;
}
string serviceUrl = (new Select(UserConnection)
.Column("URL")
.From("WebServiceURL")
.Where("Id").IsEqual(new QueryParameter("Id", ServiceUrl)) as Select)
.ExecuteScalar<string>();
HttpWebRequest webRequest = CreateWebRequest(serviceUrl, ServiceMethod);
string Request = @"<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"" xmlns:web=""http://www.webserviceX.NET/"">
<soap:Header/>
<soap:Body>";
Request += RequestBodyInternal;
Request += @"
</soap:Body>
</soap:Envelope>";
webRequest.ContentLength = Request.Length;
using (Stream stream = webRequest.GetRequestStream()) {
using (StreamWriter streamWriter = new StreamWriter(stream)) {
streamWriter.Write(Request);
streamWriter.Close();
}
}
using (WebResponse response = webRequest.GetResponse()) {
using (StreamReader rd = new StreamReader(response.GetResponseStream())) {
Responce = rd.ReadToEnd();
}
}
PrepareResponceResult();
if (!IsLoggingRequestAndResponce) {
Request = string.Empty;
Responce = string.Empty;
}
return true;
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать