Tôi muốn thực hiện một hệ thống thông báo giống như trong ASP.NET MVC 3: thông báo được gửi tới một người dùng cụ thể để thông báo cho anh ta về một hành động trên một trong các mục của anh ấy.Sử dụng Signalr để có hệ thống thông báo giống như Facebook
Tín hiệu có phù hợp với yêu cầu đó không? Làm cách nào để gửi thông báo đến một người dùng cụ thể (tất cả các phiên đã mở của người dùng này) bằng SignalR?
Sửa
Ok, đây những gì tôi đã làm
Ở phía client
$(function() {
// Proxy created on the fly
var chat = $.connection.chat;
var username = '@Html.ViewContext.HttpContext.User.Identity.Name';
// Declare a function on the chat hub so the server can invoke it
chat.addMessage = function (message) {
$('#messages').append('<li>' + message + '</li>');
};
// Start the connection
$.connection.hub.start(function(){
chat.join(username);
});
});
Ở phía máy chủ
public class Chat : Hub
{
public void Join(string username)
{
AddToGroup(username);
}
}
Và mỗi khi tôi cần phải thông báo cho người dùng trong bộ điều khiển tôi làm như sau:
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<Chat>();
clients[username].addMessage("test");
thx Adam, bạn có nghĩ rằng giải pháp mà tôi đã đăng ở cuối bài đăng của tôi không? Thx – hichn
Bộ điều khiển của bạn nên dùng IConnectionManager như một phụ thuộc được tiêm vào bộ điều khiển của nó. Bạn không nên gọi Resolve() thực sự ở bất kỳ nơi nào khác ngoài một nhà máy điều khiển. Sử dụng một số DI container (unity ví dụ - unity.mvc3 gói nuget) và sử dụng Constructor tiêm để tiêm vào bộ điều khiển của bạn. Đảm bảo nếu bạn có phương thức Vứt bỏ trên việc triển khai thực hiện cụ thể IConnectionManager của bạn mà bạn yêu cầu sự thống nhất để vứt bỏ nó khi được thực hiện bằng cách sử dụng HierarchicalLifetimeManager. Đặt điểm ngắt để đảm bảo vứt bỏ được gọi (chỉ khi bạn đang triển khai IDisposable) –