如何从PHP SoapClient向ASP.NET SOAP服务器发送复杂类型?

1 php asp.net web-services soap-client

您好我在将数组,结构和结构数组从PHP发送到ASP.NET SOAP服务器时遇到问题...

有人为此解决了吗?我用Google搜索了几天,任何sollution都适合我.Perphaps我忘了什么......

我的代码有一些例子:

$client = new SoapClient($options);

$pCriteria = new stdClass();
$pCriteria->type=1;
$pCriteria->capacity=4;

//Test 1 (fail):
$resp = $client->GetRooms(array("pCriteria"=>$pCriteria));

//Test 2 (fail):
$resp = $client->GetRooms(array("pCriteria"=>new SoapVar($pCriteria, SOAP_ENC_OBJECT, "TCriteria", "http://www.w3.org/2001/XMLSchema")));

print_r($resp);
Run Code Online (Sandbox Code Playgroud)

我不知道如何编写需要一系列TCriteria(TCriteria [],TCriteria_Array类型)的函数...我已经尝试发送原始数组,一个带SOAP_ENC_ARRAY编码和TCriteria_Array类型的SoapVar,......但它不起作用(SOAP服务器变得不可用,需要重新启动).

我也试过为复杂类型创建类,而不是stdClass,但是没有工作.

我不知道问题出在哪里.服务器管理员无法帮助我,我没有在互联网上找到任何解决方案.我有点绝望嘿嘿.

你能帮我吗?你能提供三种情况的代码样本(简单数据数组,结构和结构数组)吗?谢谢!

Gab*_*abe 6

我有一个类似的情况,PHP Soap Client使用WSDL 2.0与.NET Soap Server通信.这是我发现的一件事:将信息传递给服务器时,必须将变量显式定义为SoapVar对象.因此,在上面的示例中,将其更改为:

$pCriteria->type = new SoapVar(1, XSD_INT, 'xsd:int');
Run Code Online (Sandbox Code Playgroud)

传递数组是类似的,实际上你传递了一个SoapVars数组:

$pCriteria->type = array(new SoapVar(1, XSD_INT, 'xsd:int'), new SoapVar(2, XSD_INT, 'xsd:int', new SoapVar(3, XSD_INT, 'xsd:int'));`enter code here`
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用SoapClient的几个内置函数来获取有关可能错误的一些额外反馈.

$client->__getLastRequest() //To display the XML that you sent to the server
$client->__getLastResponse() //to display the XML that is sent in response to your request
Run Code Online (Sandbox Code Playgroud)

如果您可以获得预期的WSDL格式的副本,则可以使用上述命令的响应来确定出现了什么问题.通常,您可以从传递给SoapClient的URL访问它.因此,例如,如果WSDL服务URL是http://example.com/webservices/wvrgroupservice.asmx?WSDL,请输入http://example.com/webservices/wvrgroupservice.asmx以查看函数和期望的XML.服务器.