【问题标题】:SOAP method call extremely slowSOAP 方法调用极慢
【发布时间】:2013-04-16 08:19:25
【问题描述】:

我正在从事一个严重依赖 SOAP 调用的项目。问题是加载时间非常长。

$client = new SoapClient("https://link.to.wsdl");
$client = $client->GetDestination(array(
"parameter1" => $param1,
"parameter2" => $param2
));

现在我做了一些计时,代码的第一部分(启动一个对象 $client)大约需要 2 秒,非常可以接受。但是当调用 getDestination 时,它会增加大约 10 秒的加载时间。这适用于我调用的每个 get 或 set 方法。

这段代码在php 5上运行。方法是用.net 4.x编写的

有谁知道这是为什么以及如何解决?

编辑:ping 统计信息 发送 10 个数据包,接收 10 个数据包,0.0% 数据包丢失 往返 min/avg/max/stddev = 1.086/2.320/3.624/1.157 ms

【问题讨论】:

  • 如果ping目的地,需要多长时间响应?
  • 传输 10 个数据包,接收 10 个数据包,0.0% 数据包丢失往返 min/avg/max/stddev = 1.086/2.320/3.624/1.157 ms
  • 如果它在某些时候对某人有所帮助,我的问题原来是 DNS 解析时间。无论出于何种原因,每个调用都在查找域(位于同一台服务器上)。我将它添加到主机文件中,每次调用从 5 秒变为 0 秒 :)

标签: php performance soap


【解决方案1】:

首先,您应该使用soap.wsdl_cache_enabled ini 值或使用SoapClient 构造函数的$options 参数启用WSDL 缓存。这将阻止 PHP 一次又一次地下载 wsdl 并加速构造函数(2 秒也很长)

为了加速方法调用本身,我需要更多信息。你能用wireshark 来检查你的应用和soap服务器之间的网络通信吗?

【讨论】:

  • 已启用 wsdl 缓存。我也许可以使用wireshark,但我不确定我应该寻找什么以及应该从哪里运行它?
  • 您确定 wsdl 缓存有效吗?看看缓存目录。你看到wsdls吗?那些wsdl的导入外部参考是必须下载的吗? Wireshark:检查传递响应需要多长时间。如果这确实需要 10 秒,那么服务器存在性能问题
  • 好吧,看来 wsdl 缓存不起作用。但是这个问题现在已经解决了,它就像 2 秒的时间一样被切断了。现在加载一个页面大约需要 10 秒。我使用 Wireshark 来检查 xml,它确实需要很长时间才能响应。可能是服务器,我不确定。
  • 看起来是服务器。你有我的网址吗?如果您主要使用读取操作,则可以在您和服务器之间使用 HTTP 代理
  • 谢谢 - 对我来说,缓存已启用,但缓存目录无效。解决这个问题将时间从 20 秒减少到 0 秒。
【解决方案2】:

我在连接到与我的代码相同的机器上的 SOAP 服务时遇到了类似的问题。它是通过使用http://127.0.0.1/ 而不是http://localhost/ 作为url 解决的。

【讨论】:

  • 这通常是因为本地机器没有localhost的DNS条目
【解决方案3】:
猜你喜欢
  • 2014-08-09
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多