我的公司目前正在從傳統的ASMX web服務轉換到WCF web服務,因爲我們需要改進對WCF可用的複雜類型的處理。連接到WCF Web服務速度非常慢
在調查網頁性能問題的同時,我發現最大的(通過一定幅度的)性能陷阱是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 Web服務連接速度相當慢。
有沒有一種方法來提高連接到WCF Web服務時的性能(相當大)?
更新:
有關WCF客戶端的一些信息。 託管於IIS 7,Windows Server 2008上。 使用BasicHttpBinding(因爲PHP SoapClient不支持更復雜的wsHttpBinding)。 連接正在使用ssl。
此外,通過WCFStorm連接時,連接速度要快得多,導致我相信問題可能出在PHP SoapClient上。
您需要將更詳細的WCF服務配置信息(如基於HTTP的綁定,netTcpBinding或其他)綁定到WCF服務以及它如何託管(如Windows NT服務,IIS 7.5或其他主機應用程序)得到一個很好的答案。另外,您應該將WCF服務與內置的診斷進行聯繫以進行跟蹤活動,因爲您所展示的內容都是往返時間的總和。實際的瓶頸可能不一定是WCF服務。最後,WCF是一個比ASMX更重的框架,所以它通常會有更多的啓動成本。 – 2011-05-17 17:36:08
當我使用WCFStorm連接到相同的服務時,它會更快,所以基於此,我假設問題更多地與PHP SoapClient相比,WCF服務,但我會添加一些關於WCF的更多信息配置了。 – lxalln 2011-05-17 17:49:27
另請參閱:http:// stackoverflow。com/questions/5944067/php-soapclient-constructor-is-very-slow-takes-3-minutes我認爲這可能是一個SoapClient問題。 – CodingWithSpike 2011-05-17 18:20:25