我们正在使用PHP运行一个soap服务器,目前IP地址是在WSDL文件中进行硬编码以提供操作等。但是,有计划将服务器放在较大的网络上,它可能无法使用指示它自己的IP地址,因此需要允许动态地址。
以下是一些使用此静态IP地址的地方示例。
<wsdl:definitions name="itl_ukmachines" targetNamespace="http://10.10.8.89/InPrServerSys/sp/service.php" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://10.10.8.89/InPrServerSys/sp/service.php" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
和
<wsdl:operation name="MachineHostPowerUpRegistration">
<soap:operation
soapAction="http://10.10.8.89/InPrServerSys/sp/service.php/MachineHostPowerUpRegistration" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
有没有办法让php服务器在启动时用它的当前IP地址替换这些IP地址,或者只是一个可以进入的特殊值,这样就可以了?
答案 0 :(得分:2)
如果您希望客户端能够在不需要配置的情况下使用您的服务,那么无论何时请求它,您都必须动态生成WSDL。
许多平台都支持此类行为。例如,使用Axis:如果您在http://Url/MyService
有服务,那么您还可以在http://Url/MyService?wsdl
访问该服务的WSDL。每次都会生成WSDL。
我不知道您可以使用哪些工具,但即使使用普通的PHP,您也可以轻松实现相同的行为。首先,使用更容易的占位符字符串(例如BaseURL
)替换IP,然后在请求wsdl时,只需从文件系统读取WSDL文件,使用当前实际URL动态替换所有BaseURL
字符串并返回它
根据您作为库/框架使用的内容,可能只需配置一个开箱即用的方法来执行相同的操作,因此请先进行调查。
祝你好运!答案 1 :(得分:0)
另一个干净的解决方案是从客户端覆盖我们的Web服务的位置,例如:
$soapClient->__setLocation('http://www.example.com/soapservice');