繁体   English   中英

在PHP中使用Microsoft .NET SOAP服务器数据集

[英]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问题时,我可以使用一些工具,

  1. SoapUI这是一个很棒的工具,它从WSDL中读取服务定义并为您创建存根签名。 当您自己的客户端遇到问题时,您可以快速测试命中服务,并检查响应和有效负载样本。

  2. TCPMon有时你需要查看线路上的数据。 通过SoapUI运行请求(有效),然后通过SoapClient PHP程序获取相同的有效负载并在传输过程中观察它们可以帮助您隔离PHP代码中的问题。

  3. NuSoap当所有其他方法都失败时...... NuSoap是SoapClient之前的版本,但即使在SoapClient到达场景之后,NuSoap仍然可用于SoapClient不切割它的边缘情况。 还有一些函数(例如Soap Attachements?)NuSoap实现了SoapClient没有的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM