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

Что такое МЫЛО?

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

SOAP известен как простой протокол доступа к объектам, но в более поздние времена его просто сократили до SOAP v1.2. 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-сообщений

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

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

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

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

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

<xsd:complexType>     
 <xsd:sequence>       
 	<xsd:element name="Tutorial Name" type="string"/>         
  	<xsd:element name="Tutorial Description"  type="string"/>
  </xsd:sequence>
</xsd:complexType>
  • Элемент Body, содержащий информацию о вызове и ответе – этот элемент содержит фактические данные, которые необходимо отправить между веб-службой и вызывающим приложением. Ниже приведен пример веб-службы SOAP для тела SOAP, которое фактически работает с комплексным типом, определенным в разделе заголовка. Вот ответ Tutorial Name и Tutorial Description, который отправляется вызывающему приложению, которое вызывает этот веб-сервис.
<soap:Body>
   <GetTutorialInfo>
		<TutorialName>Web Services</TutorialName> 
		<TutorialDescription>All about web services</TutorialDescription> 
   </GetTutorialInfo>
</soap:Body>

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

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

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

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

  • Элемент «Конверт»
  • Элемент заголовка и
  • Элемент тела
  • Элемент «Неисправность» (необязательно)

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

Структура сообщения 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 перед элементом body.
  • Конверт меняется при изменении версий SOAP.
  • Процессор SOAP, совместимый с версией 1.1, генерирует ошибку при получении сообщения, содержащего пространство имен конверта версии 1.2.
  • Процессор SOAP, совместимый с версией 1.2, генерирует ошибку несоответствия версий, если он получает сообщение, которое не включает пространство имен конверта версии 1.2.

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

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle=" http://www.w3.org/2001/12/soap-encoding">
          <soap:Body>
        <Guru99WebService xmlns="http://tempuri.org/">
                  <TutorialID>int</TutorialID>
                </Guru99WebService>
          </soap:Body>
</SOAP-ENV:Envelope>

Сообщение о неисправности

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

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

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

Пример сообщения о неисправности

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

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

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
      <SOAP-ENV:Body>
         <SOAP-ENV:Fault>
         <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
        <faultstring xsi:type="xsd:string">
            Failed to locate method (GetTutorialID) in class (GetTutorial)
         </faultstring>
    </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Вывод:

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

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

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

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

  • Получить сотрудника – Это позволит получить все данные о сотрудниках
  • УстановитьСотрудник – Это позволит установить значение таких деталей, как количество сотрудников, зарплата и т. д. соответственно.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример сообщения SOAP

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

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

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

Пример сообщения SOAP

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

Пример сообщения SOAP

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

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

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

Пример сообщения SOAP

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

Пример сообщения SOAP

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

Пример сообщения SOAP

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

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

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

Вывод:

Пример сообщения SOAP

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

Пример сообщения SOAP

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

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

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

Пример сообщения SOAP

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

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

Пример сообщения SOAP

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  
    <soap:Body>
      
        <Guru99WebServiceResponse xmlns="http://tempuri.org/">
          
            <Guru99WebServiceResult>string</Guru99WebServiceResult>
          
        </Guru99WebServiceResponse>
    </soap:Body>
</soap:Envelope>

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

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

Резюме

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

Подведем итог этой публикации следующим образом: