64 votes

SignalR + affichage d'un message à un Concentrateur par le biais d'une méthode d'action

Je suis en utilisant le hub - fonction de SignalR (https://github.com/SignalR/SignalR) de publier des messages à tous les abonnés clients:

public class NewsFeedHub : Hub
public void Send(string channel, string content)
{
            Clients[channel].addMessage(content);
}

Cela fonctionne bien lorsque vous appelez "Envoyer" via Javascript, mais j'aimerais aussi l'application web afin de publier des messages (à partir de dans un ASP.NET MVC méthode d'action). J'ai déjà essayé de l'instanciation d'un objet ob NewsFeedHub et d'appeler la méthode Send, mais cela entraîne une erreur (comme le sous-jacent "Connexion" de la plate-forme n'est pas définie). Est-il possible d'utiliser le Hub sans connexion?

96voto

Tim B James Points 11713

Veuillez noter que le SignalR API a changé plusieurs fois depuis que cette question a été posée. Il est possible que certaines réponses vont devenir obsolètes. Cela ne signifie pas qu'ils doivent être en bas-voté comme ils étaient corrects au moment de la rédaction

Il y a une autre mise à jour de réponse à cette question, comme on le voit dans le SignalR Wiki

c#

Public ActionResult MyControllerMethod()
{
    var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
    context.Clients.All.methodInJavascript("hello world");
    // or
    context.Clients.Group("groupname").methodInJavascript("hello world");
}

vb.net

Public Function MyControllerMethod() As ActionResult
    Dim context = GlobalHost.ConnectionManager.GetHubContext(Of MyHub)()
    context.Clients.All.methodInJavascript("hello world")
    '' or
    context.Clients.Group("groupname").methodInJavascript("hello world")
End Function

Mise à jour

Ce code a été mis à jour. Suivre http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-server pour les changements.

10voto

Judah Himango Points 27365

mise à jour: Cette réponse est vieux, trop! SignalR de l'API publique est en évolution constante, il me semble. Tim B James a du nouveau, la bonne utilisation de l'API à partir de juillet 2012.

Actuellement accepté la réponse de Mike est vieux, et ne fonctionne plus avec la dernière version de SignalR.

Voici une version mise à jour qui montre comment poster un message sur un hub à partir d'un MVC action de contrôleur:

public ActionResult MyControllerMethod() 
{
     // Important: .Resolve is an extension method inside SignalR.Infrastructure namespace.
     var connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
     var clients = connectionManager.GetClients<MyHub>();

     // Broadcast to all clients.
     clients.MethodOnTheJavascript("Good news!");

     // Broadcast only to clients in a group.
     clients["someGroupName"].MethodOnTheJavascript("Hello, some group!");

     // Broadcast only to a particular client.
     clients["someConnectionId"].MethodOnTheJavascript("Hello, particular client!");
 } 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X