2009-12-01 140 views
0

我正在使用perfmon來檢查我的服務行爲。我所做的是在不同的機器上啓動6個客戶端應用程序實例,並以120個線程(每個客戶端應用程序20個線程)向服務器發送請求。WCF中的服務實例

我已經檢查過計數器和實例的最大數量(我使用PerSession模型並將實例的數量設置爲100)爲12,我認爲奇怪的是我的服務響應時間大約爲120秒......我認爲增加實例數量將導致WCF創建更多實例,因此響應時間會更快。

任何想法爲什麼WCF不會創建更多的服務實例?

感謝帕維爾

回答

0

您可能要參考this article並進行調整,以您的WCF的配置(特別是MAXCONNECTIONS),以獲得您想要連接的數量。

考慮使用諸如http://www.codeplex.com/WCFLoadTest之類的命令來啓動服務。

此外,perfmon只會讓你到目前爲止。如果你想調試WCF服務,你應該看看Windows SDK中的SvcTraceViewer和SvcConfigEditor。

+0

maxConnections屬性?我應該在哪裏應用它?綁定配置? – dragonfly 2009-12-02 10:22:29

0

在你的服務綁定什麼你設置maxconnections?一旦達到限制,呼叫連接將被阻止。

默認爲10我想。

http://msdn.microsoft.com/en-us/library/ms731379.aspx

+0

我使用我的用戶定義的綁定。當我是配置屬性添加到我的綁定配置的GET例外: 無法識別的屬性「MAXCONNECTIONS」 – dragonfly 2009-12-02 10:05:39

+0

我使用HTTP傳輸 – dragonfly 2009-12-02 10:07:48

+0

啊,OK basicHttpBinding的是無連接的,以便好好嘗試一下具有attr屬性。 您是否嘗試過上面提到的遏制marc_s? – MattC 2009-12-02 11:28:17

1

WCF服務默認情況下,節流 - 這是一個服務行爲,它可以輕鬆地調整。

查看MSDN docs on ServiceThrottling

下面是默認設置:

<serviceThrottling 
    maxConcurrentCalls="16" 
    maxConcurrentInstances="Int.MaxValue" 
    maxConcurrentSessions="10" /> 

通過這些設置,就可以輕鬆控制多少會話或併發呼叫可以被處理,你可以確保你的服務器不會被(欺詐)的請求淹沒並跪下。

1

Ufff,最後一次嘗試去理解那個愚蠢的WCF。

我現在所做的是:

  • 創建客戶端,啓動20個線程,每個線程將在循環中的服務請求。服務器上的性能計數器聲稱只有服務對象的2個實例始終創建。平均請求時間約爲40秒(我在代理呼叫之前開始測量,在呼叫返回後結束)。

  • 修改該客戶端以啓動5個線程並啓動該客戶端的4個實例(以模擬前面示例中的20個線程行爲)。性能監視器顯示服務對象的8個實例始終創建。平均請求時間爲20秒。

有人能告訴我發生了什麼事嗎?我認爲服務器存在一個問題,即它不想處理更多的請求,但顯然這是客戶端引起的騷動,不希望發送更多的請求,也許會有某種配置選項,限制客戶端同時發送多個兩個請求...(緩衝區,節流等...)

通道工廠是在每個線程中創建的。