2012-04-03 27 views
13

我升級到.NET 4.5,現在SignalR似乎堅持使用Firefox/Chrome中的WebSockets - 即使我只在沒有WebSocket Server的Windows 7上。SignalR - 如何禁用WebSockets

請求顯然失敗:

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

如何強制SignalR忘掉的WebSockets和使用長輪詢,或者是有適用於Windows 7,我很想念設立的WebSockets的一種方式?

更新....我使用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" /> 

回答

25

我找到了答案在這裏:

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

基本上是:

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

更新到SignalR 0.4,它只會嘗試websockets,如果服務器支持它。 – davidfowl 2012-04-03 17:52:06

+0

我使用的是SignalR 0.4(請參閱上面的更新) – reach4thelasers 2012-04-04 08:18:11

+0

如果您使用的是.NETFramework 4.5,它會一直嘗試使用websockets,因爲目前沒有好的方法來檢測它。 – davidfowl 2012-04-04 17:51:55

8

爲了禁用服務器端的傳輸,你必須使用這樣的東西:

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"); 
     } 
    } 
} 

@da4thelasers'解決方案僅在客戶端禁用它,但客戶端可以重新啓用傳輸和連接。

乾杯。