本地 WSDL 也可能把 SoapClient 发到网络上
当本地服务定义仍混用内部与外部 proxy 路径时,请顺着 WSDL 与 XML Schema 的传递式导入继续追查。
本地的 service.wsdl 仍可能让 SoapClient 在构造期间拉取远程文档。把第一个文件放到本地,只消除了那一次下载:
local service.wsdl
→ internal Common.xsd
→ external Types.xsd
→ another schema location
从第一次失败的获取开始查,且要在第一次 SOAP 业务调用之前。列出每一处 WSDL 导入和 schema location,也包括它们随后引用的文档。保留用于解析每个相对引用的基础 URL 或路径。把内部主机与确实需要外部 proxy 的资源区分开。
显式的 SoapClient proxy 可能让内部 schema 经由 DNS 视图或访问策略不同的中间层发出。进程级的 no_proxy 变量并不能证明这条加载路径会读取它。请使用所用 PHP 版本中有文档的选项;用环境变量给选项命名,并不会产生按导入区分的开关。
要把定义完全部署到本地,应取得整套依赖的已批准版本,把相关导入位置改为本地包,并保留各自的相对路径基准。这些文档要一起纳入版本管理,以免新的根 WSDL 用到过期类型。
不要改动 namespace 标识符。它们看起来像 URL,但标识的是 schema 词汇表,而不是告诉加载器从哪里取文件。替换它们可能改变服务契约。
在记录缓存状态的前提下重新测试构造:缓存下来的定义可能掩盖某台机器上缺失的依赖。服务 URL 的覆盖只在更晚的阶段生效,自定义 __doRequest() 处理的是 SOAP 交换;不能假定二者会改写或拦截构造期间的全部 schema 下载。