Bağlantı hatalarını giderme
Bu bölüm, ASP.NET Core SignalR hub'ına bağlantı kurmaya çalışırken oluşabilecek hatalarla ilgili yardım sağlar.
Yanıt kodu 404
WebSockets kullanırken ve skipNegotiation = true
WebSocket connection to 'wss://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 404
Yapışkan oturumlar olmadan birden çok sunucu kullanırken, bağlantı bir sunucudan başlayıp başka bir sunucuya geçebilir. Diğer sunucu önceki bağlantının farkında değil.
İstemcinin doğru uç noktaya bağlandığını doğrulayın. Örneğin, sunucu adresinde
http://127.0.0.1:5000/hub/myHub
barındırılır ve istemci bağlanmayahttp://127.0.0.1:5000/myHub
çalışır.Bağlantı kimliğini kullanıyorsa ve anlaşmadan sonra sunucuya istek göndermek çok uzun sürüyorsa, sunucu:
- Kimliği siler.
- 404 döndürür.
Yanıt kodu 400 veya 503
Aşağıdaki hata için:
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.
Bu hata genellikle yalnızca WebSockets aktarımını kullanan bir istemciden kaynaklanır, ancak WebSocket protokolü sunucuda etkinleştirilmez.
Yanıt kodu 307
WebSockets kullanırken ve skipNegotiation = true
WebSocket connection to 'ws://xxx/HubName' failed: Error during WebSocket handshake: Unexpected response code: 307
Bu hata, anlaşma isteği sırasında da oluşabilir.
Yaygın neden:
- Uygulama, içinde
Startup
çağrısıUseHttpsRedirection
yaparak HTTPS'yi zorunlu kacak şekilde yapılandırılır veya URL yeniden yazma kuralı aracılığıyla HTTPS'yi zorlar.
Olası çözüm:
- İstemci tarafındaki URL'yi "http" olan "https" olarak değiştirin.
.withUrl("https://xxx/HubName")
Yanıt kodu 405
Http durum kodu 405 - Yönteme İzin Verilmiyor
- Uygulamada CORS etkin değil
Yanıt kodu 0
Http durum kodu 0 - Genellikle bir CORS sorunudur, durum kodu verilmez
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).
- Beklenen çıkış noktalarını ekleme
.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').
- CORS ilkenize ekleyin
.AllowCredentials()
. Veya bu seçenekle kullanılamaz.AllowAnyOrigin()
.WithOrigins("*")
Yanıt kodu 413
Http durum kodu 413 - Yük Çok Büyük
Bunun nedeni genellikle 4k'nın üzerinde bir erişim belirtecinin olmasıdır.
- Azure SignalR Hizmeti'ni kullanıyorsanız, Hizmet aracılığıyla gönderilen talepleri şu şekilde özelleştirerek belirteç boyutunu küçültün:
.AddAzureSignalR(options =>
{
options.ClaimsProvider = context => context.User.Claims;
});
Geçici ağ hataları
Geçici ağ hataları bağlantıyı kapatabilir SignalR . Sunucu, kapatılan bağlantıyı düzgün bir istemci bağlantısının kesilmesi olarak yorumlanabilir. Bu gibi durumlarda istemcinin bağlantısının neden kesildiğinden daha fazla bilgi edinmek için istemciden ve sunucudan günlükleri toplayın.
Ek kaynaklar
ASP.NET Core