【问题标题】:How to send complex types from PHP SoapClient to ASP.NET SOAP server?如何将复杂类型从 PHP SoapClient 发送到 ASP.NET SOAP 服务器?
【发布时间】:2010-04-12 09:57:15
【问题描述】:

您好,我在将数组、结构和结构数组从 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,但不起作用。

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

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

【问题讨论】:

  • 意外被否决 - 我该如何撤消?

标签: php asp.net web-services soap-client


【解决方案1】:

我遇到了类似的情况,一个 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。

【讨论】:

  • 谢谢,我发现传递带有原始 php 变量的关联数组或嵌套数组可以正常工作。你的解决方案也很好;)
猜你喜欢
  • 2014-07-05
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
  • 2012-11-03
相关资源
最近更新 更多