SignalR client appelant la méthode à partir de l'extérieur du moyeu à l'aide de GlobalHost.ConnectionManager.GetHubContext ne fonctionne pas. Mais l'appel de l'intérieur le concentrateur n'
Je suis en train d'appeler un client méthode de dans un .net Web API contrôleur de l'action.
Puis-je faire cela?
Le seul post que je peux trouver qui se rapproche de ce que je cherche à faire est celui-ci:
SignalR + affichage d'un message à un Concentrateur par le biais d'une méthode d'action
Dans un message est envoyé à partir de l'intérieur d'un asp.net MVC action du contrôleur à l'aide de GlobalHost.ConnectionManager.GetHubContext.
Quand j'essaie qu'à l'intérieur de mon API Web action aucune erreur n'est renvoyée, mais la méthode "methodInJavascript" n'est jamais invoquée sur le côté client.
Public ActionResult MyControllerMethod()
{
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.methodInJavascript("hello world");
//or
context.Clients.Group("groupname").methodInJavascript("hello world");
}
Lorsque j'ai mis un point d'arrêt à l'intérieur de cette action, je vois que le code est conclu et exécuté. Il ne se passe rien sur le javascript côté client si.
Pourquoi? Est Web API si différent sous le capot que cela ne fonctionne pas? Quelqu'un d'autre a essayé et eu du succès?
Quand je l'appelle la "methodInJavascript" de "dans" mon hub, il fonctionne parfaitement. Juste ne fonctionne pas lorsqu'il est appelé à partir de dans un .net Web API contrôleur de l'action.
Mise à JOUR:
Après des recherches sur cette question je n'ai pas de solution. Je ne peux que supposer qu'il y a quelque chose qui manque à partir d'exemples de ce genre Le serveur vers le client les messages ne passent pas par avec SignalR dans ASP.NET MVC 4 et ce l'appel de SignalR hub de WebAPI contrôleur de questions comme peut-être il y a une étape supplémentaire de configuration pour activer les appels à partir d'un HubContext ou quelque chose. Le code que j'ai posté ici, c'est comme celui qui apparaît dans ces exemples n'a pas été démontré à être défectueux en quelque sorte. Quelqu'un peut-il voir une faille dans le code? L'appel de html œuvres. Je fais beaucoup dans mes applications et jamais de problème. Je n'ai jamais vu un appel à partir de la HubContext dans une API contrôleur de travaux. Pas d'erreurs. Tout simplement pas de résultats sur le client.
RÉSOLU (type de):
Code ci-dessus fonctionne en effet comme est lors de la publication. Ne fonctionne pas dans Visual Studio, l'environnement de dev via localhost si. Pas d'erreur mais pas de résultat sur le client final. La publication du code comme c'est pour un serveur réel sur le web ne fonctionne en effet. Je n'ai jamais pensé qu'il y aurait une différence, je n'ai jamais essayé. Pensé que si ça ne marchait pas, localement, il ne fonctionnerait pas publié. C'est un travail en direct maintenant, mais je me demandais pourquoi ça ne marche pas via localhost dans l'environnement de dev. Ne peux pas le tester en local avec des points d'arrêt et de ces.
J'ai le sentiment que c'est que signalr répertoire virtuel. Quelque chose est différent lorsqu'il est exécuté localement vs publiés. Pas sûr de ce qu'mais je vois beaucoup de messages comme http://www.bitwisejourneys.com/signalr-hosting-in-iis-a-nasty-gotcha/. De la lecture pour voir si il y a un moyen de le faire travailler à la fois localement et publié.
- Je ne suis vraiment pas comprendre cela. Je vois la documentation. Je vois des extraits de code en de nombreux endroits. Ils se ressemblent tous. Quelqu'un a fait cela? Quelqu'un a réellement vu à l'oeuvre?
- ay-je fait cela, il ne fonctionne pas pour moi non plus. Je reçois le même comportement que l'OP
- Avez-vous jamais aller au fond de tout cela?
- votre remarque sur la VD résolu pour moi. J'ai remarqué que mes pages de référence /signalr/hubs ont été prise en localhost:1234/signalr/moyeux et le contenu généré a l'initialisation de chemin /signalr au lieu de /Monsiteweb/signalr. MAIS quand je tape localhost:1234/Monsiteweb/signalr/hubs du contenu généré par l'URL de connexion est /Monsiteweb/signalr. Lorsque vous utilisez VDs dans IISExpress il crée deux sites web - un / de et un dans /Monsiteweb, de sorte que le signalr semble fonctionner, mais je suppose que vous vous retrouvez avec deux distincts des moyeux. Assurez-vous que générés /signalr/hub fichier comprend VD dans l'URL de connexion.
Vous devez vous connecter pour publier un commentaire.
Je suis venu à travers avec la même question il ya quelques jours. Qui a pris mes 2 jours pour trouver une solution et de le résoudre. Après quelques graves étudier les problèmes de la cause racine était le signalr solveur de dépendances que j'ai mis customly.
À la fin, j'ai trouvé ce lien et qui disait ceci:
La place importante ici la NOTE. Bien sûr, après signalr 2.0 cette documentation devenir obsolète. J'ai donc mélangé certains ici avec la nouvelle SignalR API. Dans les nouvelles SignalR API non à l'aide de WebActivatorEx plus. OwinStartup préféré au lieu de WebActivator.
Et dans votre global.asax
Je ne veux pas envoyer tout le code ici, pour montrer le vrai problème.
Donc pour moi tout fonctionne bien pour le moment. L'injection de dépendance fonctionne aussi trop. Mais la mauvaise partie est que partout où j'ai cherché David Fowler a dit, "Sa par la conception". J'ai commencé à penser, c'est cette conception vraiment nécessaire ou une erreur.
Espère que cela aide quelqu'un d'autre qui fait de la recherche pour le même problème.
Application_Start
événement résolu mon problème aussi. Merci!!!!!!GlobalHost
vous devez définir votreGlobalHost.DependencyResolver = new MyResolver...
dansApplication_Start
et PAS dansHubConfiguration
dansapp.MapSignalR
Sinon, le contexte retourné parGlobalHost.ConnectionManager.GetHubContext
ne serait pas delver des messages ou peut jeter "à l'Aide d'un Hub instance a pas été créé par la HubPipeline est pas pris en charge." quand vous essayez de faire Client.Tout ou toute autre fonction d'envoi.J'ai eu le même problème, et il est lié à la Coi (avec quoi que ce soit comme ninject ou château).
Si vous mondiale de la résolution de dépendances à votre Cio manager, il remplacera également le SignalR intérieure pipeline de résolution. Cela rend votre SingleTon client hub, de ne pas fonctionner correctement.
Je l'ai résolu en ayant seulement le Serveur Moyeux être Cio-ed
Le code ci-dessous nécessite SignalHubActivator (vous pouvez le trouver sur internet)
Maintenant, GlobalHost.ConnectionManager.GetHubContext sera de retour la seule instance ET des méthodes client sera appelé à nouveau correctement!