连接到WCF Web服务的速度令人费解

时间:2011-05-17 17:07:12

标签: php wcf web-services soap

我的公司目前正在从传统的ASMX Web服务转换到WCF Web服务,因为我们需要改进WCF可用的复杂类型的处理。

在调查网页的性能问题时,我发现最大(有些边缘)性能下沉是与WCF服务的初始连接。当我说初始时,我的意思是下面的代码,每次调用它时,页面刷新就足以得到一个缓慢的连接:

$client = new SoapClient("<address-to-webservice>",
array('features' => SOAP_SINGLE_ELEMENT_ARRAYS));

对此Web服务中的方法的后续调用很快,但连接速度莫名其妙。

在同一页面上有一个ASMX服务的连接,该服务托管在同一台服务器上,连接速度要快得多。

Connection to WCF Webservice took 1.6509809494019 seconds //(this is just calling new SoapClient)
Connection to ASMX Webservice took 0.24430394172668 seconds

Calling ASMX->Method
ASMX->Method returned in 0.011564970016479 seconds

Calling WCF->Method1
WCF->Method1 returned in 0.011118173599243 seconds

Calling WCF->Method2
WCF->Method2 returned in 0.0038959980010986 seconds

Calling WCF->Method3
WCF->Method3 returned in 0.0041651725769043 seconds

这是在内部网络上运行,显然从外部连接速度更慢。正如您所看到的,WCF Webservice连接速度要慢得多。

连接到WCF Web服务时,有没有办法(显着)提高性能?

更新:

有关WCF客户端的一些信息。 在IIS 7,Windows Server 2008上托管。 使用BasicHttpBinding(因为PHP SoapClient不支持更复杂的wsHttpBinding)。 连接使用ssl。

此外,当通过WCFStorm连接时,连接速度要快得多,这让我相信这个问题可能与PHP SoapClient有关。

2 个答案:

答案 0 :(得分:1)

根据您在问题中的WCFStorm评论,只是一个猜测,可能是ASMX版本生成的WSDL可能比服务的WCF版本更容易解析。我不知道PHP SoapClient是否从WSDL动态创建代理,但如果ASMX与WCF生成的WSDL明显不同,那么可能会导致最初的瓶颈。

答案 1 :(得分:1)

我们的问题已通过在php.ini中修复soap.wsdl_cache_dir的位置来解决。

我们的网站是在Windows机器上托管和开发的,因此默认目录'/ tmp'不起作用。将此更改为C:\ Windows \ Temp意味着虽然初始连接仍然很慢,但所有后续请求都很快。

我们现在将研究使用更常见的预热脚本解决方案。