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

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

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

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

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

Мыло Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Простой пример службы SOAP для com.plex тип показан ниже.

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

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

<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, который фактически работает на компьютере.plex тип, определенный в разделе заголовка. Вот ответ с именем и описанием учебника, который отправляется вызывающему приложению, которое вызывает этот веб-сервис.
<soap:Body>
   <GetTutorialInfo>
		<TutorialName>Web Services</TutorialName> 
		<TutorialDescription>All about web services</TutorialDescription> 
   </GetTutorialInfo>
</soap:Body>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Фоллоwing точки можно отметить на элементе конверта 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 состоит из следующего:wing элементов.

  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 метода:

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

При обычном общении в стиле 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 передается между веб-службой и вызывающим приложением.

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

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

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

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

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

Шаг 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) Добавить подпискуwing код в asmx-файл Учебной службы.

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

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

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

Если код выполнен успешно, тоwing Вывод будет показан, когда вы запустите свой код в браузере.

Вывод:

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

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

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

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

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

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

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

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

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

Итого

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