2012-09-06 56 views
2

後WCF服務響應慢我有使用basicHttpBinding的運行在天青實例2個端點的WCF服務。當服務第一次被調用時,響應(這是預期的)需要13-16秒,隨後的請求在150ms和1000ms之間是足夠的,這取決於請求類型(我使用soapUI進行測試)。不到5分鐘空轉(4.0在Azure)

但是,如果我不發送任何請求幾分鐘小於4或5分鐘)服務實例不會出現,因爲它是作爲長期服用截至13日的第一次請求將得到重用+秒。

我已經試過「InstanceContextMode = InstanceContextMode.Single」在我ServiceBehavior(S),但沒有解決問題。

在跟蹤中,我可以看到線程ID變化只要服務響應緩慢。

我也從記錄時的Application_BeginRequest被擊中的方法開始的時間,這似乎是在這些「慢」稱最大延遲客戶端被調用。 我有一些相當大的類代表業務接口,並且使用實體框架來運行在Azure虛擬機上運行的MySQL數據庫。 (雖然我不認爲這必然是一個Azure問題)。

緩慢的反應是相同的我是否調用連接到數據庫操作或只是一個簡單的「Hello World」響應一個複雜的消息類型。

  • 即使該服務的新實例應該採取只要一個IIS重新啓動或應用程序池回收後的初始負載要求?

  • 會做包裝使用靜態類幫助一些神奇? (我不想)。

建成了C#4.0/VS2010專業

回答

1

可以有很多的爲什麼發生這種情況的原因。我建議你從你的WCF服務中的一些tracing開始。與System.ServiceModel源一起

private TraceSource ts = new TraceSource("MyApp"); 

public string GetData(int value) 
{ 
    ts.TraceInformation("GetData called with {0}", value); 

    return string.Format("You entered: {0}", value); 
} 
  • 配置TraceSource在你的web.config:

    • 添加一些記錄使用TraceSource您的應用程序。


    <system.diagnostics> 
        <sources> 
         <source name="MyApp" switchValue="All"> 
         <listeners> 
          <add name="xml" /> 
         </listeners> 
         </source> 
         <source name="System.ServiceModel" switchValue="All" propagateActivity="true"> 
         <listeners> 
          <add name="xml" /> 
         </listeners> 
         </source> 
        </sources> 
        <sharedListeners> 
         <add initializeData="Logs.svclog" type="System.Diagnostics.XmlWriterTraceListener" name="xml" /> 
        </sharedListeners> 
        <trace autoflush="true" /> 
        </system.diagnostics> 
    

    • 打開svclog文件,你就可以查看通過happing在服務的一切,每一個小小的一步需要多長時間的詳細介紹。這應該有助於您指出問題。

    enter image description here

  • +0

    謝謝Sandrino。我確實已經啓用了跟蹤,但我沒有嘗試使用TraceInformation - 我正在使用靜態方法寫入數據庫中的調試表。這就是當你意識到調試方法掩蓋了一個問題 - 它正在放慢我的'Hello World'測試,因爲它正在進行數據庫調用。 所以主要的問題看起來像MySQL閒置。我已經在MySQL連接字符串中設置了最小池大小= 1,並且現在已經將對於任何DB支持的消息在從13-15秒空閒到大約4或5秒之後的響應減少 – AnthonyC