2012-04-03 15 views
13

Ho aggiornato a .NET 4.5, ora SignalR sembra insistente sull'uso di WebSockets in Firefox/Chrome - anche se sono solo su Windows 7 che non dispone di un server WebSocket.SignalR - Come disabilitare WebSockets

la richiesta non riesce, ovviamente:

Firefox can't establish a connection to the server at ws://www.site.local/signalr?connectionData= 

Come forzo SignalR dimenticare WebSockets e utilizzare polling lungo, o c'è un modo di creare WebSockets per Windows 7 che mi manca?

aggiornamento .... sto usando SignalR 0.4:

<package id="SignalR" version="0.4.0" /> 
    <package id="SignalR.Hosting.AspNet" version="0.4.0.0" /> 
    <package id="SignalR.Js" version="0.4.0.1" /> 
    <package id="SignalR.Server" version="0.4.0.0" /> 
    <package id="SignalR.StructureMap" version="0.4.1" /> 

risposta

25

ho trovato la risposta qui:

https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client

In sostanza:

$.connection.hubs.start({ transport: 'longPolling' }, function() { 
    console.log('connection started!'); 
}); 
+1

Aggiornamento a SignalR 0.4 e tenterà solo i websocket se il server lo supporta. – davidfowl

+0

Sto usando SignalR 0.4 (vedi il mio aggiornamento sopra) – reach4thelasers

+0

SE stai su .NETFramework 4.5 proverà sempre ad usare websockets poiché non c'è un buon modo per rilevarlo adesso. – davidfowl

8

Al fine di disabilitare un trasporto sul lato server, è necessario utilizzare qualcosa del genere:

using Microsoft.AspNet.SignalR; 
using Microsoft.AspNet.SignalR.Transports; 
using Owin; 
namespace MyApplication 
{ 
    public static class Startup 
    { 
     public static void ConfigureSignalR(IAppBuilder app) 
     { 
      // If using the global dependency resolver 
      TurnOfForeverFrame(GlobalHost.DependencyResolver); 
      app.MapSignalR(); 
     } 
     public static void TurnOfForeverFrame(IDependencyResolver resolver) 
     { 
      var transportManager = resolver.Resolve<ITransportManager>() as TransportManager; 
      transportManager.Remove("foreverFrame"); 
     } 
    } 
} 

La soluzione @ reach4thelasers la disabilita solo nel client, ma il client può riattivare il trasporto e la connessione.

Cheers.