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

在PHP中使用Microsoft.NET SOAP服务器数据集,php,soap,dataset,Php,Soap,Dataset,我已经阅读了关于Stackoverflow的每一个问题,以及我能找到的每一篇谷歌文章 我需要使用由使用数据集的Microsoft系统提供的SOAP API 我已经到了我觉得我需要这样做的地步: $soapClient = new soapclient($this->wsdlUrl,array('trace'=>true)); $soapResult = $soapClient->GetScheduledSectors(); $xmlResult = $soapClient-&g

我已经阅读了关于Stackoverflow的每一个问题,以及我能找到的每一篇谷歌文章

我需要使用由使用数据集的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无法解析结果,因为它缺少soap响应头

然而,即使第一个方法没有抛出任何错误,我仍然会留下一个空对象,如下所示:

SimpleXMLElement Object
(
    [Body] => SimpleXMLElement Object
        (
        )
)

我真的找不到任何关于如何使用Microsoft SOAP服务的连贯示例。我试着阅读MSDN的内容,但它专门针对他们的专有库,因此对其他人没有什么用处。

遇到SOAP问题时,我会使用一些工具

  • 它是一个很好的工具,可以从WSDL读取服务定义并为您创建存根签名。您可以在自己的客户遇到问题时快速测试并检查响应和示例有效负载

  • 当事情变得艰难时,有时你必须查看通过网络传输的数据。通过SoapUI运行请求(有效),然后通过SoapClient PHP程序运行相同的负载,并在传输过程中观察它们,可以帮助您隔离PHP代码中的问题

  • 当一切都失败了。。。NuSoap是SoapClient之前的版本,但即使在SoapClient出现在场景中,NuSoap对于SoapClient没有剪切它的边缘情况仍然很有用。还有一些功能(如Soap Attachements?)是SoapClient没有的NuSoap实现


  • 在试过nusoap之后,我的头仍然撞在墙上。我最终决定手动解析MicrosoftXML

    幸运的是,有一个脚本()帮我省去了从头开始做这件事的麻烦

    该脚本工作并将Microsoft数据集响应输出到我可以使用的数组中


    我觉得这个解决方案很糟糕,因为访问阵列将以硬编码的方式完成,但坦率地说,在我努力寻找替代解决方案之后,我认为这是一个必要的缺点。

    您能够共享wsdl url吗?遗憾的是,除了服务器白名单之外,它是403。这是为一家商业航空公司准备的。你有没有试过用一个像这样的非php客户端来实现它?我经常觉得这很有帮助。您还可以通过使用或类似的代理请求来切断PHP和服务之间的通信;但问题是,如果我对其使用simplexml\u load\u字符串,那么我会在底部得到空元素(XML不是空的)。如果使用soap结果对象,则会得到无效的XML,因为Microsoft的数据集,simplexml无法解析该XML。我需要找到一种方法来解析整个XML字符串,或者手动解析soap结果。我不想建议这样做,但是,有时候它会绕过SoapClient的限制。