2013-03-13 142 views
0

我的服務器上有IIS 7.5託管的WCF服務。我在我的服務中使用了Entity framework 5.0。WCF性能:連接到WCF服務需要很長時間

當我通過添加服務引用和在站點中創建客戶端從本地系統調用該服務時,大約需要40秒才能獲得響應。我試着調用我在本地的同樣的服務,這裏只需要3-4秒。

將參考這是對服務器這是對本地系統的現場服務後,綁定和端點的網絡配置添加的樣子:

<binding name="WSHttpBinding_IMyWCFService" closeTimeout="00:01:00" 
      openTimeout="00:01:00" receiveTimeout="00:50:00" sendTimeout="00:01:00" 
      bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
      maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" 
      messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
      allowCookies="false"> 
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
      maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <reliableSession ordered="true" inactivityTimeout="00:10:00" 
      enabled="false" /> 
      <security mode="Transport"> 
      <transport clientCredentialType="None" proxyCredentialType="None" 
       realm="" /> 
      <message clientCredentialType="Windows" negotiateServiceCredential="true" /> 
      </security> 
     </binding> 




<endpoint address="https://<url>/MyWCFService.svc/soap" 
     binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMyWCFService" 
     contract="MerchantService.IMyWCFService" name="WSHttpBinding_IMyWCFService" /> 

首先我認爲這是一個問題實體框架。但後來我使用Entity框架分析器檢查了該方法的執行時間。它幾乎不需要1秒鐘。

也當我打電話的服務,它需要添加一個標題,我添加。

那麼,它需要40秒的時間。而且它的啓動速度並不慢,或者只是第一次花時間。它總是需要這麼多時間。

網絡速度可能是導致此延遲的原因。如果是的話,達到什麼程度?

該服務返回一個列表List。這可能是一個問題,我們不應該返回列表。有什麼可以替代的?

此外,Entity框架是否每次請求到達時都建立與數據庫的連接,以及數據庫連接是否需要時間。有可能嗎?

請幫忙。 感謝

回答

1

首先我使用Code first方法。爲了提高性能,我嘗試預生成視圖,以便可以減少第一次生成視圖的開銷。但我認爲意見不起作用。 所以,我試圖切換到數據庫優先的方法,然後我生成的意見,並上傳到遠程服務器的構建。現在時間從40秒減少到10秒。另外我試圖在WCF服務啓動時打開數據庫連接。再次將時間縮短到5秒。

0

我建議隔離一步

1)問題的步驟要了解網絡帶寬的問題,只是舉辦一個簡單的服務返回像整數或字符串一些簡單的值,並檢查其響應時間。

2)如果第1步中的響應時間大大提高,請查看數據庫或列表問題。

+0

嗨Deepansh,謝謝你的回覆。網絡可能是一個增加時間的問題,但最快的n/w我可以測試我的服務,我發現時間是25秒。我發現問題出在EF上。請看答案。 – Deeps 2013-03-14 04:49:10

0

我懷疑你的問題是證書協商。有一種簡單的方法來驗證這一點,只需在沒有安全性的情況下在同一服務器上運行服務(如果允許的話)。

一種可能的補救措施是通過將negotiateServiceCredential屬性設置爲false來消除SOAP憑證協商。您需要確保首先爲您的域啓用了Kerberos。

+0

嗨保羅。問題在於EF。請看我的答案。感謝您的回覆。 – Deeps 2013-03-14 04:47:23