【发布时间】:2018-08-14 14:40:51
【问题描述】:
在安装 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.ini 中检索 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的transportReceiver配置中尝试nhttp传输,而不是通过传输,问题就解决了。但是,阅读文档时注意到默认传输是直通的,与 nhttp 相比,它在性能方面更好。
那么它是一个错误还是那里导致问题的东西,或者我做错了什么,并且可以在使用直通传输时直接从 php 中的服务器检索 wsdl?
更新:
当我为 http 使用端口号 9763 或为 https 使用 9443 而不是 8280 和 8243 来访问服务或服务 wsdl 时,我可以毫无问题地从 php 访问服务或 wsdl。那么任何人都可以向我解释使用端口号 9763 或 8280 通过 http 传输访问服务时有什么区别?是用9763代替8280处理服务,还是用9443代替8243?当我使用端口 9763 和 9443 时,它还在使用直通传输吗?
【问题讨论】: