SignalR funzionava mentre il progetto era ASP.NET MVC3. Ora l'ho aggiornato a MVC5 (non è così facile da fare, devo dirtelo)./signalr/hub 404 non trovato dopo l'aggiornamento a MVC5
Poi ho notato che signalR non funzionava. Ho seguito il libro, reinstallato SignalR alla versione 2.1.0, installato OWIN (must-have per v2 +) e aggiunto la classe di avvio al progetto.
Questa è la mia classe startup.cs, si siede alla cartella principale del progetto:
[assembly: OwinStartup(typeof(SISTEM.Startup))]
namespace SISTEM
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
non vedo alcun problema qui, ma forse mi manca qualcosa ...
Ora qui è frammento il mozzo:
namespace SISTEM
{
public class PostingHub : Hub
{
public void Test(string hello)
{
Clients.All.hello(hello);
}
}
}
proxys Poi i riferimento generato in vista:
<script src="~/Scripts/jquery.signalR-2.1.0.min.js"></script>
<script src="~/signalr/hubs"></script>
L'ho ispezionato nel fiddler e posso vedere che la richiesta/signalr/hubs sta generando HTTP 404 non trovata.
Ora, non ero pigro, ho provato diverse cose:
- Patch IIS per gli URL senza estensione - Non dovrebbe essere un problema dal momento che sto usando Win8 RouteTable.Routes.MapHubs
- chiamata() prima di RegisterRoutes (RouteTable.Routes) - VS non lo consentirà. Mi dà un errore dicendo che è obsoleto, usa OWIN.
- Strumento scaricato per la generazione di proxy javascript (SignarR Utils), in modo da poterli consultare manualmente in seguito. Ho cercato di generare, senza errori, ma generato js era vuoto. Ho provato diverse volte. Questo è stato per me più interessante. Forse per qualche motivo il proxy non può essere generato.
Qualsiasi aiuto sarebbe apprezzato.
UPDATE: risposta da/signalr/hub
<!DOCTYPE html>
<html>
<head>
<title>The resource cannot be found.</title>
<meta name="viewport" content="width=device-width" />
</head>
<body bgcolor="white">
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
<h2> <i>The resource cannot be found.</i> </h2></span>
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
<b> Description: </b>HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.
<br><br>
<b> Requested URL: </b>/signalr/hubs<br><br>
<hr width=100% size=1 color=silver>
<b>Version Information:</b> Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34212
</font>
</body>
[HttpException]: The controller for path '/signalr/hubs' was not found or does not implement IController.
at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Ha colpito questa riga "app.MapSignalR();"? –
No, non lo è. Buon punto Se la linea viene colpita all'avvio dell'app? –
Sì, altrimenti non eseguirà il mapping del percorso del segnale, per fare in modo che signalR funzioni deve raggiungere questa linea all'avvio dell'applicazione. Controlla il tuo file di configurazione, se ti manca qualcosa relativo a OWIN. –