J'ai une application MVC qui affiche des enregistrements de la base de données et je donne la possibilité de créer un nouvel enregistrement. J'utilise SignalR pour notifier les clients lorsque le gestionnaire IEvent de Nservicebus est terminé.SignalR n'appelle pas la fonction côté client lors de la gestion d'un événement dans NServiceBus
Index.cshtml
<script src="signalr/hubs" type="text/javascript"></script>
<script>
var myHub;
$(function() {
myHub = $.connection.userAccountHub;
//add handler to handle the nofication
myHub.testMsg = function() {
alert("I would really like for this to work");
};
$.connection.hub.start();
});
</script>
UserController.cs
public class UserController : Controller
{
private readonly IBus _bus;
public ActionResult Index()
{
return View(getalldata());
}
[HttpPost]
public ActionResult Create(CreateUserAccountModel user)
{
if (ModelState.IsValid)
{
_bus.Send(new CreateUserAccountCommand
{
FirstName = user.FirstName,
LastName = user.LastName,
NetworkLogin = user.NetworkLogin
});
return RedirectToAction("Index");
}
return View(user);
}
UserAccountHub
public class UserAccountHub : Hub
{
}
UserAccountCreatedNotifyEventHandler.cs
public class UserAccountCreatedNotifyEventHandler : IHandleMessages<UserAccountCreatedNotifyEvent>
{
public void Handle(UserAccountCreatedNotifyEvent message)
{
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<UserAccountHub>();
clients.testMsg();
}
}
Fondamentalement, je vais à l'action d'index qui affiche simplement tous mes dossiers et a un bouton créer. Je clique sur le bouton créer @Html.ActionLink("Create", "Create", null, null)
et il a appelé la méthode public ActionResult Create(CreateUserAccountModel user)
. Pour démarrer le bus, puis redirige vers l'action d'index. Le bus de service fait sa chose et la méthode UserAccountCreatedNotifyEventHandler Handle
est déclenchée de manière appropriée.
C'est là que je commence à voir quelques problèmes. J'appelle les méthodes de signalr appropriées pour obtenir les clients afin que je puisse diffuser un message .testMsg()
cependant les clients ne reçoivent pas le message.
Donc, en bref, mon signal clients.testMsg
ne fonctionne pas comme prévu. À ma connaissance, je suis les exemples de code que j'ai trouvés sur le web, et même d'autres projets de test que j'ai. Je suppose que je fais quelque chose de stupide, mais je ne peux pas le cibler.
Je donne qu'un essai. – Etch
J'utilise un modèle similaire, mais à partir des gestionnaires rabbitmq – redsquare
J'ai effectivement trouvé un problème avec ma configuration NServicebus qui a réglé un peu le problème. Ce qui est étrange maintenant, c'est que mon code ci-dessus fonctionne la première fois, mais ne fonctionne pas après. Je suis sur le point de creuser et d'essayer la méthode .CreateProxy. – Etch