2016-10-20 2 views
4

J'ai rencontré un problème avec mon projet SignalR. J'ai créé une console pour exécuter le SignalR puis essayer de l'utiliser avec mon site web (tous en cours d'exécution en mode localhost pour l'instant)

SignalRSelfHost

using System; 
using Microsoft.AspNet.SignalR; 
using Microsoft.Owin.Hosting; 
using Owin; 
using Microsoft.Owin.Cors; 
using Microsoft.AspNet.SignalR.Hubs; 

namespace SignalRSelfHost 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // This will *ONLY* bind to localhost, if you want to bind to all addresses 
      // use http://*:8080 to bind to all addresses. 
      // See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
      // for more information. 
      string url = "http://localhost:8080"; 
      using (WebApp.Start(url)) 
      { 
       Console.WriteLine("Server running on {0}", url); 
       Console.ReadLine(); 
      } 
     } 
    } 
    class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.UseCors(CorsOptions.AllowAll); 
      app.MapSignalR(); 
     } 
    } 
    [HubName("myHub")] 
    public class MyHub : Hub 
    { 
     public void Send(string name, string message) 
     { 
      Clients.All.addMessage(name, message); 
     } 
    } 
} 

index.html

<script src="Scripts/jquery-3.1.1.min.js"></script> 

<script src="Scripts/jquery.signalR-2.2.1.min.js"></script> 

<script src="http://localhost:8080/signalr/hubs"></script> 

<script type="text/javascript"> 
    $(function() { 
     //Set the hubs URL for the connection 
     //$.connection.hub.url = "http://localhost:8080/signalr"; 

     //// Declare a proxy to reference the hub. 
     //var chat = $.connection.myHub; 

     var conn = $.hubConnection("http://localhost:8080/signalr"); 
     var hubProxy = conn.createHubProxy('myHub'); 


     conn.start().done(function() { 
     }); 
    }); 
</script> 

Certains de ce qui précède a été découragé, parce que c'est quelque chose que j'ai aussi essayé, mais n'a pas travaillé non plus.

Quelqu'un peut-il me dire pourquoi je reçois l'erreur: $ .hubConnection est pas une fonction (...)

+0

Utilisez-vous l'un des modèles de projet Visual Studio pour votre côté client? – DevNoob

Répondre

-1

Hub:

[HubName("ContosoChatHub")] 
public class ChatHub : Hub 

Javascript client: supprimer l'URL, vous ne besoin de ça.

var connection = $.hubConnection(); 
var contosoChatHubProxy = connection.createHubProxy('ContosoChatHub'); 

connection.start() 
    .done(function(){ console.log('Now connected, connection ID=' + $.connection.hub.id); }) 
    .fail(function(){ console.log('Could not Connect!'); }); 
}); 

La chaîne dans createHubProxy doit être identique à la chaîne de l'attribut HubName.

+0

comment pouvez-vous supprimer l'URL lorsque votre serveur et client sont sur des serveurs différents? – Mukus

+0

Désolé, il a fallu si longtemps pour vous répondre, le proxy est automatiquement généré, le sait comment le résoudre. Ce que vous faites est d'essayer de lui dire de résoudre à un endroit spécifique, ce qui n'est pas nécessaire. –

+0

/Sarcasm on/J'aime quand les gens marquent une réponse sans donner de raison./Sarcasm off/Aucun moyen de savoir si je me trompe réellement (ce qui ne serait pas la première fois ni la dernière), ou s'ils ont mal compris la réponse. Il suffit de marquer une réponse pour aider personne. –

0

Je viens de rencontrer le même problème. Le problème s'est avéré être que le script JQuery était à nouveau exécuté au bas de la page (partie du modèle ASP.NET MVC que j'utilisais), effaçant les enregistrements SignalR-JQuery. Assurez-vous que vous n'avez pas de balise de script supplémentaire ou appel @Scripts.Render au bas de votre page HTML.

1

Je ne suis pas sûr que votre version de jQuery soit supportée. J'ai eu des effets secondaires étranges avec la mauvaise version de jQuery en cours de chargement ou d'être chargé plusieurs fois. Lorsque vous travaillez avec JSPM jspm resolve --only npm:[email protected] aide

Ces verisons travaillent:

<script src="jquery-2.1.4.min.js"></script> 
<script src="jquery.signalR-2.2.0.min.js"></script> 

et

"jquery": "npm:[email protected]", 
"ms-signalr-client": "npm:[email protected]", 

Je recommande également d'omettre le postfix "/ de signalr" lors de la spécification du hubConnection. Il est ajouté automatiquement.