SOAP: проблемы с двумя разными конечными точками одной и той же функции WSDL для одного и того же кода PHP - PullRequest
0 голосов
/ 01 июля 2018

Следующие 2 WSDL работают нормально при тестировании с приложением SOAP UI.

Я получаю два разных вывода при тестировании с одинаковым кодом при вызове обоих WSDL.

Но я не могу понять, почему причина. Кто-нибудь может подсказать, как исправить эту проблему? WSDL разработаны на C #. Код, который я использую для вызова, - это PHP 5.6

Мы переходим с одного сервера на облачный сервер. Существующая конечная точка сервера работает нормально. Но в конечной точке облачного сервера его нет.

$url = <URL>

 $context = stream_context_create(
              array(
                 'ssl' => array(
                        'verify_peer' => false,
                        'verify_peer_name' => false,
                        'allow_self_signed' => true,            
                ),
                'http'=>array(
                        'user_agent' => 'PHPSoapClient'
                )
            ));



 $client = new SoapClient($url,
            array(
                'stream_context' => $context,
                'trace' => 1,
                'soap_version'   => SOAP_1_1,
                'style' => SOAP_DOCUMENT,
                'encoding' => SOAP_LITERAL,
                'cache_wsdl' => WSDL_CACHE_NONE,
                'ssl_method ' => 
  array(SOAP_SSL_METHOD_TLS,SOAP_SSL_METHOD_SSLv2,SOAP_SSL_METHOD_SSLv3),                               
            ));            

 var_dump($client);

Если я передаю URL как "http://www.postaplus.net/APIService/PostaWebClient.svc?wsdl", я получаю следующий объект.

object(SoapClient)[1]
 public 'trace' => int 1
 public '_stream_context' => resource(2, stream-context)
 public '_soap_version' => int 1
 public 'sdl' => resource(8, Unknown)

Но если я передаю URL как "http://132.145.10.102:802/APIservice/postawebclient.svc?wsdl", я получаю следующую ошибку.

( ! ) Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: <message> 'IPostaWebClient_Pickup_Creation_InputMessage' in C:\wamp64\www\soap_project\soap_obj.php on line 30
( ! ) SoapFault: SOAP-ERROR: Parsing WSDL: <message> 'IPostaWebClient_Pickup_Creation_InputMessage' already defined in C:\wamp64\www\soap_project\soap_obj.php on line 30
Call Stack
#   Time    Memory  Function    Location
1   0.0006  243136  {main}( )   ...\soap_obj.php:0
2   0.0007  246904  SoapClient ( )  ...\soap_obj.php:30

1 Ответ

0 голосов
/ 02 июля 2018

Наконец-то найдено 2 решения.

Один - обходной путь, а второй - глупое решение.

Сначала я объясню работу. Согласно следующей теме использования http: // ...? Singlewsdl вместо http: // ...? Wsdl

https://social.msdn.microsoft.com/Forums/en-US/db34ca67-cf57-4938-9657-cafd1edc4222/version-9-soap-errors-while-parsing-schema?forum=BingAds

Так что "http://www.postaplus.net/APIService/PostaWebClient.svc?singlewsdl" отлично работает.

Вторым и глупым решением является использование URL с учетом регистра !!

Изменение URL с http://132.145.10.102:802/APIservice/postawebclient.svc?wsdl на http://132.145.10.102:802/APIservice/PostaWebClient.svc?wsdl решил мою проблему!

...