Может ли WSDL указывать версию SOAP (1.1 или 1.2) веб-службы?
можно ли увидеть, использует ли веб-служба SOAP 1.1 или 1.2, основываясь на информации в WSDL?
5 ответов:
SOAP 1.1 использует пространство имен http://schemas.xmlsoap.org/wsdl/soap/
SOAP 1.2 использует пространство имен http://schemas.xmlsoap.org/wsdl/soap12/
wsdl может определять операции под soap 1.1 и soap 1.2 в то же время в том же wsdl. Это полезно, если вам нужно развить свой wsdl для поддержки новой функциональности, которая требует soap 1.2 (например. MTOM), в этом случае вам не нужно создавать новую услугу, а просто развивать оригинал один.
в WSDL, если вы посмотрите на обязательные раздел, вы ясно увидите, что привязка soap явно упоминается, если служба использует soap 1.2. см. ниже образец.
<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl"> <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="findEmployeeById"> <soap12:operation soapAction=""/> <input><soap12:body use="literal"/></input> <output><soap12:body use="literal"/></output> </operation><operation name="create"> <soap12:operation soapAction=""/> <input><soap12:body use="literal"/></input> <output><soap12:body use="literal"/></output> </operation> </binding>
если веб-служба использует soap 1.1, она не будет явно определять версию soap в файле WSDL в разделе привязки. см. ниже образец.
<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/> <operation name="findEmployeeById"> <soap:operation soapAction=""/> <input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input> <output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output> </operation><operation name="create"> <soap:operation soapAction=""/> <input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input> <output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output> </operation> </binding>
как определить версию SOAP сообщения SOAP?
но помните, что это не очень рекомендуется способ определения версии soap, которую используют ваши веб-службы. версию сообщения soap можно определить одним из следующих способов.
1. проверка пространства имен сообщения soap
SOAP 1.1 namespace : http://schemas.xmlsoap.org/soap/envelope SOAP 1.2 namespace : http://www.w3.org/2003/05/soap-envelope
2. проверка информации о привязке транспорта (информация заголовка http) сообщения soap
SOAP 1.1: пользовательский текст / xml для контекстного типа
POST /MyService HTTP/1.1 Content-Type: text/xml; charset="utf-8" Content-Length: xxx SOAPAction: "urn:uuid:myaction"
мыло 1.2 : пользователь application/soap+xml для контекстного типа
POST /MyService HTTP/1.1 Content-Type: application/soap+xml; charset="utf-8" Content-Length: xxx SOAPAction: "urn:uuid:myaction"
3. использование информации о неисправностях SOAP
структура сообщения об ошибке SOAP между двумя версиями отличается.
Я нашел эту страницу
http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm
который говорит, что Soap 1.2 использует новое пространство имен http://schemas.xmlsoap.org/wsdl/soap12/
Он находится в'WSDL 1.1 Binding extension for SOAP 1.1'.
Да вы обычно можете увидеть, какая версия SOAP поддерживается на основе WSDL.
посмотри демонстрационный веб-сервис WSDL. Он имеет ссылку на пространство имен soap12, указывающее, что он поддерживает SOAP 1.2. Если бы это отсутствовало, вы, вероятно, были бы в безопасности, если бы служба поддерживала только SOAP 1.1.