Pertanyaan SignalR tidak memanggil fungsi jQuery


Saya memiliki kode ini di halaman saya, tetapi tidak berjalan ketika saya membuat perubahan dalam database, apa yang bisa menjadi masalah. Ini dimulai dengan baik, ketika saya memuat halaman ini menjalankan fungsi dua kali, tetapi jika saya mengirim pesan ke database ini tidak dijalankan.

$(function () {

var chat = $.connection.chatHub;
chat.client.allTalks = function () {
    refresh();
};
$.connection.hub.start();
    refresh();

});

SERVER SIDE (HUB):

    [HubName("chatHub")]
    public class ChatHub : Hub
    {
        public static void AllTalks()
        {
            IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
            context.Clients.All.allTalks();
        }
    }

HANDLER

...

using (SqlCommand command = new 
SqlCommand(@"SELECT * FROM [dbo].[chat_talks]", connection)) {

// KONTEN

SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

...     }

        public void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            ChatHub.AllTalks();
        }

GLOBAL.ASAX

        protected void Application_Start(object sender, EventArgs e)
        {
            SqlDependency.Start(ConfigurationManager.ConnectionStrings["ProjectSellerConnection"].ConnectionString);
        }

enter image description here


4
2018-03-14 14:48


asal


Jawaban:


Pertama, redundan untuk memiliki baris pertama Anda dalam kode sisi server Anda. Tidak perlu memanggil hubContext di dalam Hub. Anda hanya bisa melakukan:

public static void AllTalks()
{
    Clients.All.allTalks();
}

Saya akan menyarankan, mungkin dengan bodohnya, untuk tidak menggunakan SQL Dependency. Saya malah menyarankan menggunakan teknik pemanggilan SignalR (khusus, ini akan memanggil fungsi klien):

var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
hubContext.Clients.All.allTalks();

Anda dapat memanggil ini dalam, misalnya, tindakan dalam MVC dan Pengontrol WebAPI, sehingga artinya jika Anda telah melakukan pembaruan basis data dalam tindakan tersebut, Anda dapat kemudian memanggil klien menggunakan metodologi ini. Saya tahu itu tidak seindah SQL Dependency, dan mungkin bukan jawaban yang Anda cari, tetapi itu akan menyelesaikan masalah Anda - karena tampaknya masalahnya tampaknya dengan SignalR mendeteksi perubahan database.

Dengan kata lain, metodologi ini akan berhasil, tetapi mungkin tidak persis seperti yang Anda harapkan.


6
2018-03-18 00:24