2008-11-17 119 views
1

我們有一個非常奇怪的問題,我們的應用程序之一是通過使用.net遠程持續查詢服務器,並且應用程序每隔100秒停止查詢一段時間,然後重新開始操作。問題出在客戶端而不在服務器上,因爲應用程序實際上在同一時間查詢多個服務器,並在同一時間停止從所有服務器接收數據。.net遠程停止每隔100秒

回答

0

我從來沒有見過這樣的行爲,但不幸的是這是一個足夠模糊的場景,我想你會很難在這個板子上找到遇到問題的人。這可能與您的應用程序有關。

我認爲你可以做一些調查來幫助你縮小問題的範圍。

  1. 確定它是否實際上是停滯的客戶端或服務器。如果您在確定此問題時遇到問題,請嘗試安裝數據包篩選器並監控流量以查看誰發送了最後一次數據。您可能無法讀取二進制數據,但至少您會了解誰落後。
  2. 一旦確定是客戶端還是服務器造成延遲,請嘗試調試到應用程序並在出現掛起的位置獲取斷點。這應該給你足夠的細節來幫助追蹤問題。或者至少問一個關於SO的更明確的問題。
+0

是的,我知道的是含糊不清,但這是一個老問題(3年),這裏沒有任何機構能夠弄清楚,所以我有興趣看看有人看到了它。問題出在客戶端而不在服務器上 – MichaelT 2008-11-17 15:13:17

3

100秒是一個贈送號碼,因爲它是.Net中webrequest的默認超時時間。

我以前見過PSI(Microsoft Project中的Project Server接口)沒有重寫超時,所以應用了100秒的默認值,並且會終止任何與之通話的時間長度。

您是否有權訪問所有代碼,並確定您已在適用的情況下設置了超時,以便任何默認值都不會在您不知情的情況下應用?

+0

它看起來像一些默認的,但我在談論遠程請求不是一個WebRequest的,並沒有發現任何這樣的defaul在遠程 – MichaelT 2008-11-17 15:10:38

0

應用程序如何編碼以實現持續查詢?它是否處於連續循環?或與Thread.Sleep循環?或者它是否在定時器上?,

首先確定您的系統是否在您的代碼中執行此「觸發」時,如果您期望它或者如果是,並且遠程服務器沒有響應,那麼這將是非常有用的。 ..所以,...

如果您不能在可以調試它的開發環境中重現此問題,那麼,如果可以,我建議您將代碼添加到此循環以寫出日誌文件(或一些其他的持久性機制)每次它「應該」檢查它使用的任何條件來決定是否查詢遠程服務器,然後在問題再次出現時檢查那些日誌...

如果你可以做同樣的事情在你的遠程服務器中,記錄什麼時候服務器收到遠程請求,這將有所幫助...

...哦,是的,只是一個想法,(我不知道你是如何編碼這...),但如果您正在客戶端中使用單獨的線程發出遠程請求,並且該通道正在註冊,並且在該單獨的線程上取消註冊,請確保您解除衝突請求,導致無法在同一臺計算機上兩次註冊相同的端口與此同時... (雖然這應該可能已經在你的客戶提出了一個異常,如果這是問題)