SOAP:相同 PHP 代码的相同 WSDL 函数的 2 个不同端点存在问题
SOAP: issues with 2 different endpoint of the same WSDL function for the same PHP code
以下 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
终于找到了2个解决方案。
一个是解决方法,第二个是一个愚蠢的解决方案。
我将首先解释解决方法。根据以下线程使用
http://...?singlewsdl instead of http://...?wsdl
所以“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 解决了我的问题!
以下 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
终于找到了2个解决方案。
一个是解决方法,第二个是一个愚蠢的解决方案。
我将首先解释解决方法。根据以下线程使用 http://...?singlewsdl instead of http://...?wsdl
所以“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 解决了我的问题!