在安装 WSO2EI-6.1.1 以从我的旧 WSO2DSS 迁移到 EI 后,我试图设置一个简单的 php wsdl 汤客户端来从 php 调用“版本”服务,并直接链接到服务 wsdl,我得到以下错误:
php代码:
try {
$client = new SoapClient("http://server-ip:8280/services/Version?wsdl");
$response = $client->getVersion();
var_dump($response);
} catch (SoapFault $fault) {
echo $fault->getMessage();
}
错误:
Fatal error: Maximum execution time of 120 seconds exceeded
好像连接超时了......我试图用 file_get_contents 获得服务 wsdl,结果相同,超时。好吧,有时它的加载时间很糟糕,比如 90-100 秒,但大多数时候它会超时。
$wsdl = file_get_contents("http://server-ip:8280/services/Version?wsdl");
var_dump($wsdl);
我已经在浏览器中测试了链接,并且加载正常。还使用来自 linux 命令行的 curl 进行了测试,它在那里也可以正常加载,因此可以访问链接。
curl -v http://server-ip:8280/services/Version?wsdl
因此,仅当我尝试从 php 中检索 wsdl 时才会发生超时。但是,如果我下载并保存 wsdl 文件并改为在 php 中传递本地 xml 文件,则该服务工作正常并且版本被获取并显示。
try {
$client = new SoapClient("Version.xml");
$response = $client->getVersion();
var_dump($response);
} catch (SoapFault $fault) {
echo $fault->getMessage();
}
因此,问题似乎只是直接从 php 中的服务器获取 wsdl,而服务器和客户端之间的其余通信工作正常。
经过几个小时的搜索,我决定在axis2的配置中尝试nhttp传输transportReceiver
而不是通过传输,问题就解决了。但是,阅读文档时注意到默认传输是直通的,与 nhttp 相比,它在性能方面更好。
那么是错误还是那里导致问题的原因,还是我做错了什么,并且可以在使用直通传输时直接从php中的服务器检索wsdl?
更新:
当我将端口号 9763 用于 http 或 9443 用于 https 而不是 8280 和 8243 来访问服务或服务 wsdl 时,我可以毫无问题地从 php 访问服务或 wsdl。那么任何人都可以向我解释使用端口号 9763 或 8280 通过 http 传输访问服务时的区别是什么?是用9763代替8280处理服务,还是用9443代替8243?当我使用端口 9763 和 9443 时,它还在使用直通传输吗?