通过传输

时间:2018-03-06 16:43:19

标签: wso2 wso2esb axis2 wso2ei

安装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,而服务器和客户端之间的其余通信工作正常。

经过几个小时的搜索,我决定尝试在{2}的transportReceiver配置中进行nhttp传输,而不是通过传输,问题就解决了。然而,阅读文档时注意到默认传输是通过的,与nhttp相比,它在性能方面更好。

这是一个错误或导致问题的东西,或者我做错了什么,并且可以在使用传递传输时直接从php中的服务器检索wsdl?

更新

当我使用端口号9763用于http或9443用于https而不是8280和8243来访问服务或服务wsdl时,我可以从php访问服务或wsdl没有问题。那么有人可以向我解释当使用端口号9763或8280通过http传输访问服务时的差异吗?是否可以使用9763而不是8280来处理服务或使用9443而不是8243?当我使用端口9763和9443时,它仍在使用passthru传输吗?

1 个答案:

答案 0 :(得分:0)

所有WSO2服务器都有两种类型的传输 - servlet和passthrough(或nhttp)。这些用于不同的目的。默认情况下,Servlet传输通过端口9443和9763公开。这是管理服务和管理控制台使用的端口。版本服务也使用相同的端口。对于您编写和部署的服务,它们通过8280和8243端口公开。要回答您的问题,对于此服务,您必须使用9763或9443端口。您将通过servlet传输访问Version服务,而不是通过传输。