Различные мыльные конверты - один работает, другой терпит неудачу - PullRequest
2 голосов
/ 31 марта 2010

Я делаю идентичный SOAP-запрос, один из которых использует Zend Framework, а другой нет. Zend один не работает, и, похоже, единственное отличие - это пространство имен конверта.

Как устанавливается конверт и почему один из них потерпит неудачу?

Zend Soap Call

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://wsapi" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding">
<env:Body>
<ns1:incomingRequest env:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<username xsi:type="xsd:string">myuser</username>
<password xsi:type="xsd:string">mypass</password>
<request xsi:type="xsd:string">&amp;lt;incoming-requests&amp;gt;&amp;lt;request description="getEmailMessageStatus"&amp;gt;&amp;lt;incoming-data&amp;gt;&amp;lt;email-message messageID="messageID"/&amp;gt;&amp;lt;/incoming-data&amp;gt;&amp;lt;/request&amp;gt;&amp;lt;/incoming-requests&amp;gt;</request>
</ns1:incomingRequest>
</env:Body>
</env:Envelope>

PHP Soap Call

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://wsapi" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:incomingRequest>
<username xsi:type="xsd:string">myuser</username>
<password xsi:type="xsd:string">mypass</password>
<request xsi:type="xsd:string">&lt;incoming-requests&gt;&lt;request description="getEmailMessageStatus"&gt;&lt;incoming-data&gt;&lt;email-message messageID="messageID"/&gt;&lt;/incoming-data&gt;&lt;/request&gt;&lt;/incoming-requests&gt;</request>
</ns1:incomingRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

1 Ответ

1 голос
/ 31 марта 2010

Я понял это.

Оказывается, сервер Soap совместим только с SOAP версии 1.1.

В Zend вы можете указать версию следующим образом:

$client = new Zend_Soap_Client('wsdl url', array('soap_version' => SOAP_1_1));

Это изменило конверт, и сервер Soap начал отвечать как следует.

...