2017-02-22 2 views
0

J'essaye d'ajouter la fonctionnalité de douille de Web utilisant le signalR, basé sur: le chat example.

I have 2 différent projet - 1: est serveur pur, comprend web api: j'ai une méthode Web pour obtenir la demande et appeler au moyeu:

[HttpGet] 
    [Route("api/GetData")] 
    public IHttpActionResult GetCorpDataApi() 
    { 
     return Ok(getResponse()); 
     **startWebSocket();** 
    } 

le début procédé de prise Web appelle à:

private void startWebSocket() 
    { 
     MonitorHub hub = new MonitorHub(); 
     Timer myTimer = new Timer(); 
     myTimer.Elapsed += new ElapsedEventHandler(hub.DisplayTimeEvent); 
     myTimer.Interval = 3000; 
     myTimer.Start(); 
    } 

qui appelle à une méthode dans mon hub:

public class MonitorHub : Hub 
{ 

    public void DisplayTimeEvent(object source, ElapsedEventArgs e) 
    { 
     var response = MonitorUtils.GetCorpData(); 
     Clients.All.broadcastMessage(response); 
    } 

} 

(Tout est dans le même projet, compilé sans erreurs).

Mon code client se trouve dans le projet angulaire client (également sous VS), j'ai ajouté la fonctionnalité requise dans le contrôleur:

function initWebSocket() { 
      self.chatHub = null; // holds the reference to hub 
      self.chatHub = $.connection.MonitorHub; // **I dont have MonitorHub** 
      $.connection.hub.start(); 
      self.chatHub.client.broadcastMessage = function (response) { 
       //bla bla 
      };    
     } 

Je tiens à mentionner que je compris dans le index.html fichiers:

<script src="scripts/Vendor/jquery/jquery-2.2.1.js"></script>                
<script src="scripts/Vendor/jquery/jquery.signalR-2.2.1.js"></script> 
<script src="scripts/signalr/hubs"></script> 
<script src="assets/global/plugins/angularjs/angular.min.js" type="text/javascript"></script> 

$ .connection.MonitorHub ne reçoit rien - indéfini. Je crois vraiment que cela a quelque chose à voir avec le fait que le côté serveur est dans un projet différent de celui du côté client. Quand je cours un exemple simple comme l'exemple de chat, cela fonctionne - tout dans le même projet.

Je reçois dans la console cette erreur: Erreur: SignalR: erreur de chargement des concentrateurs. Assurez-vous que la référence de votre concentrateur est correcte, par ex. .

Une idée?

Répondre

0

Je ne suis pas sûr à 100%, mais il pourrait s'agir d'un cas de non-concordance de version JQuery. Essayez d'utiliser une version inférieure de jquery, par exemple jquery-1.6.4.js

+0

Merci, mais ce n'est pas le cas. Je reçois toujours une erreur dans la console de: Erreur: SignalR: Erreur de chargement des concentrateurs. Assurez-vous que la référence de votre concentrateur est correcte, par ex. . – moshi

+0

ok. Vérifiez si vous rencontrez un problème d'incompatibilité de chemin d'accès aux ressources avec les fichiers js. – Tushar

+0

Je ne vois pas (quand j'inspecte avec f12) n'importe quel dossier signalr/hubs ... – moshi

0

Vous ne semblez pas avoir ajouté le serveur SignalR à votre projet. Vous semblez démarrer un WebSocket et créer une instance d'un hub et lancer une API Web. Ce n'est pas comme ça que fonctionne SignalR. SignalR s'occupera de gérer vos appels, d'instancier vos hubs, etc. Suivez simplement le tutoriel auquel vous avez posté un lien (Configuration de la section du projet) ou this one.

+0

Salut Pawel, merci pour votre réponse Je suis allé par le poste j'ai ajouté et j'ai ajouté le SignalR au côté serveur en utilisant nuget Le serveur fonctionne et initialise bien BTW J'ai un eaxmple de travail dans lequel le client et le serveur sont dans le même projet Ici la différence est-ce que le serveur est dans un projet et le client dans un autre Merci! – moshi

+0

Si votre javascript provient d'un serveur différent de celui sur lequel le SignalR fonctionne, vous devez activer CORS. ere] (https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client) est un tutoriel dans lequel ils font quelque chose de similaire - Le serveur signalR est auto-hébergé mais les fichiers javascript contenant html sont servis depuis un serveur séparé. – Pawel