【发布时间】:2011-05-17 17:07:12
【问题描述】:
我的公司目前正在从传统的 ASMX 网络服务过渡到 WCF 网络服务,因为我们需要改进对 WCF 提供的复杂类型的处理。
在调查网页的性能问题时,我发现最大的(在一定程度上)性能坑是与 WCF 服务的初始连接。当我说初始时,我的意思是以下代码,每次调用时,页面刷新就足以导致连接缓慢:
$client = new SoapClient("<address-to-webservice>",
array('features' => SOAP_SINGLE_ELEMENT_ARRAYS));
对该网络服务中方法的后续调用很快,但连接速度却莫名其妙。
在同一页面上,有一个与托管在同一服务器上的 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 网络服务时,有没有办法(显着)提高性能?
更新:
有关 WCF 客户端的一些信息。 托管在 IIS 7、Windows Server 2008 上。 使用 BasicHttpBinding(因为 PHP SoapClient 不支持更复杂的 wsHttpBinding)。 连接正在使用 ssl。
此外,当通过 WCFStorm 连接时,连接速度要快得多,这让我相信问题可能出在 PHP SoapClient 上。
【问题讨论】:
-
您需要提供有关 WCF 服务的更详细的配置信息,例如绑定(即基于 HTTP 的绑定、netTcpBinding 或其他)以及它是如何托管的(即 Windows NT 服务、IIS 7.5 或另一个主机应用程序)以获得一个好的答案。此外,您应该将 WCF 服务与用于跟踪活动的内置诊断连接起来,因为您所呈现的只是总往返时间。实际的瓶颈可能不一定是 WCF 服务。最后,WCF 是一个比 ASMX 更“重量级”的框架,因此它通常会有更多的启动成本。
-
当我使用 WCFStorm 连接到同一个服务时,速度要快得多,因此基于此,我假设问题更多与 PHP SoapClient 相关,而不是 WCF 服务,但我会添加更多关于 WCF 配置的信息。
-
另见:stackoverflow.com/questions/5944067/… 我认为这可能是 SoapClient 问题。
标签: php wcf web-services soap