php – 即使wsdl中的IP地址错误,为什么web服务返回数据?

前端之家收集整理的这篇文章主要介绍了php – 即使wsdl中的IP地址错误,为什么web服务返回数据?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一个 PHP文件充当web服务,并且有wsdl文件,其中有以下行:
<service name="ClientService">
    <documentation></documentation>
    <!-- partie 8 : Port -->
        <port name="ClientPort" binding="typens:ClientBinding">
            <soap:address location="http://192.168.1.12/imfmobile/webservice/InterfaceTransfererClient.PHP"/>
        </port>
</service>

问题是webservice和wsdl所在的计算机的IP地址是192.168.1.123,我从PHP Web服务调用函数获取数据!那么< soap:地址标签不是必需的吗?

简短回答:地址只是一个指示(对于生成代码和配置的开发人员或工具),可以访问服务的位置以及期望的URL类型.

答案很长:如果你看一下WSDL schema,你会发现port元素被定义为只包含一个名字和绑定属性,所以这就足够了.您的服务元素看起来像这样,它在技术上是正确的:

<service name="ClientService">
   <port name="ClientPort" binding="typens:ClientBinding" />
</service>

但是port也被定义为一个可扩展元素,它允许将其他命名空间中的元素添加到它(例如< soap:address>).

通常(是的!)< soap:地址>应该说明实际服务所在的位置,但不幸的是,由于不同的因素,它并不总是如此:

>某些服务器地址已更改,人们忘记更新WSDL文件(对于contract first创建的WSDL);
> WSDL是由框架(contract last)自动生成的,框架无法知道Web服务暴露在哪个外部地址,因此它添加了一些默认地址和它知道的东西(如本地IP或机器名);
>你有一个中央WSDL,它描述了3个相同的部署服务(一个在DEV中,一个在UAT中,一个在PROD中),你不能为所有3个服务添加一个地址;
>等等

WSDL主要用于生成客户端代码.完成后,您不再需要WSDL,只需要一个URL即可连接到已部署的Web服务.该地址作为工具添加一些默认配置的提示,稍后您将替换为调用的REAL地址.

理想情况下,WSDL中的内容应该等于真实地址,但是这些信息通常会通过维护任务而落后,而事情最终会过时.您应该指定一个作为提示,即使它只是< soap:address location =“http://localhost/imfmobile/webservice/InterfaceTransfererClient.PHP”/>.

猜你在找的PHP相关文章