Я использую Python 2.7.17 (v2.7.17: c2f86d86e6, 19 октября 2019, 16:07:15) с Zeep 3.4.0 Я хотел бы сгенерировать сообщение SOAP WS-Transfer Get согласно пример, представленный в веб-службах Microsoft для устройства https://docs.microsoft.com/en-us/windows/win32/wsdapi/get--metadata-exchange--http-request-and-message. У меня есть wsdl от https://www.w3.org/Submission/WS-Transfer/#Appendix_II__E2_80_93_WSDL
Во-первых, в WSDL отсутствуют определения привязки. Поэтому я добавил собственную привязку SOAP 1.2, как показано ниже:
<wsdl:binding name="DeviceBinding" type="tns:Resource"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="Get"> <soap:operation soapAction="Get"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding>
Для поддержки этого я добавил в определения wsdl
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" ...
Теперь я могу генерировать сообщения Transfer Get, как показано ниже
<?xml version='1.0' encoding='utf-8'?> <soap-env:Envelope xmlns:soap-env="http://www.w3.org/2003/05/soap-envelope"> <soap-env:Header> <ns0:To xmlns:ns0="http://schemas.xmlsoap.org/ws/2004/08/addressing"> urn:uuid:1c852a4d-b800-1f08-abcd-2c59e5f45b6a </ns0:To> <ns1:Action xmlns:ns1="http://schemas.xmlsoap.org/ws/2004/08/addressing"> http://schemas.xmlsoap.org/ws/2004/09/transfer/Get </ns1:Action> <ns2:MessageID xmlns:ns2="http://schemas.xmlsoap.org/ws/2004/08/addressing"> urn:uuid:79818c6b-46b3-11ea-a3cb-8c8590370433 </ns2:MessageID> <ns3:ReplyTo xmlns:ns3="http://schemas.xmlsoap.org/ws/2004/08/addressing"> <ns3:Address> http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous </ns3:Address> </ns3:ReplyTo> <ns4:From xmlns:ns4="http://schemas.xmlsoap.org/ws/2004/08/addressing"> <ns4:Address> urn:uuid:d9eb9154-5596-469a-9d1c-8c62d52bae77 </ns4:Address> </ns4:From> </soap-env:Header> <soap-env:Body> <Get><Body/> </Get> </soap-env:Body> </soap-env:Envelope>
ПРОБЛЕМА: Вышеуказанное не работает с Windows рабочими столами. То же самое работает с принтерами, поддерживающими профиль устройства.
Для запроса SOAP, который работает с Windows настольными целями, тело Soap ДОЛЖНО БЫТЬ ПУСТО. Как мне сгенерировать запрос SOAP с пустым телом. то есть Windows P C не нравится
<Get><Body/> </Get>
в SOAP корпусе.