Учебное пособие по веб-службам SOAP: что такое протокол SOAP? ПРИМЕР

Содержание:

Anonim

Что такое SOAP?

SOAP - это протокол на основе XML для доступа к веб-службам через HTTP. У него есть некоторая спецификация, которая может использоваться во всех приложениях.

SOAP известен как протокол простого доступа к объектам, но в более поздние времена был сокращен до SOAP v1.2. SOAP - это протокол или, другими словами, определение того, как веб-службы взаимодействуют друг с другом или взаимодействуют с клиентскими приложениями, которые их вызывают.

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

В этом руководстве по веб-службам SOAP вы узнаете:

  • Введение в SOAP
  • Преимущества SOAP
  • Строительные блоки SOAP
  • Структура сообщения SOAP
  • Элемент конверта SOAP
  • Модель связи SOAP
  • Практический пример SOAP

Введение в SOAP

В современном мире существует огромное количество приложений, построенных на разных языках программирования. Например, одно веб-приложение может быть разработано на Java, другое - на .Net, а третье - на PHP.

Обмен данными между приложениями имеет решающее значение в современном сетевом мире. Но обмен данными между этими разнородными приложениями будет сложным. Таким образом, будет сложность кода для выполнения этого обмена данными.

Одним из методов борьбы с этой сложностью является использование XML (расширяемого языка разметки) в качестве промежуточного языка для обмена данными между приложениями.

Каждый язык программирования может понимать язык разметки XML. Следовательно, XML использовался в качестве основного носителя для обмена данными.

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

SOAP был разработан для работы с XML через HTTP и имеет какую-то спецификацию, которая может использоваться во всех приложениях. Мы рассмотрим более подробную информацию о протоколе SOAP в следующих главах.

Преимущества SOAP

SOAP - это протокол, используемый для обмена данными между приложениями. Ниже приведены некоторые из причин использования SOAP.

  • При разработке веб-сервисов на основе SOAP вам необходимо иметь некоторый язык, который можно использовать для взаимодействия веб-сервисов с клиентскими приложениями. SOAP - идеальный носитель, разработанный для достижения этой цели. Этот протокол также рекомендуется консорциумом W3C, который является руководящим органом для всех веб-стандартов.
  • SOAP - это легкий протокол, который используется для обмена данными между приложениями. Обратите внимание на ключевое слово " свет ". Поскольку программирование SOAP основано на языке XML, который сам по себе является легким языком обмена данными, следовательно, протокол SOAP также попадает в ту же категорию.
  • Протокол SOAP не зависит от платформы, а также от операционной системы. Таким образом, протокол SOAP может работать с приложениями на любом языке программирования как на платформе Windows, так и на платформе Linux.
  • Он работает по протоколу HTTP - SOAP работает по протоколу HTTP, который является протоколом по умолчанию, используемым всеми веб-приложениями. Следовательно, не требуется какой-либо настройки, необходимой для запуска веб-служб, построенных на протоколе SOAP, для работы во всемирной паутине.

Строительные блоки SOAP

Спецификация SOAP определяет нечто, известное как « сообщение SOAP », которое отправляется веб-службе и клиентскому приложению.

На приведенной ниже диаграмме архитектуры SOAP показаны различные строительные блоки сообщения SOAP.

Строительные блоки сообщений SOAP

Сообщение SOAP - это не что иное, как простой XML-документ, который имеет следующие компоненты.

  • Элемент Envelope, который идентифицирует XML-документ как сообщение SOAP - это содержащая часть сообщения SOAP, которая используется для инкапсуляции всех деталей в сообщении SOAP. Это корневой элемент в сообщении SOAP.
  • Элемент заголовка, содержащий информацию заголовка - элемент заголовка может содержать информацию, такую ​​как учетные данные для аутентификации, которые могут использоваться вызывающим приложением. Он также может содержать определение сложных типов, которые могут использоваться в сообщении SOAP. По умолчанию сообщение SOAP может содержать параметры, которые могут быть простых типов, таких как строки и числа, но также могут быть сложными типами объектов.

Ниже показан простой пример службы SOAP сложного типа.

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

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

  • Элемент Body, который содержит информацию о вызове и ответе. Этот элемент содержит фактические данные, которые необходимо отправить между веб-службой и вызывающим приложением. Ниже приведен пример тела SOAP веб-службы SOAP, который фактически работает со сложным типом, определенным в разделе заголовка. Вот ответ с именем учебника и описанием учебника, который отправляется вызывающему приложению, которое вызывает эту веб-службу.
Web ServicesAll about web services

Структура сообщения SOAP

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

Каждый раз, когда клиентское приложение вызывает метод в веб-службе, веб-служба автоматически генерирует сообщение SOAP, которое будет содержать необходимые сведения о данных, которые будут отправлены из веб-службы в клиентское приложение.

Как обсуждалось в предыдущем разделе этого руководства по SOAP, простое сообщение SOAP имеет следующие элементы:

  • Элемент Envelope
  • Элемент заголовка и
  • Элемент тела
  • Элемент Fault (необязательно)

Давайте посмотрим на приведенный ниже пример простого сообщения SOAP и посмотрим, что на самом деле делает элемент.

Структура сообщения SOAP
  1. Как видно из приведенного выше сообщения SOAP, первая часть сообщения SOAP - это элемент конверта, который используется для инкапсуляции всего сообщения SOAP.
  2. Следующим элементом является тело SOAP, которое содержит подробную информацию о фактическом сообщении.
  3. Наше сообщение содержит веб-службу с именем «Guru99WebService».
  4. «Guru99Webservice» принимает параметр типа int и имеет имя TutorialID.

Теперь указанное выше сообщение SOAP будет передано между веб-службой и клиентским приложением.

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

Элемент конверта SOAP

Первым элементом строительного блока является конверт SOAP.

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

Элемент конверта SOAP используется для обозначения начала и конца сообщения SOAP. Это позволяет клиентскому приложению, которое вызывает веб-службу, знать, когда заканчивается сообщение SOAP.

В элементе конверта SOAP можно отметить следующие моменты.

  • Каждое сообщение SOAP должно иметь корневой элемент Envelope. Сообщение SOAP обязательно должно иметь элемент конверта.
  • Каждый элемент Envelope должен иметь хотя бы один элемент мыльного тела.
  • Если элемент Envelope содержит элемент заголовка, он должен содержать не более одного, и он должен отображаться как первый дочерний элемент Envelope перед элементом body.
  • Конверт меняется при изменении версий SOAP.
  • Процессор SOAP, совместимый с v1.1, генерирует ошибку при получении сообщения, содержащего пространство имен конверта v1.2.
  • Процессор SOAP, совместимый с v1.2, генерирует ошибку несоответствия версии, если он получает сообщение, которое не включает пространство имен конверта v1.2.

Ниже приведен пример SOAP API версии 1.2 элемента конверта SOAP.

int

Сообщение об ошибке

Когда делается запрос к веб-службе SOAP, возвращаемый ответ может быть в двух формах: успешный ответ или ответ с ошибкой. В случае успеха ответ сервера всегда будет сообщением SOAP. Но если генерируются ошибки SOAP, они возвращаются как ошибки «HTTP 500».

Сообщение об ошибке SOAP состоит из следующих элементов.

  1. - это код, обозначающий код ошибки. Код неисправности может иметь любое из следующих значений.
    1. SOAP-ENV: VersionMismatch - это когда обнаруживается недопустимое пространство имен для элемента конверта SOAP.
    2. SOAP-ENV: MustUnderstand - Непосредственный дочерний элемент элемента Header с атрибутом mustUnderstand, установленным в «1», не был распознан.
    3. SOAP-ENV: Клиент - сообщение было неправильно сформировано или содержало неверную информацию.
    4. SOAP-ENV: Сервер - возникла проблема с сервером, поэтому сообщение не может быть продолжено.
  2. - это текстовое сообщение с подробным описанием ошибки.
  3. (необязательно) - это текстовая строка, указывающая, кто вызвал ошибку.
  4. (необязательно) - это элемент для сообщений об ошибках приложения. Таким образом, приложение может иметь конкретное сообщение об ошибке для разных сценариев бизнес-логики.

Пример сообщения об ошибке

Пример сообщения об ошибке приведен ниже. Ошибка генерируется, если сценарий, в котором клиент пытается использовать метод под названием TutorialID в классе GetTutorial.

Приведенное ниже сообщение об ошибке генерируется в том случае, если метод не существует в определенном классе.

SOAP-ENV:ClientFailed to locate method (GetTutorialID) in class (GetTutorial)

Выход:

Когда вы выполните приведенный выше код, он покажет ошибку типа «Не удалось найти метод (GetTutorialID) в классе (GetTutorial)».

Модель связи SOAP

Вся связь по протоколу SOAP осуществляется по протоколу HTTP. До SOAP многие веб-службы использовали для связи стандартный стиль RPC (удаленный вызов процедур). Это был самый простой вид общения, но у него было много ограничений.

Теперь, в этом руководстве по SOAP API, давайте рассмотрим приведенную ниже диаграмму, чтобы увидеть, как работает эта связь. В этом примере предположим, что на сервере размещена веб-служба, которая предоставляет 2 метода:

  • GetEmployee - это будет получать все данные о сотрудниках
  • SetEmployee - это установит значение таких деталей, как отдел сотрудников, зарплата и т. Д. Соответственно.

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

Вышеупомянутая модель коммуникации имеет следующие серьезные ограничения.

  1. Не зависит от языка - сервер, на котором размещены методы, будет на определенном языке программирования, и обычно вызовы сервера будут только на этом языке программирования.
  2. Не стандартный протокол - при вызове удаленной процедуры вызов не выполняется по стандартному протоколу. Это было проблемой, поскольку в основном все коммуникации через Интернет должны были осуществляться через протокол HTTP.
  3. Брандмауэры - поскольку вызовы RPC не проходят по обычному протоколу, на сервере должны быть открыты отдельные порты, чтобы клиент мог взаимодействовать с сервером. Обычно все брандмауэры блокируют этот тип трафика, и, как правило, требовалось много настроек, чтобы гарантировать, что такой вид связи между клиентом и сервером будет работать.

Чтобы преодолеть все ограничения, упомянутые выше, SOAP будет использовать приведенную ниже модель связи.

  1. Клиент форматирует информацию о вызове процедуры и любых аргументах в сообщение SOAP и отправляет его на сервер как часть HTTP-запроса. Этот процесс инкапсуляции данных в сообщение SOAP был известен как Маршаллинг.
  2. Затем сервер развернет сообщение, отправленное клиентом, увидит, что клиент запросил, а затем отправит соответствующий ответ клиенту в виде сообщения SOAP. Практика разворачивания запроса, отправленного клиентом, известна как демаршаллинг.

Практический пример SOAP

Теперь в этом руководстве по SoapUI давайте посмотрим на практический пример SOAP,

Вероятно, один из лучших способов увидеть, как создаются сообщения SOAP, - это действительно увидеть веб-службу в действии.

В этом разделе будет рассмотрено использование инфраструктуры Microsoft.Net для создания веб-службы ASMX. Этот тип веб-службы поддерживает как версию SOAP 1.1, так и версию 1.2.

Веб-службы ASMX автоматически создают документ языка определения веб-служб (WSDL). Этот документ WSDL требуется вызывающему клиентскому приложению, чтобы приложение знало, на что способна веб-служба.

В нашем примере мы собираемся создать простую веб-службу, которая будет использоваться для возврата строки в приложение, которое вызывает веб-службу.

Этот веб-сервис будет размещен в веб-приложении Asp.Net. Затем мы вызовем веб-службу и увидим результат, возвращаемый веб-службой.

Visual Studio также покажет нам, какое сообщение SOAP передается между веб-службой и вызывающим приложением.

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

Для этого примера убедитесь, что в вашей системе установлена ​​Visual Studio 2013.

Шаг 1) Первый шаг - создать пустое веб-приложение ASP.Net. В Visual Studio 2013 выберите пункт меню Файл-> Новый проект.

После того, как вы нажмете на опцию «Новый проект», Visual Studio предоставит вам другое диалоговое окно для выбора типа проекта и предоставления необходимых сведений о проекте. Это объясняется на следующем шаге.

Шаг 2) На этом шаге

  1. Убедитесь, что вы сначала выбрали веб-шаблон C # для веб-приложения ASP.NET. Чтобы создать проект служб SOAP, проект должен быть этого типа. Выбрав этот вариант, Visual Studio выполнит необходимые шаги для добавления необходимых файлов, которые требуются любому веб-приложению.
  2. Дайте название вашему проекту, в нашем случае это webservice.asmx. Затем убедитесь, что вы указали место, где будут храниться файлы проекта.

После этого вы увидите файл проекта, созданный в обозревателе решений в Visual Studio 2013.

Шаг 3) На этом шаге

Мы собираемся добавить файл веб-сервиса в наш проект.

  1. Сначала щелкните правой кнопкой мыши файл проекта, как показано ниже.

  1. После того, как вы щелкните правой кнопкой мыши файл проекта, у вас будет возможность выбрать опцию «Добавить-> Веб-служба (ASMX), чтобы добавить файл веб-службы. Просто укажите имя учебной службы для файла имени веб-службы».

Шаг 4) Добавьте следующий код в asmx-файл учебной службы.

Пояснение к коду:

  1. Эта строка кода предоставляет имя для вашего файла веб-службы. Это важный шаг, потому что он дает возможность клиентскому приложению вызывать веб-службу через имя веб-службы.
  2. Обычно файл класса используется для инкапсуляции функциональности веб-службы. Таким образом, файл класса будет содержать определение всех веб-методов, которые будут предоставлять некоторую функциональность клиентскому приложению.
  3. Здесь [WebMethod] известен как атрибут, описывающий функцию. На следующем шаге создается функция под названием «Guru99WebService», но включение этого шага добавления атрибута [WebMethod] гарантирует, что этот метод может быть вызван клиентским приложением. Если этот атрибут отсутствует, метод никогда не может быть вызван клиентским приложением.
  4. Здесь мы определяем функцию под названием «Guru99WebService», которая будет использоваться для возврата строки в вызывающее клиентское приложение. Эта функция представляет собой веб-службу, которую может вызывать любое клиентское приложение.
  5. Мы используем оператор return, чтобы вернуть клиентскому приложению строку «Это веб-сервис Guru99».

Если код выполнен успешно, при запуске кода в браузере будет показан следующий результат.

Выход:

  • Выходные данные ясно показывают, что имя нашей веб-службы - «Веб-служба Guru99», что является результатом присвоения имени нашей веб-службе.
  • Мы также видим, что можем вызывать веб-службу. Если мы нажмем кнопку «Вызов», мы получим в веб-браузере следующий ответ.

Вышеупомянутый вывод,

  • Он ясно показывает, что при вызове веб-метода возвращается строка «Это веб-служба Guru99».
  • Visual Studio также позволяет просматривать запрос и ответ SOAP-сообщения, которые генерируются при вызове указанной выше веб-службы.

Ниже показан запрос SOAP, который создается при вызове веб-службы.

Пояснение к коду:

  1. Первая часть сообщения SOAP - это элемент конверта, который обсуждался в предыдущих главах. Это инкапсулирующий элемент, который присутствует в каждом сообщении SOAP.
  2. Тело SOAP - это следующий элемент, который содержит фактическую информацию о сообщении SOAP.
  3. Третья часть - это элемент, который указывает, что мы хотим вызвать службу, которая называется «Guru99WebService».

string

Пояснение к коду:

  1. Первая часть сообщения SOAP - это элемент конверта, который обсуждался в предыдущих главах. Это инкапсулирующий элемент, который присутствует в каждом сообщении SOAP.
  2. Тело SOAP - это следующий элемент, который содержит фактическую информацию о сообщении SOAP.
  3. Интересная часть, которую вы сейчас увидите, - это атрибут "строка". Это сообщает клиентскому приложению, что вызываемая веб-служба возвращает объект строки типа. Это очень полезно, потому что клиентское приложение, которое в противном случае не знало бы, что возвращает веб-служба.

Резюме

  • SOAP - это протокол, который используется для обмена данными между приложениями, построенными на разных языках программирования.
  • SOAP построен на спецификации XML и работает с протоколом HTTP. Это делает его идеальным для использования в веб-приложениях.
  • Строительные блоки SOAP состоят из сообщения SOAP. Каждое сообщение SOAP состоит из элемента конверта, заголовка и элемента тела.
  • Элемент конверта является обязательным элементом в сообщении SOAP и используется для инкапсуляции всех данных в сообщении SOAP.
  • Элемент заголовка может использоваться для хранения такой информации, как аутентификационная информация или определение сложных типов данных.
  • Элемент body - это главный элемент, который содержит определение веб-методов вместе с любой информацией о параметрах, если это необходимо.