2013-07-30 15 views
7

Ho una chat di lavoro come l'applicazione in esecuzione su SignalR 1.1.2 che verrà messa su server con bilanciamento del carico, quindi ho bisogno di implementare una soluzione backplane per sincronizzare i server./signalr/hub non vengono generati durante l'aggiornamento a SignalR-2.0.0-beta2

Questa è un'applicazione ASP.NET MVC4 .NET 4.5. Utilizzo degli hub SignalR e connessione non persistente. L'app utilizza AngularJS sul lato client per gestire i collegamenti e gli aggiornamenti ui.

Ho seguito i passaggi elencati here per implementare il backplane del server sql e ho utilizzato i passaggi illustrati nella migrazione 1.x a 2.0 delineata here. La soluzione si costruisce, ma quando si colpisce la pagina che utilizza SignalR il riferimento allo script "/ signalr/hubs" restituisce un errore 500.

Ecco un elenco di passaggi che ho preso finora.

  • Utilizzando nuget, sono stati rimossi tutti i riferimenti e le dipendenze correlati a SignalR 1.1.2. Doppio controllo/bin e/pacchetti delle directory per assicurarsi che non facciano più riferimento alle vecchie librerie. Questo è per commento trovato sul github issue relativo ad un aggiornamento 2.0 che diceva che disinstallare e reinstallare SignalR era la via da seguire per un aggiornamento.

  • installata SignalR 2.0.0-beta2 tramite Package Manager Console (PMC) Install-Package Microsoft.AspNet.SignalR -Pre

  • installato SQL Server Messaging backplane utilizzando PMC Install-Package Microsoft.AspNet.SignalR.SqlServer -Pre

  • Rimosso RouteTable.Routes.MapHubs(); da Global.asax

  • Creazione della classe di avvio nella root del progetto.

Startup.cs

using Microsoft.AspNet.SignalR; 
using Microsoft.Owin; 
using Owin; 

namespace My.NameSpace 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.MapHubs(); 
     } 
    } 
} 
  • Aggiunto <add key="owin:AppStartup" value="My.NameSpace.Startup, App_Code"/> a <appSettings> all'interno web.config

  • Mettere un punto di interruzione nel metodo Startup.Configuration() e verificato che è stato colpito ed eseguito app.MapHubs senza eccezioni all'avvio dell'app

  • Non utilizzo Connessione permanente, quindi non ho incluso la riga app.MapConnection<MyConnection>("/echo"); e non ho problemi di definizione ambigui.

    pagina app
  • La chat fa riferimento alle seguenti librerie

    • jquery-1.8.3.js
    • jquery.signalR-2.0.0-beta2.js
    • <script src='/signalr/hubs'></script>
    • AngularJS v1. 1.5
  • Quando il progetto viene eseguito, /signalr/hubs non si trova dalla pagina della chat app

  • strumenti Chrome dev restituisce 500 Internal Server Error per il /signalr/hubs chiamata sulla scheda di rete.

  • il file system non ha una directory /signalr/hubs

Il mio prossimo passo è quello di vedere se riesco a creare una nuova soluzione con un hub molto semplice e vedere se riesco a ottenere il segnale 2.0 a lavorare. Se lo fa, confronterò le due soluzioni per vedere quali sono le differenze.

Qualcuno ha un'idea di cos'altro potrei controllare o ricercare per farlo funzionare?

domande StackOverflow correlati con un problema simile: one, two

risposta

12

Si scopre che il problema è stato risolto modificando la configurazione di progetto per uso locale server Web IIS invece di Visual Studio Developer Server (Cassini).

trovato la causa andando a /signalr/hubs URL nel browser e vedere l'errore del server che era

System.PlatformNotSupportedException: This operation requires IIS integrated pipeline mode.

Alcuni googling alzato questa page, che ha detto che l'errore è stato causato da ASP.NET Development Server non supporto della modalità pipeline integrata.

È possibile modificare il server utilizzato facendo clic con il pulsante destro del mouse sul progetto, selezionare Proprietà, accedere alla scheda Web e nella sezione server selezionare "Usa server Web IIS locale".

+0

Hai salvato la mia giornata! – Christopher

+0

La cosa strana è che la mia opzione era già impostata su IIS Express (Visual Studio 2013). Come ho ottenuto questo lavoro sta cambiando l'opzione per l'host esterno, quindi tornare a IIS Express e ha funzionato. – Dev

0

Nel mio caso IIS non è stato installato correttamente. Ho appena dovuto reinstallarlo:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i 
Problemi correlati