Я хочу реализовать систему напоминаний в Facebook как ASP.NET MVC 3: уведомления отправляются конкретному пользователю, чтобы уведомить его о действии на одном из своих предметов.Использовать Signalr, чтобы иметь фейсбук, такой как система уведомлений
Является ли signalr подходящим для такого требования? Как я могу отправить уведомление конкретному пользователю (все открытые сеансы этого пользователя) с помощью SignalR?
Редактировать
Хорошо, вот что я сделал
В стороне клиента
$(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);
});
});
В стороне сервера
public class Chat : Hub
{
public void Join(string username)
{
AddToGroup(username);
}
}
И каждый раз, когда мне нужно, чтобы уведомить пользователя в контроллере я делаю следующее:
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<Chat>();
clients[username].addMessage("test");
thx Адам, как вы думаете, решение, которое я разместил в конце моего шкала сообщений хорошо? Thx – hichn
Ваш контроллер должен принять IConnectionManager в качестве вложенной зависимости в свой контроллер. Вы не должны называть Resolve() действительно в другом месте, кроме фабрики контроллера. Используйте некоторый контейнер DI (единство, например - unit.mvc3 nuget), и используйте инъекцию конструктора для ввода в ваш контроллер. Убедитесь, что у вас есть метод Dispose для конкретной реализации IConnectionManager, который вы сообщаете единству, чтобы избавиться от него, когда это делается с помощью HierarchicalLifetimeManager. Установите точку останова для обеспечения вызова вызова (только если вы реализуете IDisposable) –