1

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

有人对此有解决方案吗?我已经用谷歌搜索了几天,任何解决方案都对我有用。也许我忘记了什么...

我的代码有一些例子:

$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);

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

我也尝试为复杂类型创建类,而不是 stdClass,但不起作用。

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

你能帮我吗?您能否提供三种情况(简单数据数组、结构数组和结构数组)的代码示例?谢谢!

4

1 回答 1

6

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

$pCriteria->type = new SoapVar(1, XSD_INT, 'xsd:int');

传递一个数组是类似的,本质上你传递一个 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`

此外,您可以使用 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

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

于 2010-04-19T00:58:48.357 回答