Как генерировать SOAP WS-Transfer GET-запросы, используя ZEEP, который работает против Microsoft Windows Настольные цели - PullRequest
0 голосов
/ 04 февраля 2020

Я использую 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 корпусе.

...