Aplikasi saya mengalami masalah saat menerima jabat tangan sekitar separuh waktu di lingkungan produksi saya. Di mesin lokal saya dan di lingkungan pementasan saya, yang sama dengan produksi, ia bekerja setiap saat.

Ini adalah aplikasi .Net Core 2.1 menggunakan aspnet-signalr/1.1.4

Saya tidak mengonfigurasi SignalR untuk menggunakan spesifikasi apa pun di startup.s . saya

app.UseSignalR(routes => { routes.MapHub<PortfolioHub>("/loadpagedetailsjob"); });

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Dashboard}/{action=Index}/{id?}");
});

PortofolioHub saya hanyalah implementasi langsung dari kelas Hub

Dan di halaman saya

var connection = new signalR.HubConnectionBuilder()
    .withUrl('/loadpagedetailsjob')
    .configureLogging(signalR.LogLevel.Information)
    .build();

connection.start().then(function () {
    connection.invoke("Subscribe");
});

enter image description here

Sepertinya mencoba untuk menegosiasikan soket web kemudian polling panjang dan keduanya gagal. Tetapi permintaan mengembalikan 200

enter image description here

Karena itu hanya terjadi kadang-kadang saya mengalami masalah dalam menyelesaikan masalah. Satu-satunya kecurigaan saya pada saat ini adalah karena lingkungan saya berada di AWS di belakang keseimbangan beban sehingga permintaan negosiasi dialihkan ke server berbeda yang mungkin menyebabkan masalah?

Bantuan apa pun dihargai.

2
A. Hasemeyer 9 Maret 2020, 16:26

1 menjawab

Jawaban Terbaik

SignalR mengharuskan satu koneksi selalu ditangani oleh server yang sama. Solusi tipikal adalah mengonfigurasi penyeimbang beban untuk menggunakan sesi lengket. Dengan mengaktifkan sesi sticky, penyeimbang beban akan mengarahkan permintaan dari pengguna yang sama ke server backend yang sama.

https://docs.microsoft.com/en-us/aspnet/core/signalr/scale?view=aspnetcore-3.1

2
Christoph Lütjen 9 Maret 2020, 16:30