在安装WSO2EI-6.1.1以从旧的WSO2DSS迁移到EI之后,我尝试设置一个简单的php汤客户端,以便使用指向service wsdl的直接链接从php调用"Version“服务,并得到以下错误:
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文件并将本地xml文件传递到php中,则服务可以正常工作,版本将被获取和显示。
try {
$client = new SoapClient("Version.xml");
$response = $client->getVersion();
var_dump($response);
} catch (SoapFault $fault) {
echo $fault->getMessage();
}因此,问题似乎仅仅是从php中的服务器直接获取wsdl,而服务器和客户端之间的其余通信工作正常。
经过几个小时的搜索,我决定尝试axis2的axis2配置中的nhttp传输,而不是通过传输,问题就解决了。但是,在阅读文档时,需要注意的是,默认传输是经过的,与nhttp相比,它的性能更好。
那么,是bug还是导致问题的原因,还是我做错了什么,在使用传递传输时直接从php中的服务器检索wsdl是可能的?
更新:
当我将端口号9763用于http,9443用于https,而不是使用8280和8243来访问服务或服务wsdl时,我可以在没有问题的情况下从php访问服务或wsdl。因此,请任何人向我解释一下,当使用端口编号9763或8280通过http传输访问服务时,有什么不同?用9763代替8280来处理服务,还是用9443代替8243?当我使用9763和9443端口时,它还在使用passthru传输吗?
发布于 2018-03-11 12:20:20
所有WSO2服务器都有两种类型的传输 - servlet和pass身(或nhttp)。它们被用于不同的目的。Servlet传输默认在端口9443和9763上公开。这是管理服务和管理控制台使用的端口。版本服务也使用相同的端口。对于您编写和部署的服务,它们公开的端口超过8280和8243端口。要回答您的问题,对于此服务,您必须使用9763或9443端口。您将通过servlet传输访问版本服务,而不是传递传输。
https://stackoverflow.com/questions/49135930
复制相似问题