2017-03-16 62 views
0

我們有一個帶有SignalR hub的asp.net mvc應用程序,該應用程序駐留在IIS上。我們將其命名爲SignalR Service。一些內部服務可以向SignalR服務發送請求以通知外部客戶關於任何事件。外部客戶端看到與SignalR服務的連接狀態很重要。必須儘快通知客戶SignalR Service不可用,以便客戶知道他們不會收到任何通知。在IIS上停止站點後,SignalR客戶端不會斷開連接

當我在IIS上停止SignalR服務時,問題就開始了。由於SignalR Service的進程在停止客戶端的連接之後不存在丟棄。因此,客戶端無法識別該站點已停止。由於網站已停止,因此內部服務無法訪問,因此無法向外部客戶端發送任何通知。

因此,預計所有服務的行爲,但它不符合我們的業務邏輯。

當在IIS上停止時,我們可以做些什麼來使SignalR服務斷開連接?這個工作流程與網站上的IIS好主意呢?

+0

是否因爲客戶端嘗試重新連接,並且只有在重新連接嘗試超時後纔會停止? – Pawel

+0

@Pawel不,不是。當我測試它時,我離開了客戶很長一段時間,所以所有的超時都必須通過。 –

+0

我認爲你需要打開客戶端上的日誌記錄來找出爲什麼它沒有斷開連接。使用默認設置時,客戶端應該注意到服務器在20秒內不活動,然後它應該嘗試重新連接。如果客戶端在30秒內無法重新連接,應該斷開連接。 – Pawel

回答

0

請在下面找到答案,瞭解如何斷開所有殭屍連接,當IIS停止並啓動時。

注意:當您重新啓動AppPool時,會觸發重新連接事件。但是,當您重新啓動網站時,將開始全新的應用程序循環,在這種情況下,您將使用HubPresence監視器,它將物理連接(內存對象)與存儲的數據庫連接進行比較。

構建用於SignalR簡單性存在管理, https://patdunn.net/2015/05/05/building-a-simple-presence-manager-for-signalr/

讓我知道這是否有助於或任何其他可能的解決方案,你已經確定。謝謝。

相關問題