[英]Consuming Microsoft .NET SOAP server datasets in PHP
我已经阅读了关于Stackoverflow的所有问题以及我能找到的每篇Google文章。
我需要使用使用数据集的Microsoft系统提供的SOAP API。
我已经意识到我需要这样做:
$soapClient = new soapclient($this->wsdlUrl,array('trace'=>true));
$soapResult = $soapClient->GetScheduledSectors();
$xmlResult = $soapClient->__getLastResponse();
$xml = simplexml_load_string($xmlResult, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");
而不是使用这种方法:
$result = $soapClient->GetScheduledSectors();
$xml = simplexml_load_string($result->GetScheduledSectorsResult->any)
因为simplexml无法解析结果,因为它缺少肥皂响应头。
但是,即使第一种方法没有引发任何错误,我也留下了一个空对象,如下所示:
SimpleXMLElement Object
(
[Body] => SimpleXMLElement Object
(
)
)
我真的找不到任何关于如何使用Microsoft SOAP服务的连贯示例。 我试过阅读MSDN的东西,但它专门针对他们的专有库,所以对其他人没用。
尝试了nusoap之后,我仍然将头撞在墙上。 我最终决定手动解析Microsoft XML。
幸运的是,有一个脚本( 这里 )让我省去了从头开始做这件事的麻烦。
该脚本起作用并将Microsoft数据集响应输出到我可以使用的数组中。
我对这种解决方案感到非常不满意,因为访问数组将以一种硬编码的方式进行,但是坦率地说,在我努力寻找替代解决方案的努力之后,我认为这是必不可少的。
在遇到SOAP问题时,我可以使用一些工具,
SoapUI这是一个很棒的工具,它从WSDL中读取服务定义并为您创建存根签名。 当您自己的客户端遇到问题时,您可以快速测试命中服务,并检查响应和有效负载样本。
TCPMon有时你需要查看线路上的数据。 通过SoapUI运行请求(有效),然后通过SoapClient PHP程序获取相同的有效负载并在传输过程中观察它们可以帮助您隔离PHP代码中的问题。
NuSoap当所有其他方法都失败时...... NuSoap是SoapClient之前的版本,但即使在SoapClient到达场景之后,NuSoap仍然可用于SoapClient不切割它的边缘情况。 还有一些函数(例如Soap Attachements?)NuSoap实现了SoapClient没有的功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.