2008-12-17 59 views
3

我在相當苛刻的環境中使用WCF。我觀察到的一種行爲是我已經採取的調用冷啓動的方式。當我第一次啓動一個正在調用服務的客戶端時,第一次調用似乎有很多失敗。例如,我可以看到第一次說10個電話通過,然後接下來的200個電話全部失敗。我正在異步地與服務對話。該服務然後運行並響應正常。我可以看到,這是一個端點(可能)問題而不是操作問題,因爲多個不同的操作都會失敗。感覺就像有一個鎖,端點停止並重新設置,然後很好,但我沒有證據支持這一點。WCF冷啓動

服務器端跟蹤中沒有錯誤。我的客戶端日誌顯示很多下列情況除外:

System.ServiceModel.CommunicationException:服務器未提供有意義的回覆;這可能是由於合同不匹配,會話過早關閉或內部服務器錯誤造成的。

我考慮推行平滑算法拉平服務電話因爲往往是他們中的很多在啓動時。有沒有其他人看過類似的行爲?謝謝。

史蒂夫

編輯:該服務是在Windows服務主辦。

編輯:謝謝你的評論傢伙。

我從一開始就設置各種隊列的數字是相當高的。關於如何擴展WCF服務,我有一些很難獲得的知識。我允許2048個併發連接。我已經設置了將ListenBackLog等等

我實現了一個平滑的前1000個呼叫,並似乎得到它。這可能與JIT有關,但我對此沒有證據。目前,我將離開它,看看它是否會再次出現。

回答

2

出於興趣,你如何託管WCF服務器? IIS具有方便的池化(通過NLB如F5),但具有應用程序池回收問題,並且首先由IIS產生(首次需求)應用程序池/域/等導致的延遲。自我託管(Windows服務等)往往是更線性和可預測的性能,尤其是如果(在服務啓動時)你強行加載所有內容,或許向自己提出請求(如果你明白我的意思)。

如果您不需要羣集服務,考慮自收留了它。看看是否有幫助。

1

您是否嘗試過增加排隊的連接數爲終點?可能有10個隊列正在排隊,而.NET CLR正在對您的代碼進行JIT處理,其餘的連接連接都會被拒絕,直到您的代碼開始運行。

0

這是一個較老的話題,但我發現自己處於類似的情況。操作系統聲明

我實現了前1000次調用的平滑,似乎得到它。

究竟他說的「平滑」我做了谷歌搜索,它似乎是一個關鍵詞...

+0

所以,我線斜坡我的電話的速度,使我不會完全意味着什麼在前60秒內鑽孔。 (前1000個電話需要60秒,然後儘可能快地運行......每秒3-4K個電話)。我確實相信我有某個配置問題。此服務不再使用,我還沒有看到此問題再次出現。 – 2009-09-09 18:31:55