SOAP - Краткое руководство
SOAP - это аббревиатура от Simple Object Access Protocol. Это протокол обмена сообщениями на основе XML для обмена информацией между компьютерами. SOAP - это приложение спецификации XML.
Указывает на заметку
SOAP - это протокол связи, предназначенный для связи через Интернет.
SOAP может расширить HTTP для обмена сообщениями XML.
SOAP обеспечивает транспортировку данных для веб-служб.
SOAP может обмениваться полными документами или вызывать удаленную процедуру.
SOAP можно использовать для трансляции сообщения.
SOAP не зависит от платформы и языка.
SOAP - это способ XML для определения того, какая информация отправляется и как.
SOAP позволяет клиентским приложениям легко подключаться к удаленным службам и вызывать удаленные методы.
Хотя SOAP может использоваться в различных системах обмена сообщениями и может быть доставлен через множество транспортных протоколов, первоначальное внимание SOAP уделяется удаленным вызовам процедур, передаваемым через HTTP.
Другие платформы, включая CORBA, DCOM и Java RMI, предоставляют функциональные возможности, аналогичные SOAP, но сообщения SOAP полностью пишутся на XML и поэтому не зависят от платформы и языка.
Сообщение SOAP - это обычный XML-документ, содержащий следующие элементы:
Envelope- Определяет начало и конец сообщения. Это обязательный элемент.
Header- Содержит любые дополнительные атрибуты сообщения, используемые при обработке сообщения, либо в промежуточной точке, либо в конечной конечной точке. Это необязательный элемент.
Body- Содержит данные XML, составляющие отправляемое сообщение. Это обязательный элемент.
Fault - Необязательный элемент Fault, который предоставляет информацию об ошибках, возникающих при обработке сообщения.
Все эти элементы объявлены в пространстве имен по умолчанию для конверта SOAP - http://www.w3.org/2001/12/soap-envelope а пространство имен по умолчанию для кодировки SOAP и типов данных - http://www.w3.org/2001/12/soap-encoding
NOTE- Все эти характеристики могут быть изменены. Так что продолжайте обновлять себя последними техническими характеристиками, доступными на веб-сайте W3.
Структура сообщения SOAP
В следующем блоке показана общая структура сообщения 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-ENV:Header>
...
...
</SOAP-ENV:Header>
<SOAP-ENV:Body>
...
...
<SOAP-ENV:Fault>
...
...
</SOAP-ENV:Fault>
...
</SOAP-ENV:Body>
</SOAP_ENV:Envelope>
Конверт SOAP указывает начало и конец сообщения, чтобы получатель знал, когда было получено все сообщение. Конверт SOAP решает проблему знания, когда вы закончили получать сообщение и готовы его обработать. Таким образом, конверт SOAP - это, по сути, механизм упаковки.
Указывает на заметку
Каждое сообщение SOAP имеет корневой элемент Envelope.
Конверт - обязательная часть сообщения SOAP.
Каждый элемент Envelope должен содержать ровно один элемент Body.
Если Envelope содержит элемент Header, он должен содержать не более одного, и он должен отображаться как первый дочерний элемент Envelope перед Body.
Конверт меняется при изменении версий SOAP.
Конверт SOAP указывается с помощью префикса пространства имен ENV и элемента Envelope.
Необязательная кодировка SOAP также указывается с использованием имени пространства имен и необязательного элемента encodingStyle , который также может указывать на стиль кодирования, отличный от SOAP.
Процессор SOAP, совместимый с v1.1, генерирует ошибку при получении сообщения, содержащего пространство имен конверта v1.2.
Процессор SOAP, совместимый с v1.2, генерирует ошибку VersionMismatch, если он получает сообщение, которое не включает пространство имен конверта v1.2.
Сообщение SOAP, совместимое с v1.2
Ниже приведен пример сообщения SOAP, совместимого с версией 1.2.
<?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">
...
Message information goes here
...
</SOAP-ENV:Envelope>
SOAP с HTTP POST
В следующем примере показано использование сообщения SOAP в операции HTTP POST, которая отправляет сообщение на сервер. Он показывает пространства имен для определения схемы конверта и для определения схемы правил кодирования. OrderEntry ссылка в HTTP заголовка является имя программы , которая будет вызвана на сайте tutorialspoint.com.
POST /OrderEntry HTTP/1.1
Host: www.tutorialspoint.com
Content-Type: application/soap; charset = "utf-8"
Content-Length: nnnn
<?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">
...
Message information goes here
...
</SOAP-ENV:Envelope>
NOTE - Привязка HTTP указывает местоположение службы.
Необязательный элемент Header предлагает гибкую структуру для определения дополнительных требований на уровне приложения. Например, элемент Header можно использовать для указания цифровой подписи для служб, защищенных паролем. Точно так же его можно использовать для указания номера учетной записи для сервисов SOAP с оплатой по факту использования.
Указывает на заметку
Это необязательная часть сообщения SOAP.
Элементы заголовка могут встречаться несколько раз.
Заголовки предназначены для добавления новых функций и возможностей.
Заголовок SOAP содержит записи заголовка, определенные в пространстве имен.
Заголовок кодируется как первый непосредственный дочерний элемент конверта SOAP.
Если определено несколько заголовков, все непосредственные дочерние элементы заголовка SOAP интерпретируются как блоки заголовка SOAP.
Атрибуты заголовка SOAP
Заголовок SOAP может иметь следующие два атрибута:
Атрибут актера
Протокол SOAP определяет путь сообщения как список узлов службы SOAP. Каждый из этих промежуточных узлов может выполнять некоторую обработку, а затем пересылать сообщение следующему узлу в цепочке. Установив атрибут Actor, клиент может указать получателя заголовка SOAP.
Атрибут MustUnderstand
Он указывает, является ли элемент заголовка необязательным или обязательным. Если установлено значение true, получатель должен понимать и обрабатывать атрибут Header в соответствии с его определенной семантикой или возвращать ошибку.
В следующем примере показано, как использовать заголовок в сообщении 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-ENV:Header>
<t:Transaction
xmlns:t = "http://www.tutorialspoint.com/transaction/"
SOAP-ENV:mustUnderstand = "true">5
</t:Transaction>
</SOAP-ENV:Header>
...
...
</SOAP-ENV:Envelope>
Тело SOAP - это обязательный элемент, содержащий определяемые приложением данные XML, которыми обмениваются в сообщении SOAP. Тело должно содержаться в конверте и следовать за всеми заголовками, которые могут быть определены для сообщения.
Тело определяется как дочерний элемент конверта, а семантика тела определяется в связанной схеме SOAP.
Тело содержит обязательную информацию, предназначенную для конечного получателя сообщения. Например -
<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
........
<SOAP-ENV:Body>
<m:GetQuotation xmlns:m = "http://www.tp.com/Quotation">
<m:Item>Computers</m:Item>
</m:GetQuotation>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
В приведенном выше примере запрашивается предложение компьютерных комплектов. Обратите внимание, что элементы m: GetQuotation и Item выше относятся к конкретным элементам приложения. Они не являются частью стандарта SOAP.
Вот ответ на запрос выше -
<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
........
<SOAP-ENV:Body>
<m:GetQuotationResponse xmlns:m = "http://www.tp.com/Quotation">
<m:Quotation>This is Qutation</m:Quotation>
</m:GetQuotationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Обычно приложение также определяет схему, содержащую семантику, связанную с элементами запроса и ответа.
Служба расценок может быть реализована с использованием EJB, запущенного на сервере приложений; в таком случае процессор SOAP будет отвечать за отображение информации тела как параметров в реализацию EJB службы GetQuotationResponse и из нее . Процессор SOAP также может отображать информацию тела в объект .NET, объект CORBA, программу COBOL и так далее.
Если во время обработки возникает ошибка, ответом на сообщение SOAP является элемент ошибки SOAP в теле сообщения, и ошибка возвращается отправителю сообщения SOAP.
Механизм отказа SOAP возвращает конкретную информацию об ошибке, включая предопределенный код, описание и адрес процессора SOAP, который сгенерировал ошибку.
Указывает на заметку
Сообщение SOAP может содержать только один блок сбоя.
Ошибка - это необязательная часть сообщения SOAP.
Для привязки HTTP успешный ответ связан с диапазоном кодов состояния от 200 до 299.
Ошибка SOAP связана с диапазоном кодов состояния от 500 до 599.
Подэлементы неисправности
Ошибка SOAP имеет следующие подэлементы -
Старший Нет | Подэлемент и описание |
---|---|
1 | <faultCode> Это текстовый код, используемый для обозначения класса ошибок. В следующей таблице приведен список предопределенных кодов неисправностей. |
2 | <faultString> Это текстовое сообщение, объясняющее ошибку. |
3 | <faultActor> Это текстовая строка, указывающая, кто вызвал ошибку. Это полезно, если сообщение SOAP проходит через несколько узлов в пути сообщения SOAP, и клиенту необходимо знать, какой узел вызвал ошибку. Узел, который не действует как конечный пункт назначения, должен включать элемент faultActor . |
4 | <detail> Это элемент, используемый для передачи сообщений об ошибках приложения. Элемент подробных сведений может содержать дочерние элементы, называемые записями сведений. |
Коды ошибок SOAP
Определенные ниже значения faultCode должны использоваться в элементе faultcode при описании ошибок.
Старший Нет | Ошибка и описание |
---|---|
1 | SOAP-ENV:VersionMismatch Обнаружено недопустимое пространство имен для элемента SOAP Envelope. |
2 | SOAP-ENV:MustUnderstand Непосредственный дочерний элемент элемента Header с атрибутом mustUnderstand, установленным в «1», не был распознан. |
3 | SOAP-ENV:Client Сообщение было неправильно сформировано или содержало неверную информацию. |
4 | SOAP-ENV:Server Возникла проблема с сервером, поэтому сообщение не может быть продолжено. |
Пример ошибки SOAP
Следующий код представляет собой образец ошибки. Клиент запросил метод с именем ValidateCreditCard , но служба не поддерживает такой метод. Это представляет собой ошибку запроса клиента, и сервер возвращает следующий ответ SOAP:
<?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 (ValidateCreditCard) in class (examplesCreditCard) at
/usr/local/ActivePerl-5.6/lib/site_perl/5.6.0/SOAP/Lite.pm line 1555.
</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAP включает встроенный набор правил для кодирования типов данных. Он позволяет сообщению SOAP указывать определенные типы данных, такие как целые числа, числа с плавающей запятой, двойные числа или массивы.
Типы данных SOAP делятся на две большие категории - скалярные типы и составные типы.
Скалярные типы содержат ровно одно значение, такое как фамилия, цена или описание продукта.
Составные типы содержат несколько значений, например, заказ на покупку или список котировок акций.
Составные типы далее подразделяются на массивы и структуры.
Стиль кодирования сообщения SOAP устанавливается с помощью атрибута SOAP-ENV: encodingStyle .
Чтобы использовать кодировку SOAP 1.1, используйте значение http://schemas.xmlsoap.org/soap/encoding/
Чтобы использовать кодировку SOAP 1.2, используйте значение http://www.w3.org/2001/12/soap-encoding
Последняя спецификация SOAP принимает все встроенные типы, определенные XML-схемой. Тем не менее, SOAP поддерживает свое собственное соглашение для определения конструкций, не стандартизированных XML-схемой, таких как массивы и ссылки.
Скалярные типы
Для скалярных типов SOAP принимает все встроенные простые типы, указанные в спецификации схемы XML. Сюда входят строки, числа с плавающей запятой, числа с двойной точностью и целые числа.
В следующей таблице перечислены основные простые типы, взятые из XML Schema Part 0 - Primer. http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/
Простые типы, встроенные в схему XML | ||
---|---|---|
Простой тип | Примеры) | |
строка | Подтвердите, что это электрический. | |
логический | истина, ложь, 1, 0. | |
плавать | -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN. | |
двойной | -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN. | |
десятичный | -1,23, 0, 123,4, 1000,00. | |
двоичный | 100010 | |
целое число | -126789, -1, 0, 1, 126789. | |
nonPositiveInteger | -126789, -1, 0. | |
negativeInteger | -126789, -1. | |
долго | -1, 12678967543233 | |
int | -1, 126789675 | |
короткая | -1, 12678 | |
байт | -1, 126 | |
nonNegativeInteger | 0, 1, 126789 | |
unsignedLong | 0, 12678967543233 | |
unsignedInt | 0, 1267896754 | |
unsignedShort | 0, 12678 | |
unsignedByte | 0, 126 | |
положительное число | 1, 126789. | |
свидание | 1999-05-31, --- 05. | |
время | 13: 20: 00.000, 13: 20: 00.000-05: 00 |
Например, вот ответ SOAP с типом данных double -
<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getPriceResponse
xmlns:ns1 = "urn:examples:priceservice"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<return xsi:type = "xsd:double">54.99</return>
</ns1:getPriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Составные типы
Массивы SOAP имеют очень специфический набор правил, которые требуют, чтобы вы указывали как тип элемента, так и размер массива. SOAP также поддерживает многомерные массивы, но не все реализации SOAP поддерживают многомерные функции.
Чтобы создать массив, вы должны указать его как массив xsi: type . Массив также должен включать атрибут arrayType . Этот атрибут требуется, чтобы указать тип данных для содержащихся элементов и размер (а) массива.
Например, следующий атрибут определяет массив из 10 двойных значений -
arrayType = "xsd:double[10]"
Напротив, следующий атрибут определяет двумерный массив строк -
arrayType = "xsd:string[5,5]"
Вот образец ответа SOAP с массивом двойных значений -
<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getPriceListResponse
xmlns:ns1 = "urn:examples:pricelistservice"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<return xmlns:ns2 = "http://www.w3.org/2001/09/soap-encoding"
xsi:type = "ns2:Array" ns2:arrayType = "xsd:double[2]">
<item xsi:type = "xsd:double">54.99</item>
<item xsi:type = "xsd:double">19.99</item>
</return>
</ns1:getPriceListResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Структуры содержат несколько значений, но каждый элемент определяется с помощью уникального элемента доступа. Например, рассмотрим элемент в каталоге продуктов. В этом случае структура может содержать артикул продукта, название продукта, описание и цену. Вот как такая структура будет представлена в сообщении SOAP:
<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getProductResponse
xmlns:ns1 = "urn:examples:productservice"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<return xmlns:ns2 = "urn:examples" xsi:type = "ns2:product">
<name xsi:type = "xsd:string">Red Hat Linux</name>
<price xsi:type = "xsd:double">54.99</price>
<description xsi:type = "xsd:string">
Red Hat Linux Operating System
</description>
<SKU xsi:type = "xsd:string">A358185</SKU>
</return>
</ns1:getProductResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
NOTE- Пожалуйста, позаботьтесь о правильном отступе при написании кода SOAP. Каждый элемент в структуре указывается с уникальным именем метода доступа. Например, сообщение выше включает четыре вспомогательных элемента - имя, цену, описание и артикул. Каждый элемент может иметь свой тип данных. Например, имя указывается в виде строки, а цена - как двойная.
SOAP не привязан ни к какому транспортному протоколу. SOAP можно транспортировать через SMTP, FTP, IBM MQSeries или Microsoft Message Queuing (MSMQ).
Спецификация SOAP включает сведения только о HTTP. HTTP остается самым популярным транспортным протоколом SOAP.
SOAP через HTTP
Вполне логично, что запросы SOAP отправляются через запрос HTTP, а ответы SOAP возвращаются в содержимом ответа HTTP. Хотя запросы SOAP могут отправляться через HTTP GET, спецификация включает подробную информацию только о HTTP POST.
Кроме того, как HTTP-запросы, так и ответы необходимы для установки типа содержимого text / xml.
Спецификация SOAP требует, чтобы клиент предоставил заголовок SOAPAction, но фактическое значение заголовка SOAPAction зависит от реализации сервера SOAP.
Например, чтобы получить доступ к службе перевода AltaVista BabelFish, размещенной на XMethods, вы должны указать следующее как заголовок SOAPAction.
urn:xmethodsBabelFish#BabelFish
Даже если серверу не требуется полный заголовок SOAPAction, клиент должен указать пустую строку ("") или нулевое значение. Например -
SOAPAction: ""
SOAPAction:
Вот пример запроса, отправленного через HTTP в службу переводов XMethods Babelfish:
POST /perl/soaplite.cgi HTTP/1.0
Host: services.xmethods.com
Content-Type: text/xml; charset = utf-8
Content-Length: 538
SOAPAction: "urn:xmethodsBabelFish#BabelFish"
<?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>
<ns1:BabelFish
xmlns:ns1 = "urn:xmethodsBabelFish"
SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/">
<translationmode xsi:type = "xsd:string">en_fr</translationmode>
<sourcedata xsi:type = "xsd:string">Hello, world!</sourcedata>
</ns1:BabelFish>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Обратите внимание на тип содержимого и заголовок SOAPAction. Также обратите внимание, что для метода BabelFish требуются два параметра String. Режим перевода en_fr переводит с английского на французский.
Вот ответ от XMethods -
HTTP/1.1 200 OK
Date: Sat, 09 Jun 2001 15:01:55 GMT
Server: Apache/1.3.14 (Unix) tomcat/1.0 PHP/4.0.1pl2
SOAPServer: SOAP::Lite/Perl/0.50
Cache-Control: s-maxage = 60, proxy-revalidate
Content-Length: 539
Content-Type: text/xml
<?xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENC = "http://schemas.xmlsoap.org/soap/encoding/"
SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd = "http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<namesp1:BabelFishResponse xmlns:namesp1 = "urn:xmethodsBabelFish">
<return xsi:type = "xsd:string">Bonjour, monde!</return>
</namesp1:BabelFishResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Ответы SOAP, доставляемые через HTTP, должны соответствовать тем же кодам состояния HTTP. Например, код состояния 200 OK указывает на успешный ответ. Код состояния 500 Internal Server Error указывает, что произошла ошибка сервера и что ответ SOAP включает элемент Fault.
В приведенном ниже примере запрос GetQuotation отправляется на сервер SOAP через HTTP. Запрос имеет параметр QuotationName , и в ответе будет возвращено Quotation.
Пространство имен для функции определено в http://www.xyz.org/quotation адрес.
Вот запрос SOAP -
POST /Quotation HTTP/1.0
Host: www.xyz.org
Content-Type: text/xml; charset = utf-8
Content-Length: nnn
<?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-ENV:Body xmlns:m = "http://www.xyz.org/quotations">
<m:GetQuotation>
<m:QuotationsName>MiscroSoft</m:QuotationsName>
</m:GetQuotation>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Соответствующий ответ SOAP выглядит так -
HTTP/1.0 200 OK
Content-Type: text/xml; charset = utf-8
Content-Length: nnn
<?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-ENV:Body xmlns:m = "http://www.xyz.org/quotation">
<m:GetQuotationResponse>
<m:Quotation>Here is the quotation</m:Quotation>
</m:GetQuotationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Протокол SOAP 1.1 был первоначально представлен W3C в мае 2000 года. Официальными заявителями были такие крупные компании, как Microsoft, IBM и Ariba, и более мелкие компании, такие как UserLand Software и DevelopMentor.
В июле 2001 года рабочая группа по протоколу XML выпустила «рабочий проект» SOAP 1.2. В W3C этот документ официально находится в стадии разработки, а это означает, что документ, вероятно, будет обновляться много раз, прежде чем он будет завершен.
Версия 1.1 SOAP доступна в Интернете по адресу http://www.w3.org/TR/SOAP/
Рабочий проект SOAP версии 1.2 доступен по адресу http://www.w3.org/TR/soap12/
Обратите внимание, что W3C также размещает отправку «сообщений SOAP с вложениями», которая отделяется от базовой спецификации SOAP. Эта спецификация позволяет сообщениям SOAP включать двоичные вложения, такие как изображения и звуковые файлы. Для получения полной информации см. Примечание W3C по адресуhttp://www.w3.org/TR/SOAP-attachments.