2016-02-08 1 views
4

Est-il possible d'utiliser signalR avec Service Fabric fourni par Microsoft? J'essaie de connecter une application UWP et une application angularJS à mon service fiable sans état hébergé dans un cluster Azure via la connexion signalR/websocket. Mais les deux ne sont pas en mesure d'ouvrir une telle connexion. Sur ma machine locale tout fonctionne bien.Utilisation de SignalR avec Azure Service Fabric

Y a-t-il quelque chose de spécial à considérer lors de l'utilisation de signalR/websockets avec Service Fabric? Y a-t-il un exemple?

+0

Pourquoi avez-vous créé 2 questions qui sont presque les mêmes? Choisissez-en un ... – Mikhail

+0

Jetez un coup d'œil à ce [Backplane] (http://stackoverflow.com/questions/39649027/setup-signalr-and-service-bus-inside-a-azure-service-fabric-service/40525730 # 40525730). Je serais heureux si son aide. – Venkatesh

+0

Référez-vous à ce [lien] (http://stackoverflow.com/questions/39649027/setup-signalr-and-service-bus-inside-a-azure-service-fabric-service/40525730#40525730). Serait heureux si cela fonctionne pour vous. – Venkatesh

Répondre

5

Vous devez configurer l'équilibreur de charge sur l'adresse IP du client. Ensuite, l'utilisateur arrivera toujours au même noeud et à d'autres utilisateurs vers d'autres noeuds. La relation entre l'utilisateur et le nœud sera persistante.

+0

Bon point Kevin. Pourriez-vous fournir un peu plus d'informations sur la façon exacte de mettre en œuvre l'IP client de mappage sur un hôte de service dans LB? (Je suis très nouveau à Azure) Aussi, comment suggéreriez-vous pour gérer le changement d'IP de l'utilisateur? –

+0

Cet article stackoverflow a donné un bon exemple d'utilisation de l'équilibreur de charge. Nous l'avons essayé et cela a fonctionné. [link] (http://stackoverflow.com/questions/36818744/signalr-with-service-fabric-stateless-web-api) – Shaun

+0

Je reçois l'erreur ci-dessous. Utilisez siganlr.core ou 2.2 ??? version.Unhealthy event: SourceId = 'Système.RA ', Property =' ReplicaOpenStatus ', HealthState =' Avertissement ', ConsiderWarningAsError = faux. Le réplica a eu plusieurs échecs lors de l'ouverture de _Node_0. Appel d'API: IStatelessServiceInstance.Open(); Error = System.Reflection.TargetInvocationException (-2146232828) Une exception a été émise par la cible d'un appel. à System.RuntimeMethodHandle.InvokeMethod (Object target, Object [] arguments, signature sig, constructeur booléen) à – indra257

5

Vous devez activer le paramètre inter-domaine pour signalR pour l'appeler à partir d'autres applications.

appBuilder.Map("/signalr", map => 
     { 

      map.UseCors(CorsOptions.AllowAll); 
      var hubConfiguration = new HubConfiguration() 
      { 
       EnableJSONP = true, 
       EnableDetailedErrors = true, 
       EnableJavaScriptProxies = true 
      }; 

      map.RunSignalR(hubConfiguration); 
     }); 

Ce code peut être trouvé dans le fichier readme.txt que nous obtenons après avoir installé le package Nuget pour le SignalR. Pour la fonctionnalité interdomaine, vous devez également installer le package Cores nuget. Après le déploiement de cette application, vous pouvez voir que certains appels à signalR échouent et que Some réussit. Par défaut, le nombre d'instances dans le service Fiable sans état est -1. Ainsi, plusieurs instances seront créées pour le service.

De la signalisationR Connection.Start(), trois API SingalR seront appelées. Ces appels doivent se produire dans la même session afin de fonctionner correctement. Lorsque nous appelons ces trois API dans Service Fabric avec plusieurs instances, l'appel peut être traité dans différents nœuds et donc différentes sessions, ce qui entraîne une défaillance dans la connexion singalR.

Une solution consiste à créer le nombre d'instances 1 pour l'application de structure de service sans état. Je ne pense pas que ce soit une solution élégante.

+0

Je reçois l'erreur ci-dessous. Utilisez siganlr.core ou 2.2 ??? version.Unhealthy event: SourceId = 'System.RA', Property = 'ReplicaOpenStatus', HealthState = 'Avertissement', ConsiderWarningAsError = false. Le réplica a eu plusieurs échecs lors de l'ouverture de _Node_0. Appel d'API: IStatelessServiceInstance.Open(); Error = System.Reflection.TargetInvocationException (-2146232828) Une exception a été émise par la cible d'un appel. à System.RuntimeMethodHandle.InvokeMethod (Object target, Object [] arguments, signature sig, constructeur booléen) à – indra257

+0

Je pense que j'utilisais la version 2. * signal .. Je crois que vous utilisez un service sans état. Avez-vous cette erreur lors du débogage dans la machine locale? –

+0

Lorsque j'utilise des websockets, je reçois une erreur lors de l'établissement de liaison WebSocket: Code de réponse inattendu: 204. Mais lorsque j'utilise SSE, cela fonctionne correctement. – indra257