2012-06-24 14 views
18

Utilizzo Visual Studio 2012 Ultimate RC, SignalR 0.5.1 e Jquery 1.7.2 in un'applicazione MVC4.

Ho guardato: MVC4 SignalR "signalr/hubs" 501 Not Implemented Error

Ma non influenza il mio problema (sto usando IIS Express per eseguire il debug).

Quando provo a utilizzare SignalR, la variabile $ .connection non è definita. Il mio codice lato server:

[HubName("tenantHub")] 
public class TenantHub : Hub 
{ 
    ... 
    void TenantChange(CrudAction action, Tenant tenant) 
    { 
     Clients.eventOccurred(action.ToString(), tenant); 
    } 
} 

lato client:

$(function() { var test = $.connection.tenantHub; }); 

lato client SignalR/hubs viene fatto riferimento e posso vedere il codice JS, che non genera gli eventuali errori. Ma la referenziazione $ .connection lancia un Uncaught TypeError: Cannot read property 'tenantHub' of undefined. Anche provato a fare l'esempio di chat predefinito, dà lo stesso errore. SignalR non è supportato se utilizzato in VS2012 o sono semplicemente stupido?

+0

Forse si tenta di eseguire il debug sul server? Qualche eccezione? Hai iniziato la connessione? '$ .connection.hub.start();' Questo è tutto quello che posso pensare adesso :( –

+0

Sì, ho provato questo, ma la variabile 'connessione' non è definita. – Bas

+0

Penso che il problema derivi dalla posizione di file .js, hai inserito 'jquery.signalR-0.5.1.min.js' e' signalr/hubs?? Forse dovresti provare a eseguirne il debug usando 'firebug' –

risposta

9

Prova a prendere [HubName("tenantHub")] dalla tua classe. Il mio non funzionerebbe se avessi quelli lì dentro. Prova anche a mettere i tuoi hub in una cartella chiamata "Hubs" nella radice del tuo progetto.

25

Provare a rimuovere il BundleConfig.RegisterBundles(BundleTable.Bundles); da Global.asax.cs, e vedere se questo aiuta?

+12

Questo ha funzionato per me! Ho capito perché, per impostazione predefinita, il modello MVC4 include jQuery proprio nella parte inferiore del file di layout (inaspettato e sembra stupido considerandolo include modernizr in alto) Quindi la mia pagina includeva jquery due volte che ha rovinato tutto. Grazie Thiem :) – Rocklan

+0

Questo è stato esattamente il problema per me quando ho usato il modello MVC 4 predefinito. Grazie!! – cortijon

+0

In realtà, aiuta, ma il modo giusto per farlo è includere gli script aggiuntivi nelle sezioni scripts '@section scripts {}' SE si desidera utilizzare il layout predefinito, OPPURE modificare il layout in base alle proprie esigenze (script a top, nessun jquery nel layout, ecc.) –

3

Ho avuto lo stesso problema in VS2012 RTM.

Il problema era che per la prima volta ho aggiunto signalr in BundleConfig.cs e mi aspettavo che funzionasse. Ma poi usando 'Visualizza sorgente' nel browser ho notato che signalr.js era incluso prima di jquery.js. signalr.js era incluso nella parte superiore della pagina, jquery era incluso nella parte inferiore della pagina.

Dopo alcuni problemi con BundleConfig, signalr.js è stato incluso dopo jquery.js e ora signalr funziona come un incantesimo!

2

provare a mettere RouteTable.Routes.MapHubs(); come il primo punto all'ordine Application_Start() in Global.asax.cs

Ho un sample code/project here

5

Questo noi di solito causata da caricare jQuery due volte. Di solito abbiamo l'abitudine di caricare jQuery nel footer. Dal momento che il signalr si lamenta e ti costringe a includere la libreria jQuery prima di signalr-x.js.

è possibile includere il jQuery prima che i signalr-x.js e si può fare qualcosa di simile a piè di pagina in cui si include il plugin jQuery per evitare di caricare due volte:

<script type="text/javascript"> 
    !window.jQuery && document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"><\/script>'); 
    !window.jQuery && document.write('<script src="/public/js/vendor/jquery-1.9.1.min.js"><\/script>'); 
</script> 

Spero che questo aiuti. :)

+0

Effettivamente! Grande +1 :) (anche se l'errore da principiante ..) – army

0

Avevo un problema simile, il mio funzionava da Visual Studio 2010 debug ma non su localhost (IIS7.5 windows 7). Ho scoperto che avevo una barra in più nella definizione di "signalr/hubs", stavo usando "/ signalr/hubs". Ho anche aggiunto il riferimento JSON 2 js per la compatibilità del browser. Nota che l'ordine di dichiarare .js è importante.

<script src="Scripts/JSON2.js" type="text/javascript"></script> 
<script src="http://code.jquery.com/jquery-1.8.2.min.js" type="text/javascript"></script> 
<script src="Scripts/jquery.signalR-1.1.2.min.js" type="text/javascript"></script> 
<script src="signalr/hubs" type="text/javascript"></script> 
<script type="text/javascript"> 

per trovare questo problema ho acceso la registrazione come segue e guardai nella console degli strumenti di sviluppo per vedere l'errore quando distribuito su localhost.

// Logs errors to the browser dev 'f12' console 
$.connection.hub.logging = true; 

Spero che questo aiuti qualcun altro. Sto giocando con Chrome, IE9, 10 su più PC ora - che grande biblioteca!

0

Assicurarsi di non avere un nome hub duplicato; [HubName ("tenantHub")] - ovvero due o più classi hub decorate con lo stesso nome.

1

Se nessuna di queste funzioni per te, assicurati che nel tuo sorgente html finale non solo il riferimento allo script SignalR venga visualizzato dopo jQuery, ma anche che la versione corrisponda al file effettivo che hai nella cartella degli script.

<script src="~/Scripts/jquery.signalR-2.0.2.js"></script> 

Per esempio questo corrisponde 2.0.2 versione di SignalR, in caso di aggiornamento SignalR tramite pacchetto allora dovrete modificare manualmente questa linea.

0

in senso inverso a John,

ho dovuto aggiungere un/alla dichiarazione signalr/hub

es.

<script src="signalr/hubs" type="text/javascript"></script> 

E'

<script src="/signalr/hubs" type="text/javascript"></script>