2012-04-03 32 views
13

.NET 4.5にアップグレードしましたが、WebSocket Serverを搭載していないWindows 7のみであっても、SignalRはFirefox/ChromeでWebSocketを使用することを強く推奨しています。SignalR - WebSocketを無効にするにはどうすればいいですか?

要求は明らかに失敗:

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

は、どのように私はWebSocketを忘れるとロングポーリングを使用するSignalRを強制しない、または私が欠けているのWindows 7用のWebSocketを設定する方法はありますか?

更新....私は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に更新し、サーバがサポートしている場合にのみ、WebSocketを試行します。 – davidfowl

+0

私はSignalR 0.4を使用しています(上記の私の更新を参照してください) – reach4thelasers

+0

.NETFramework 4.5を使用している場合は、今すぐ検出する方法がないため、常にWebソケットを使用しようとします。 – davidfowl

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

@ reach4thelasersのソリューションは、クライアントでのみ無効にしますが、クライアントはトランスポートを再度有効にして接続できます。

乾杯。

関連する問題