0

在安装 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 时,它还在使用直通传输吗?

4

1 回答 1

0

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

于 2018-03-11T12:20:20.953 回答