Как создаются мыльные конверты и почему клиенты .NET и php производят / получают разные мыльные конверты? - PullRequest
2 голосов
/ 02 марта 2011

Я ищу информацию о том, что происходит, когда клиент веб-службы, созданный с помощью добавления ссылки на службу в Visual Studio 2010, выполняет вызов веб-службы и возвращает результат.

Как создается конверт запроса мыла и что определяет формат? Как создается конверт с мыльным ответом и от чего зависит формат?

Этот процесс всегда абстрагировался .net, и я никогда не изучал, как это делается, но у нас есть пользователь, использующий php и, похоже, имеющий проблему с конвертом ответа. Ниже я предоставлю образец мыльных конвертов для запроса и ответа из .net и php кода.

php запрос:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:ns1="http://some.junk.url.xxxx.com">
  <SOAP-ENV:Body>
    <ns1:wsActionRouter>
      <ns1:i_UserId>XXXX</ns1:i_UserId>
      <ns1:i_Password>******</ns1:i_Password>
      <ns1:ActionType>CS</ns1:ActionType>
      <ns1:XmlData>
        blah blah blah
      </ns1:XmlData>
    </ns1:wsActionRouter>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

.NET запрос:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <Action s:mustUnderstand="1"
        xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none" />
  </s:Header>
  <s:Body>
    <wsActionRouter xmlns="http://some.junk.url.xxxx.com">
      <i_UserId>XXXX</i_UserId>
      <i_Password>******</i_Password>
      <ActionType>CS</ActionType>
      <XmlData>
        blah blah blah
      </XmlData>
    </wsActionRouter>
  </s:Body>
</s:Envelope>

php response:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header/>
  <soapenv:Body>
    <p287:wsActionRouterResponse xmlns:p287="http://some.junk.url.xxxx.com">
      <p287:wsActionRouterReturn>
        blah blah blah
      </p287:wsActionRouterReturn>
    </p287:wsActionRouterResponse>
  </soapenv:Body>
</soapenv:Envelope>

.NET ответ:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header />
  <soapenv:Body>
    <wsActionRouterResponse xmlns="http://some.junk.url.xxxx.com">
      <wsActionRouterReturn>
        blah blah blah
      </wsActionRouterReturn>
    </wsActionRouterResponse>
  </soapenv:Body>
</soapenv:Envelope>

Почему конверты разные?

php люди особенно жалуются на пространство имен p287 и говорят, что они не могут использовать результаты. Я предполагаю, что они анализируют конверт ответа и не учитывают пространство имен.

1 Ответ

0 голосов
/ 07 марта 2011

Убедитесь, что они используют PHP5 SoapClient, и у них не должно возникнуть проблем с использованием этого результата.

http://us2.php.net/soapclient

...