共用方式為


針對連線問題進行疑難排解

本節協助處理嘗試建立與 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

  • 如果連線使用識別碼,而且在交涉之後,花太長的時間傳送要求給伺服器,則伺服器會:

    • 刪除識別碼。
    • 傳回 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

在交涉要求期間,也可能會發生此錯誤。

常見原因:

  • 應用程式已設為藉由在 Startup 中呼叫 UseHttpsRedirection 來強制執行 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 連線。 伺服器可能會將關閉的連線解譯為正常用戶端中斷連線。 若要取得用戶端在那些情況下為何會中斷連線的詳細資訊,請從用戶端和伺服器蒐集記錄

其他資源