Chcę zaimplementować system powiadamiania typu facebook jak w ASP.NET MVC 3: powiadomienia są wysyłane do konkretnego użytkownika, aby powiadomić go o akcji na jednym z jego przedmiotów.Użyj Signalr, aby mieć system powiadamiania na facebooku.
Czy sygnalizator nadaje się do takich wymagań? W jaki sposób mogę wysłać powiadomienie do określonego użytkownika (wszystkie otwarte sesje tego użytkownika) za pomocą SignalR?
Edit
Ok, Oto co zrobiłem
Na stronie klienta
$(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);
});
});
Na stronie serwera
public class Chat : Hub
{
public void Join(string username)
{
AddToGroup(username);
}
}
i za każdym razem trzeba powiadomić użytkownika w kontrolerze wykonuję następujące czynności:
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<Chat>();
clients[username].addMessage("test");
thx Adam, myślisz, że rozwiązanie, które napisałem na końcu mojej skali pocztowej, dobrze? Thx – hichn
Twój kontroler powinien wziąć IConnectionManager jako zależność od wstrzyknięcia do kontrolera. Nie należy wywoływać funkcji Resolve() nigdzie indziej poza fabryką sterowników. Użyj jakiegoś kontenera DI (np. Unit - unity.mvc3 nuget package) i użyj wtrysku Constructor do wstrzyknięcia do kontrolera. Upewnij się, że masz metodę Dispose na konkretnej implementacji menedżera IConnectionManager, którą chcesz przekazać jedności, aby ją zlikwidować, gdy zostanie to zrobione przy użyciu HierarchicalLifetimeManager. Ustaw punkt przerwania, aby wywoływać wywoływanie (tylko wtedy, gdy implementujesz IDisposable) –