gpt4 book ai didi

php - 为什么wsdl中的IP地址错误,webservice还是返回数据?

转载 作者:可可西里 更新时间:2023-11-01 01:06:22 25 4
gpt4 key购买 nike

有一个PHP文件充当 webservice ,还有 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所在计算机的IP地址和 wsdl reside 是 192.168.1.123 ,我从 PHP 调用函数时获取数据网络服务 ! <soap:address也是如此不需要标记?

最佳答案

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

长答案:如果您查看 WSDL schema , 你会看到 port元素被定义为只包含一个 namebinding属性,这样就足够了。您的服务元素可能看起来像这样并且在技术上是正确的:

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

但是port也被定义为一个可扩展元素,允许将来自其他 namespace 的元素添加到它(如 <soap:address> )。

通常(是的!)<soap:address>应该说明真正的服务在哪里公开,但不幸的是,由于不同的因素,它并不总是这样发生,例如:

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

WSDL 主要用于生成客户端代码。一旦完成,您就不再需要 WSDL,您只需要一个 URL 来连接到已部署的 Web 服务。地址在那里作为工具添加一些默认配置的提示,您稍后可以将其替换为调用的真实地址。

理想情况下,WSDL 中的内容应与真实地址相同,但这些信息通常会在维护任务中丢失,最终会过时。你应该指定一个作为提示,即使它只是 <soap:address location="http://localhost/imfmobile/webservice/InterfaceTransfererClient.php"/> .

关于php - 为什么wsdl中的IP地址错误,webservice还是返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9992847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com