2013-04-16 99 views
3

我正在研究一个严重依赖SOAP调用的项目。问题在于加载时间非常长。SOAP方法调用速度极慢

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

现在我做了一些定时和代码的第一部分(发起对象$客户端)需要大约2秒,非常可接受的。但是在调用getDestination时,它会加载大约10秒的加载时间。这与我所称的每个获取或设置方法都是一样的。

此代码是在PHP 5上运行的方法都写在.NET 4.x的

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

编辑:ping统计 10包发送,接收10个数据包,0.0%的分组丢失 往返最小/平均/最大/ STDDEV = 1.086/2.320/3.624/1.157毫秒

+1

如果您ping通目的地,需要多长时间才能响应? –

+0

10包发送,接收10个数据包,0.0%的分组丢失 往返最小/平均/最大/ STDDEV = 1.086/2.320/3.624/1.157毫秒 – user2285451

+1

在情况下,它可以帮助别人在某些时候,我的问题被证明是该DNS解析时间。无论出于何种原因,每次调用都在查找域(位于同一台服务器上)。我将它添加到主机文件,每个呼叫从5秒变为0秒:) –

回答

3

首先,应使使用ini值的soap.wsdl_cache_enabled WSDL缓存或使用SoapClient构造函数的参数$options。这将防止PHP从一次又一次的下载WSDL和加速比将构造(2秒也很长)

提速的方法调用本身,我需要更多的信息。您能否使用wireshark来反思您的应用程序和soap服务器之间的网络通信?

+0

wsdl缓存已启用。我可能可以使用wireshark,但我不确定我应该在寻找什么以及从哪里运行它? – user2285451

+0

你确定wsdl缓存有效吗?看看缓存目录。你看到wsdls吗?那些wsdl的输入必须被下载的外部引用? Wireshark:检查需要多长时间才能完成响应。如果这真的需要10秒,那么服务器性能问题 – hek2mgl

+0

好吧,似乎wsdl缓存不起作用。但是现在这个问题已经解决了,就像2秒钟的时间一样。现在大约需要10秒来加载一个页面。 我使用Wireshark来检查XML,它真的需要很长的时间来回应。它可能是服务器,我不确定。 – user2285451

3

我必须连接到SOAP服务的同一台机器上我的代码类似的问题。这是通过使用http://127.0.0.1/而不是http://localhost/作为url解决的。

+0

这经常发生,因为本地计算机没有用于'localhost'的DNS条目 – Machavity