2016-07-29 165 views
1

我使用的是signalr2.2 web應用程序並託管在IIS-8中。在這裏我嘗試使用ARR3.0爲我的應用程序實現負載平衡。在我的服務器場中,我連接了兩臺服務器,並將路由規則設置爲「加權循環」。每個服務器都有一個帶HTML頁面的javascript客戶端。雖然我訪問如預期的要求已經排到任何服務器的HTML頁面,但我在我的html頁面有這個錯誤,signalr沒有獲得連接SignalR 2.2和ARR3.0負載均衡

WebSocket連接到「WS://mydomain.com/signalr /連接運輸=的WebSockets & clientProtocol = 1.5 & connectionToken = x9rAfatyMm3TbqzrYKL1K37Z4tKrUTH7bwNmSItW55Z0ms6pe43YiQGFOmaHMyT%2BpmGz62ukt4tha72vPcJhdqLtIvsQvqvY15oYGv69JjzSuuiSL7v2l%2FccZT6tQa3Z & connectionData =%5B%7B%22name%22%3A%22chathub%22%7D%5D & TID = 1' 失敗:?期間出錯WebSocket握手:意外的響應代碼:400

如果我在我的serverfarm中使此服務器的任何人脫機,signalr工作正常,並且不會引發錯誤。幫助我找到解決方案。

如果我從我的.NET客戶端應用程序通信signalr服務器時,它會拋出下面的錯誤開始請求期間

錯誤。停止連接。

+0

您需要在服務器場中的所有服務器上設置相同的機器密鑰 – janitha000

+0

Hi @ janithat000,我需要澄清的是,在服務器場中實現了機器密鑰更改後,每當我點擊url時,就會在一個服務器和集線器方法調用發生在另一臺服務器上這是路由過程嗎?或者我錯過了什麼?請幫助我。 注意:我正在使用應用程序節點 – Suresh

回答

2

我也有這個問題。更深入地看,錯誤是:The connection id is in the incorrect format。在Google上搜索一下之後,我讀到了某個地方,當運行一個服務器場環境時,這些服務器需要共享相同的機器密鑰,這個機器密鑰可以在IIS中配置。

爲此,請按照下列步驟操作:

  • 打開IIS連接到任何服務器場中的服務器。
  • 在服務器節點上,打開在右側窗格中
  • 在右鍵菜單中計算機密鑰選項,單擊生成密鑰
  • 取消選中兩個確認鍵解密密鑰Generate a unique key for each application選項。
  • 複製生成的兩個關鍵詞(例如粘貼到記事本)
  • 確保在農場所有服務器都共享這個相同的密鑰(ARR的服務器並不需要這個),你可能需要重複上述這些步驟(也許你沒有儘快使用共享配置)。

此外,您需要確保您的應用程序在每個服務器使用相同的身份。例如,選擇您的應用程序節點(或站點節點,如果是這種情況),在右側菜單中選擇基本設置,然後連接爲...。如果選擇的選項是應用程序用戶,那麼您需要檢查如何配置應用程序池。如果它使用網絡服務(與我的一樣),您仍然會遇到問題,因爲每個服務器都使用自己的憑據,但您必須確保它們使用相同的身份。

在我的場景中,我必須創建一個用戶,以訪問服務器場中的每臺服務器,並使應用程序使用同一用戶。只有這樣做後,我的問題纔得到解決。

+0

中的身份驗證,謝謝Alisson。我會嘗試這個,讓你知道 – Suresh

+0

嗨@Alisson,它工作正常,我從來沒有得到任何插座錯誤後。感謝這個信息。但有一點我需要澄清的是,在服務器農場中實現了機器密鑰更改後,每當我點擊url時,就會在一臺服務器上發生連接,並在另一臺服務器上發生集線器方法調用。這是路由過程嗎?或者我錯過了什麼?請幫助我。 注意:我正在使用應用程序節點 – Suresh

+0

@Suresh中的身份驗證,歡迎您。考慮將答案標記爲已接受,如果是這樣的話。 – Alisson