Вызов веб-сервисов и веб-методов архитектуры.net
Данная заметка описывает то, как просто можно вызвать .Net веб-сервис (написанный, например, в asp.net-проекте) используя библиотеку jQuery. Я немного сомневался в том, где поместить эту заметку, тут или в блоге .Net и, наконец, решил, что тема заметки больше касается jQuery и ее особенностей, чем темы программирования .Net.
Работоспособность проверена на .net framework 3.5, в версиях .net ниже 3.0 данный пример может не работать.
Первым делом необходимо знать особенности веб-сервисов написанных на .net. За сведениями лучше обратиться к первоисточнику и в нашем случае это будет ScottGu, архитектор .Net. В его блоге есть замечательная статья «JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks».
В этой статье описаны требования и условия для вызова методов помеченных атрибутом [WebMethod], которые выполняет так же и архитектура AJAX.NET.
Условий, по сути, всего два:
— использовать только POST-запросы;
— в запросе должен быть следующий заголовок
Content-Type: application/json; charset=utf-8.
Веб-сервис
Для начала напишем простенький веб-сервис, который получает текст логина и возвращает булево значение того, есть ли в БД этот логин или его нет.
[WebMethod]
public bool CheckLogin( string login)
bool result = false ;
if (login.Length > 0)
ORMDataContext db = ORMDataContext.GetDB();
var user = BisORM.User.GetUser(login);
if (user != null )
result = true ;
>
>
return result;
>
* This source code was highlighted with Source Code Highlighter .
Как можно заметить, этот метод весьма простой, он использует Linq to SQL и сгенерированную ORM (ORMDataContext) для определения существует ли переданный логин в БД.
jQuery
Для работы с ajax в jQuery есть несколько функций, одна из которых как раз и подходит под все наши требования. Это функция $.ajax. Я не буду останавливаться на описании данной функции и всех ее параметров, эти данные можно легко почерпнуть на официальном сайте проекта в разделе документации. Определим следующую вспомогательную функцию javascript:
function ExecuteService( params , url, callbackSuccess, callbackError)
$.ajax( type: «POST» ,
url: url,
contentType: «application/json; charset=utf-8» ,
dataType: «json» ,
data: params ,
success: callbackSuccess,
error: callbackError
>);
> * This source code was highlighted with Source Code Highlighter .
Функция ExecuteService принимает следующие параметры:
— params – строка JSON с параметрами, которые необходимо передать для вызова веб-сервиса;
— url – полный адрес веб-сервиса с указанием веб-метода;
— callbackSuccess – функция, которая будет вызвана когда веб-метод выполнится успешно;
— callbackError — функция, которая будет вызвана, когда при выполнении веб-метода возникнет ошибка.
Следует заметить, что в callbackSuccess будет передан один параметр с результатом веб-метода в формате JSON-строки, а в callbackError будет передано три параметра:
— экземпляр запроса;
— текстовое сообщение;
— описание ошибки.
Как можно видеть, ExecuteService выполняет все требования к запросу, которые выдвигает .Net и которые были описаны выше: формируется post-запрос, заголовоку «contentType» присваивается нужное значение.
Использование
Теперь, наконец-то, напишем код, которые взаимодействует с нашим веб-сервисом посредством jQuery:
function CheckLogin(input, callbackResult, callbackError)
<
var login = $(input)[0].value;
if (login.length > 0)
<
var params = «» ;
ExecuteService(
params ,
«LoginService.asmx/CheckLogin» ,
callbackResult,
callbackError
);
>
>
* This source code was highlighted with Source Code Highlighter .
JS-функция CheckLogin принимает через параметры id textbox’a (в виде «#id»), в который введен логин, а так же две функции которые определяют, что делать при получении результат и при возникновении ошибки. Обратите внимание, на код
— это формирование JSON-строки для передачи параметра в наш веб-метод, который, я напомню, определен как:
public bool CheckLogin(string login)
Стоит заметить, что в случае, когда ваш веб-метод не принимает никаких параметров необходимо написать var params = «< >«;, но не var params = «»;. Так же следует знать, что хоть в Firefox допустимо передать , но в IE это не сработает, так что необходимо использовать одинарные кавычки
Определим так же функции для передачи callbackResult, callbackError:
function onCheckLogin(msg)
if (msg.d)
$( «#loginState» ).text( «ОК» ).css( «color» , «green» );
>
else
$( «#loginState» ).text( «Неверный логин» ).css( «color» , «red» );
>
>
function onError(XMLHttpRequest, textStatus, errorThrown)
$( «#loginMessage» ).text( «Ошибка при выполнении AJAX-запроса. Попробуйте перезагрузить страницу.» );
> * This source code was highlighted with Source Code Highlighter .
Обратите внимание на msg.d. Именно здесь будет лежать значение, которое вернется после исполнения веб-метода. Так же надо пояснить, что #loginState – это id элемента, для вывода результата проверки логина, а #loginMessage – id элемента, для вывода сообщения об ошибке.
Наконец, подходим к финальному штриху, подключим к textbox обработчик события потери фокуса:
Как видно из кода, используя функции jQuery, регистрируется обработчик события OnBlur для элемента управления, который объявлен как
< input id =«txtLogin» type =«text» />* This source code was highlighted with Source Code Highlighter .
Теперь, когда пользователь введет текст логина в поле ввода и перейдет на другой элемент, например для ввода пароля, автоматически произойдет запрос к веб-серверу для определения правильности ввода логина.
Заключение
jQuery позволяет очень легко обращаться к любым .Net веб-сервисам и веб-методам. В этой заметке были определены требования к таким запросам и реализована функция, которая прозрачно вызывает .Net методы принимая только url и параметры. Так же был рассмотрен пример использования этой функции для автоматической валидации логина введенного пользователем.
PS: кроме того, можно прочитать следующую статью по данной теме (только для подписчиков блога .Net)
ajax.net vs jquery.ajax
habrahabr.ru/blog/net/44190.html
Элемент процесса [Вызвать веб-сервис]
Элемент процесса Вызвать веб-сервис используется для вызова методов веб-сервиса и обработки ответа в рамках бизнес-процесса. Перед использованием элемента необходимо настроить интеграцию веб-сервисов в разделе Веб-сервисы дизайнера системы.
Функциональность элемента Вызвать веб-сервис зависит от веб-сервиса, с которым была настроена интеграция. Например, элемент можно использовать для получения последних данных о курсе валют (Рис. 1).
Рис. 1 — Вызов веб-сервиса в рамках бизнес-процесса и отображение результатов

Важно. Детальные инструкции по настройке интеграции с веб-сервисом “ http://fixer.io/ ” приведены в отдельной статье. Подробнее >>>
При активации входящего потока элемент Вызвать веб-сервис :
- Выполняет вызов необходимого метода веб-сервиса с помощью специальных параметров вызова.
- Ожидает отклика веб-сервиса согласно настроек интеграции.
- Записывает результаты в свои исходящие параметры.
- Активирует исходящие потоки.
Настроить параметры элемента Вызвать веб-сервис
Для интеграции веб-сервиса в бизнес-процесс добавьте элемент Вызвать веб-сервис в рабочую область дизайнера процессов, выберите веб-сервис и метод, который необходимо вызвать, и укажите значения параметров на панели настройки элемента (Рис. 2):
Рис. 2 — Панель настройки элемента Вызвать веб-сервис

- Какой сервис вызывать? Например, если предварительно была настроена интеграция с сервисом обмена валют “Fixer”, то ее можно будет выбрать в этом поле. Нажмите кнопку
, чтобы открыть страницу интеграции нового сервиса. На странице можно настроить интеграцию с новым веб-сервисом. Если сервис уже выбран, нажмите кнопку
, чтобы открыть страницу настройки интеграции с выбранным веб-сервисом. - Какой метод вызывать? — выберите метод веб-сервиса, который будет вызван при выполнении запроса сервиса. Возможные значения этого параметра зависят от специфики интеграции сервиса.
- Максимальное время выполнения, секунд — ограничение общего времени вызова веб-сервиса данным элементом. Ограничение включает повторы. Когда время выполнения превышено и приходят отклики с кодом ошибки (например 400), исходящие параметры будут заполнены последним полученным откликом веб-сервиса.
- Параметры вызова — если выбранный метод имеет параметры вызова, то они будут доступны в этой группе после выбора метода. В бизнес-процессе эти параметры считаются входящими параметрами соответствующего элемента Вызвать веб-сервис .
Например, согласно параметрам настройки интеграции с сервисом http://fixer.io/, доступны следующие параметры вызова:- Базовая валюта — базовая валюта для получения обменных курсов.
- API ключ — API-ключ веб-сервиса. Для его получения необходимо зарегистрироваться на https://fixer.io/.
- Конечная точка — конечная точка веб-сервиса, которая будет добавлена сразу после URI и перед параметрами запроса. В примере для http://fixer.io/ может быть либо “latest” — для запроса последних доступных курсов, либо конкретная дата в текстовом формате — для запроса обменных курсов на эту дату, например “2018-01-03”. Все параметры, кроме параметров типа “Параметр запроса”, обязательны для заполнения. Если поле останется незаполненным, параметры запроса все еще будут частью запроса, но не будут иметь значений. Например: “?параметр-со-значением-1=значение-1&параметр-без-значения-1&параметр-без-значения-2”.
На заметку. Можно ввести значения параметра запроса вручную или привязать их к другим параметрам процесса. Работа со значениями параметров рассмотрена в отдельной статье. Подробнее >>>
Передать параметры вызова типа “коллекция“
Если параметр вызова является коллекцией (установлен признак Является массивом в свойствах параметра на странице веб-сервиса), то список вложенных параметров отображается под названием коллекции на панели настройки элемента (Рис. 3). Так, сервис “пакетных запросов” Creatio позволяет добавлять несколько записей (например, контактов) в систему. Для этого сервису потребуются данные для заполнения полей каждой добавляемой записи (например, ФИО и тип контакта). Нужные значения можно передать в качестве параметра вызова типа “коллекция“, где “ФИО” и “Тип” будут вложенными параметрами, а каждый элемент коллекции будет содержать данные для отдельной записи контакта
Рис. 3 — Пример параметров вызова, один из которых является коллекцией

Значения параметров коллекции элемента Вызвать веб-сервис могут быть сопоставлены с вложенными параметрами другой коллекции элемента Читать данные или Вызвать веб-сервис (Рис. 4, Рис. 5).
Рис. 4 — Сопоставление значений параметров коллекции

Рис. 5 — Выбор вложенного параметра другой коллекции для сопоставления

Параметры коллекции элемента процесса могут быть сопоставлены с параметром процесса типа “Коллекция значений” (Рис. 6).
Рис. 6 — Добавление параметра процесса

Проверить ошибки вызова веб-сервисов
После активации элемент Вызвать веб-сервис выполняет вызов веб-сервиса, получает и обрабатывает отклик и заполняет исходящие параметры. У каждого элемента Вызвать веб-сервис есть два исходящих параметра для обработки ошибок — Success и Http status code .
- Если вызов завершился успешно (код отклика <400), то параметру Success будет установлено значение “true”.
- Если вызов завершился с ошибкой (код отклика 400 и выше), то параметру Success будет установлено значение “false” и параметр Http status code будет заполнен кодом ошибки. Используйте эти параметры для обработки ошибок вызова веб-сервисов непосредственно в процессе. Например, вы можете автоматически вызвать веб-сервис позже, использовать другие значения параметров вызова или прекратить процесс.
Обработать отклик веб-сервиса
Каждый параметр отклика, который вы настроили для метода веб-сервиса, будет добавлен в качестве дополнительного исходящего параметра в элемент Вызвать веб-сервис , где этот метод выбран в свойстве Какой метод вызывать? .
Для использования этих данных в вашем бизнес-процессе свяжите процесс и параметры элементов процесса с исходящими параметрами элемента Вызвать веб-сервис .
Пример. При выборе веб-сервиса “Fixer” у элемента Вызвать веб-сервис в дополнение к параметрам обработки ошибок появятся следующие исходящие параметры: “Базовая валюта” (параметр “строка”), “Дата” (параметр “дата”) и отдельный дробный параметр на каждый обменный курс (“RatesAUD”, “RatesEUR” и т.д.). Полученные данные можно отобразить при помощи преднастроенной страницы, связав ее поля с соответствующими исходящими параметрами элемента Вызвать веб-сервис (Рис. 7, Рис. 8). В результате поля страницы (Рис. 9) будут содержать данные, полученные в отклике веб-сервиса.
На заметку. Детальнее работа со значениями параметров рассмотрена в статье “Использовать параметры”.
Рис. 7 — Настройка параметров преднастроенной страницы

Рис. 8 — Связывание параметров преднастроенной страницы и элемента Вызвать веб-сервис

Рис. 9 — Обменные курсы на преднастроенной странице

Настроить параметры ответа типа “коллекция”
Параметры ответа веб-сервиса могут быть коллекциями. Параметры ответа настраиваются в расширенном режиме на вкладке Параметры панели настройки свойств элемента Вызвать веб-сервис (Рис. 10). Вложенные параметры коллекции отображаются под названием коллекции.
Рис. 10 — Коллекция в параметрах вызова

Значения параметров коллекции элемента Вызвать веб-сервис могут быть сопоставлены с вложенными параметрами другой коллекции элемента Читать данные или Вызвать веб-сервис (Рис. 4, Рис. 5).
Что такое веб-сервисы и как они используются
Чтобы запустить веб-сервис, который понравится пользователям, надо знать, как он работает. Это поможет стартапу правильно ставить задачу разработчикам, контролировать их работу, да и вообще понимать, что нужно именно вашему стартапу. Разбираемся, что такое веб-сервис и как стартаперу его запустить.
Время чтения: 4 минут

Веб-сервис или веб-сайт?
Начнем с понятий. Веб-сервис (web-service) — это программа в интернете, которая оказывает услугу или отвечает на определенное требование пользователя. Например, электронная почта отправляет письма, поисковик Google ищет информацию в интернете, а сайт с погодой показывает прогноз. Веб-сервис , который еще называют веб-службой — это веб-приложение.
Веб-сайт — это тоже веб-приложение, но с другой функциональностью. Это страница или страницы в интернете, которые содержат информацию о чем-то. Бизнес использует оба вида веб-приложений. Например, если у вас тур-агентство, то вам подойдет и веб-сайт, и веб-сервис . Вот как между ними выбрать:
- Если собираетесь размещать информацию о компании, контакты представителей, часы работы, в каких направлениях работаете, какие есть акции, то подойдет веб-сайт;
- Если пользователь может не только получить информацию, но и подобрать тур на определенные даты, выбрать отель, создать учетную запись , то выбирайте веб-сервис.
Функциональность веб-приложения зависит от его архитектуры. Как она устроена и почему важна для работы веб-сервиса?
Зри в корень: архитектура и протоколы
Архитектура — это набор компонентов веб-приложения и способ взаимодействия между ними. К компонентам веб-приложения относятся:
- пользовательский интерфейс;
- программный интерфейс (API);
- базы данных;
- внешние сервисы — помогают веб-сервису реализовывать бизнес-логику. Например, брокер сообщений или эквайринг;
- кэш.
Причем набор компонентов может быть разный. Цель архитектуры в том, чтобы цифровой продукт работал по определенной бизнес-логике , которая настроена под требования клиентов.
READ MORE На одном языке с разработчиками: как стартаперу спроектировать приложение от архитектуры до UX
Архитектура и ее компоненты
Фактически архитектура делится на 2 части:
- Клиентская (frontend) — то, что видит пользователь на экране;
- Серверная (backend) — то, что находится за экраном, т.е. запрограммированная реакция на действия пользователя.
Чтобы представить себе архитектуру веб-сервиса, подумайте об архитектуре здания. Вот вы видите фасад дома: количество этажей, форму окон, крышу, ступеньки и дверь. Это все клиентская часть, фронтенд. А потом вы заходите внутрь и видите, какие там комнаты, как они расположены, из какой комнаты можно пройти в другую, а из какой нельзя. Где есть лестница и куда она ведет. Параллельно замечаете, что вот здесь зря не сделали дверь, ведь так можно быстрее добраться до другой части дома, а здесь можно добавить лестницу, чтобы попасть на мансарду, минуя два этажа. Это уже серверная часть, бэкенд. А если здание плохо спроектировано, то оно вообще может обрушиться.

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

Протоколы и технологии
Протокол — это набор правил и способов , по которым происходит взаимодействие между компонентами веб-сервиса , а также между разными веб-сервисами. Обычно веб-сервисы построены на стандартах. Стандарты — это те нормы и правила, которые обеспечивают согласованное взаимодействие веб-приложений. К стандартам и наборам открытых протоколов для обмена информацией относятся :
- HTTP, HTTPS, FTP, TCP/IP— сетевые протоколы или протоколы передачи данных;
- SSL, TLS— протокол шифрования, нужен для безопасной передачи или хранения данных;
- API — набор или описание способов как одна программа может обращаться к другой;
- XML и JSON — структурируют информацию для обмена;
- WSDL ( Web Services Description Language) — это язык описания веб-сервиса . С помощью него клиентский сервис понимает, как можно пользоваться веб-сервисом;
- SOAP — это простой протокол доступа к объектам. Он работает через HTTP и позволяет взаимодействовать приложениям на его основе.
Как работает веб-сервис на примере банка
На самом деле, если вы не веб-разработчик и не собираетесь самостоятельно писать код для веб-приложения, то знать все протоколы и компоненты веб-приложения необязательно. Главное понимать, как работает веб-сервис. Тогда получится правильно сформулировать задачу разработчиками и проверить как она выполнена.
Разберем как работает веб-сервис на примере заявки клиента на выпуск кредитной карты в банке. Банку надо разгрузить операторов, которые формируют и обрабатывают заявки. Для этого сделали веб-приложение :
1. Пользователь заходит на сайт банка и переходит на страницу с формой заявки. Заполняет ее и нажимает «Отправить». Таким образом производится запрос на бэкенд .
2. Бэкенд обрабатывает заявку и определяет, правильно ли она заполнена. Если нет, то веб-сервис возвращает ответ клиенту, о том, что произошла ошибка. Если правильно, то он отправляет заявку в сервис управления заявками и ждет ответа.
3. Сервис управления заявками принимает или не принимает ее. Потом отправляет сообщение обратно в веб-сервис . Если заявка отклонена, то веб-сервис сообщает клиенту, что произошла ошибка. Если заявка принята, то веб-сервис передает данные брокеру сообщений.
4. В брокере сообщений заявка встает в очередь на распределение между менеджерами. После этого клиент получает сообщение, что заявка принята и с ним свяжется менеджер.

Клиент не видит пункты 2-4, так как они происходят на стороне бэкенда. Ему виден лишь результат — заявка принята или произошла ошибка.
Хотите еще пример веб-сервиса? По ссылке ниже мы рассказываем, как за 3 месяца разработали маркетплейс для видеоконтента. В кейсе подробно описана реализация веб-сервиса, какие нюансы обсуждали с заказчиком, с какими вопросами и сложностями столкнулись и как их решили.
READ MORE Идеальный маркетплейс для видеоконтента за 3 месяца с индексацией приватных страниц (что? да!)
Зачем нужны веб-сервисы?
Есть сферы бизнеса, где веб-приложения принесут пользу компаниям: фитнес-индустрия, ресторанная сфера и доставка еды, туризм, медицина. Ценность веб-сервисов для бизнеса можно разделить на две составляющие:
- Внутренняя. Помогает автоматизировать и упростить процесс бизнеса. Например, сделать отчет, наладить обмен информацией между отделами или следить за наличием товара;
- Внешняя. Это взаимодействие с пользователями. Например, онлайн-запись на услуги, заказ товаров или услуг.
READ MORE Как мы за полгода разработали 4 приложения и одну админку для ночного клуба
Функциональность веб-приложения и его применение ограничивается только вашей фантазией. Но от того, как реализован веб-сервис и что он «умеет», во многом зависит успех стартапа.
У вас есть идеи для веб-сервиса? Напишите нам и мы поможем их реализовать. Команда Purrweb разрабатывает веб-приложения с нуля: помогаем анализировать рынок, прорабатываем бизнес-логику и UI/UX дизайн, создаем цифровой продукт и поддерживаем работу веб-сервиса.
Насколько публикация полезна?
Оцени эту статью!
85 оценок, среднее 4.6 из 5.
Оценок пока нет. Поставьте оценку первым.
Так как вы нашли эту публикацию полезной.
Подписывайтесь на нас в соцсетях!
Вызвать HTTP веб-сервис
Изменение параметров действия осуществляется через диалог. Открытие диалога возможно двумя способами:
- В меню данного действия выбрать Изменить;
- Дважды кликнуть на данное действие.
Описание параметров данного действия:
Диалог изменения действия Вызвать HTTP веб-сервис содержит:
- GET;
- POST;
- PUT;
- DELETE.
Примеры использования действия
Получение имени сайта :
Для получения имени сайта с помощью вызова HTTP веб-сервиса потребуется два действия.
1. Вызвать HTTP веб-сервис:

Пример полученного значения в переменной dictionaryReponseBody:
«odata.metadata«:»https://doctrix.sharepoint.com/sites/systemz-hd/_api/$metadata#SP.ApiData.Webs/@Element&$select=Title»,
«odata.type«:»SP.Web»,
«odata.id«:»https://doctrix.sharepoint.com/sites/systemz-hd/_api/Web»,
«odata.editLink«:»Web»,
«Title«:»Support & Maintenance Helpdesk»
>
2. Получить элемент словаря:

Пример полученного значения в переменной textWebTitle: «Support & Maintenance Helpdesk»
Получение логина пользователя по идентификатору
Для получения логина пользователя по идентификатору с помощью вызова HTTP веб-сервиса потребуется два действия:
1. Вызвать HTTP веб-запрос:

Пример полученного значения в переменной dictionaryReponseBody:
«odata.metadata«:»https://doctrix.sharepoint.com/sites/systemz-hd/_api/$metadata#SP.ApiData.Users1/@Element»,
«odata.type«:»SP.User»,
«odata.id«:»https://doctrix.sharepoint.com/sites/systemz-hd/_api/Web/GetUserById(10)»,
«odata.editLink«:»Web/GetUserById(10)»,
«Id«:10,
«IsHiddenInUI«:false,
«LoginName«:»i:0#.f|membership|support@systemz.io»,
«Title«:»SYSTEMZ Support»,
«PrincipalType«:1,
«Email»:»support@systemz.io»,
«IsEmailAuthenticationGuestUser«:false,
«IsShareByEmailGuestUser«:false,
«IsSiteAdmin«:false,
«UserId«: «NameId«:»100320003425dbc1»,
«NameIdIssuer«:»urn:federation:microsoftonline»
>
>
2. Получить элемент словаря:

Пример полученного значения в переменной textLoginName: «i:0#.f|membership|support@systemz.io`»
Создание элемента списка:
Для создания элемента списка с помощью вызова HTTP веб-сервиса потребуется четыре действия:
1. Сформировать словарь заголовков запроса

2. Сформировать промежуточный словарь типа запроса:

Значением ключа type является значение «SP.Data. ListItem», где является внутренним именем целевого списка.
3. Сформировать словарь тела запроса:

Для ключа __metadata используется значение типа Словарь с подстановкой переменной из пункта 2. Ключи Title и IssueStatus являются внутренними именами полей, создаваемого элемента.
4. Вызвать HTTP веб-запрос: