共用方式為


針對連線錯誤進行疑難排解

本節提供協助,針對嘗試建立與 ASP.NET Core SignalR 樞連線時可能發生的錯誤。

回應碼 404

使用 WebSockets 和 skipNegotiation = true

WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 404
  • 在使用多部伺服器而未設置黏著會話的情況下,連線可能從一部伺服器開始,然後切換到另一部伺服器。 另一部伺服器並不知道先前的連線。

  • 確認客戶端連線到正確的端點。 例如,伺服器載入於 , http://127.0.0.1:5000/hub/myHub 而用戶端嘗試連線到 http://127.0.0.1:5000/myHub

  • 如果連線使用 ID,而且在協商之後傳送要求給伺服器的時間太長,伺服器:

    • 刪除標識碼。
    • 傳回 404 錯誤。

回應碼 400 或 503

針對下列錯誤:

WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 400

Error: Failed to start the connection: Error: There was an error with the transport.

此錯誤通常是由用戶端只使用 WebSocket 傳輸所造成,但伺服器上未啟用 WebSocket 通訊協定。

回應碼 307

使用 WebSockets 和 skipNegotiation = true

WebSocket connection to 'ws://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 307

在協商請求期間,也可能會發生此錯誤。

常見原因:

  • 應用程式被設定為透過在UseHttpsRedirection中呼叫Startup來強制使用 HTTPS,或者透過 URL 重寫規則強制使用 HTTPS。

可能的解決方案:

  • 將客戶端上的 URL 從「http」變更為「https」。 .withUrl("https://xxx/HubName")

回應碼 405

Http 狀態代碼 405 - 方法不被允許

  • 應用程式未啟用 CORS

回應碼 0

Http 狀態代碼 0 - 通常是 CORS 問題,沒有提供狀態代碼

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5000/default/negotiate?negotiateVersion=1. (Reason: CORS header 'Access-Control-Allow-Origin' missing).
  • 將預期的來源新增至 .WithOrigins(...)
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5000/default/negotiate?negotiateVersion=1. (Reason: expected 'true' in CORS header 'Access-Control-Allow-Credentials').
  • 新增 .AllowCredentials() 至 CORS 政策。 無法搭配此選項使用 .AllowAnyOrigin().WithOrigins("*")

回應碼 413

Http 狀態代碼 413 - 承載太大

這通常是因為具有超過 4k 的存取令牌所造成。

  • 如果使用 Azure SignalR 服務,請使用下列方式自定義透過服務傳送的宣告來減少令牌大小:
.AddAzureSignalR(options =>
{
    options.ClaimsProvider = context => context.User.Claims;
});

暫時性網路失敗

暫時性網路中斷可能會關閉SignalR連線。 伺服器可能會將關閉的連線解譯為正常用戶端中斷連線。 若要取得用戶端在那些情況下中斷連線原因的詳細資訊, 請從客戶端和伺服器收集記錄

其他資源