Разница между сообщением SOAP и WSDL?

Я смущен тем, как SOAP-сообщения и WSDL подходят друг к другу? Я начал изучать SOAP-сообщения, например:

    POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

Являются ли все сообщения SOAP WSDL? Является ли SOAP протоколом, который принимает свои "SOAP-сообщения" или "WSDL"? Если они разные, тогда когда следует использовать SOAP-сообщения и когда я должен использовать WSDL?

Некоторые разъяснения вокруг этого были бы замечательными.

Ответ 1

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

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

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPrice xmlns:m="http://namespaces.my-example-book-info.com">
      <ISBN>978-0451524935</ISBN>
      <Title>1984</Title>
      <NumPages>328</NumPages>
    </m:GetBookPrice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

И мы ожидаем получить ответное сообщение SOAP, например:

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPriceResponse xmlns:m="http://namespaces.my-example-book-info.com">
      <CurrentPrice>8.99</CurrentPrice>
      <Currency>USD</Currency>
    </m:GetBookPriceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Затем WSDL описывает, как обрабатывать/обрабатывать это сообщение, когда сервер его получает. В нашем случае он описывает, какие типы будут иметь заголовок, NumPages и ISBN, следует ли ожидать ответа от сообщения GetBookPrice и как должен выглядеть этот ответ.

Типы будут выглядеть так:

<wsdl:types>

  <!-- all type declarations are in a chunk of xsd -->
  <xsd:schema targetNamespace="http://namespaces.my-example-book-info.com"
    xmlns:xsd="http://www.w3.org/1999/XMLSchema">

    <xsd:element name="GetBookPrice">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="ISBN" type="string"/>
          <xsd:element name="Title" type="string"/>
          <xsd:element name="NumPages" type="integer"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="GetBookPriceResponse">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="CurrentPrice" type="decimal" />
          <xsd:element name="Currency" type="string" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

  </xsd:schema>
</wsdl:types>

Но WSDL также содержит больше информации, о том, какие функции соединяются вместе для совершения операций и какие операции доступны в сервисе, и о местонахождении в сети вы можете получить доступ к сервису/операциям.

См. также W3 аннотированные примеры WSDL

Ответ 2

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

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

Быстрый поиск в Google даст много источников для дополнительного чтения (ссылка на предыдущую книгу теперь мертва, для борьбы с этим будут добавлены новые рекомендации в комментариях)

Просто отметив ваши конкретные вопросы:

Являются ли все сообщения SOAP WSDL? Нет, они совсем не одно и то же.

Является ли SOAP протоколом, который принимает свои собственные сообщения "SOAP-сообщения" или "WSDL"? Нет необходимости в чтении, поскольку это далеко.

Если они разные, тогда когда следует использовать SOAP-сообщения и когда я должен использовать WSDL? Структура Soap, которую вы применяете к вашему сообщению/данным для передачи. WSDL используются только для определения того, как совершать вызовы для службы в первую очередь. Часто это одно время, когда вы сначала добавляете код, чтобы позвонить в конкретный веб-сервис.

Ответ 3

WSDL (язык определения веб-сервисов) - это файл метаданных, описывающий веб-службу.

Такие вещи, как имя операции, параметры и т.д.

Мыльные сообщения являются фактическими полезными нагрузками

Ответ 4

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

Большинство приложений разработаны для взаимодействия с пользователями, пользователь вводит или ищет данные через интерфейс, а приложение затем отвечает на ввод пользователя.

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

Веб-сервис в основном представляет собой набор открытых протоколов, который используется для обмена данными между приложениями. Использование открытых протоколов позволяет веб-сервисам быть независимыми от платформы. Программное обеспечение, написанное на разных языках программирования и работающее на разных платформах, может использовать веб-службы для обмена данными по компьютерным сетям, таким как Интернет. Другими словами, приложения Windows могут разговаривать с приложениями PHP, Java и Perl и многими другими, что в обычных условиях не представляется возможным.

Как работают веб-службы?

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

Протокол простого доступа к объектам (SOAP)

Протокол простого доступа к объектам или протокол SOAP - это протокол для отправки и получения сообщений между приложениями, не сталкиваясь с проблемами взаимодействия (совместимость означает, что платформа, на которой работает веб-служба, становится неактуальной). Другим протоколом, который имеет аналогичную функцию, является HTTP. Он используется для доступа к веб-страницам или для просмотра Сети. HTTP гарантирует, что вам не нужно беспокоиться о том, какой веб-сервер - будь то Apache или IIS или любой другой - служит вам страницам, которые вы просматриваете, или просматриваемые страницы были созданы в ASP.NET или HTML.

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

Ниже приведен пример сообщения запроса и ответа SOAP

Запрос SOAP:

POST /InStock HTTP/1.1 
Host: www.bookshop.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 
<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body xmlns:m="http://www.bookshop.org/prices"> 
    <m:GetBookPrice> 
    <m:BookName>The Fleamarket</m:BookName> 
    </m:GetBookPrice> 
</soap:Body> 
</soap:Envelope>

SOAP Response:

POST /InStock HTTP/1.1 
Host: www.bookshop.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 
<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body xmlns:m="http://www.bookshop.org/prices"> 
    <m:GetBookPriceResponse> 
    <m: Price>10.95</m: Price> 
    </m:GetBookPriceResponse> 
</soap:Body> 
</soap:Envelope> 

Хотя оба сообщения выглядят одинаково, они выполняют разные методы. Например, глядя на приведенные выше примеры, вы можете видеть, что запрашивающее сообщение использует метод GetBookPrice для получения цены книги. Ответ выполняется методом GetBookPriceResponse, который будет сообщением, которое вы, как "запросчик", увидите. Вы также можете видеть, что сообщения состоят из XML.

Язык описания веб-служб или WSDL

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

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

Взгляните на образец файла WSDL:

<?xml version="1.0" encoding="UTF-8"?> 
<definitions  name ="DayOfWeek"  
  targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"  
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://schemas.xmlsoap.org/wsdl/">  
  <message name="DayOfWeekInput"> 
    <part name="date" type="xsd:date"/> 
  </message> 
  <message name="DayOfWeekResponse"> 
    <part name="dayOfWeek" type="xsd:string"/> 
  </message> 
  <portType name="DayOfWeekPortType"> 
    <operation name="GetDayOfWeek"> 
      <input message="tns:DayOfWeekInput"/> 
      <output message="tns:DayOfWeekResponse"/> 
    </operation> 
  </portType> 
  <binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType"> 
    <soap:binding style="document"  
      transport="http://schemas.xmlsoap.org/soap/http"/> 
    <operation name="GetDayOfWeek"> 
      <soap:operation soapAction="getdayofweek"/> 
      <input> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"  
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"   
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
    </operation> 
  </binding> 
  <service name="DayOfWeekService" > 
    <documentation> 
      Returns the day-of-week name for a given date 
    </documentation> 
    <port name="DayOfWeekPort" binding="tns:DayOfWeekBinding"> 
      <soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/> 
    </port> 
  </service> 
</definitions> 

Основные сведения о файле WSDL - это то, что он предоставляет вам:

Описание веб-службы

Методы, используемые веб-службой и требуемые параметры

Способ поиска веб-служб

Ответ 5

Лучшая аналогия, чем телефонный звонок: заказ продуктов через почтовую почту из почтовой службы. Документ WSDL похож на инструкции, объясняющие, как создавать формы заказов, которые поставщик услуг будет принимать. Сообщение SOAP похоже на конверт со стандартным дизайном (размер, форма, конструкция), с которым каждый почтовый отдел по всему миру знает, как обращаться. Вы помещаете свою форму заказа в такой конверт. Сеть (например, Интернет) является почтовой службой. Вы положили конверт на почту. Сотрудники почтовой службы не заглядывают внутрь конверта. XML полезной нагрузки - это форма заказа, которую вы вложили в конверт. После того, как почтовое отделение доставляет конверт, поставщик веб-услуг открывает конверт и обрабатывает форму заказа. Если вы правильно создали и заполнили форму, они отправят вам отправленный вами товар.

Ответ 6

В простых выражениях, если у вас есть веб-сервис калькулятора. WSDL рассказывает о функциях, которые вы можете реализовать или подвергнуть действию клиенту. Например: добавление, удаление, вычитание и т.д. Где, используя SOAP, вы фактически выполняете действия, такие как doDelete(), doSubtract(), doAdd(). Таким образом, SOAP и WSDL являются яблоками и апельсинами. Мы не должны сравнивать их. Они оба имеют свою собственную функциональность.

Ответ 7

SOAP:  Это открытый стандартный протокол связи на основе XML, который используется для обмена информацией от пользователя к веб-службе или наоборот.  Мыло - это только документ, в котором данные организованы в определенном порядке.  Для каждого запроса и ответа может присутствовать отдельное мыло.

WSDL:  В мыле данные организованы каким-то образом, и эта организация указана в WSDL. Здесь также указан тип данных, который должен использоваться.  Для запроса и ответа будет представлен один WSDL

Ответ 8

WSDL - это своего рода контракт между провайдером API и клиентом, который описывает веб-сервис: публичная функция, необязательное/обязательное поле...

Но мыльное сообщение - это данные, передаваемые между клиентом и поставщиком (полезная нагрузка)

Ответ 9

WSDL действует как интерфейс между отправителем и получателем.
SOAP-сообщение - это запрос и ответ в формате xml.

сравнивая с Java RMI

WSDL - это интерфейсный класс
SOAP-сообщение является маршализованным сообщением запроса и ответа.

Ответ 10

Мы можем рассмотреть телефонный звонок. В том, что Number является wsdl, и обмен информацией является мылом.

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