2011-05-17 177 views
2

我的公司目前正在從傳統的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上。

+0

您需要將更詳細的WCF服務配置信息(如基於HTTP的綁定,netTcpBinding或其他)綁定到WCF服務以及它如何託管(如Windows NT服務,IIS 7.5或其他主機應用程序)得到一個很好的答案。另外,您應該將WCF服務與內置的診斷進行聯繫以進行跟蹤活動,因爲您所展示的內容都是往返時間的總和。實際的瓶頸可能不一定是WCF服務。最後,WCF是一個比ASMX更重的框架,所以它通常會有更多的啓動成本。 – 2011-05-17 17:36:08

+0

當我使用WCFStorm連接到相同的服務時,它會更快,所以基於此,我假設問題更多地與PHP SoapClient相比,WCF服務,但我會添加一些關於WCF的更多信息配置了。 – lxalln 2011-05-17 17:49:27

+0

另請參閱:http:// stackoverflow。com/questions/5944067/php-soapclient-constructor-is-very-slow-takes-3-minutes我認爲這可能是一個SoapClient問題。 – CodingWithSpike 2011-05-17 18:20:25

回答

1

我們的問題已通過在php.ini中修復soap.wsdl_cache_dir的位置得到解決。

我們的網站是在Windows機器上託管和開發的,所以'/ tmp'的默認目錄不起作用。將其更改爲C:\ Windows \ Temp意味着儘管初始連接仍然很慢,但所有後續請求都很快。

我們現在來看看使用更常見的熱身腳本解決方案。

1

只需根據您在問題中的WCFStorm註釋進行猜測,可能是由ASMX版本生成的WSDL可能比WCF版本的服務更容易解析。我不知道PHP SoapClient是否從WSDL動態創建代理,但是如果由ASMX與WCF生成的WSDL顯着不同,那麼可能會導致最初的瓶頸。