在WSDL文件中为服务提供者使用动态IP地址

时间:2015-04-23 10:44:27

标签: php web-services soap wsdl

我们正在使用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地址,或者只是一个可以进入的特殊值,这样就可以了?

2 个答案:

答案 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');