31

開発環境で websocket を動作させようとしています:

  • ビジュアル スタジオ 2010
  • ウィンドウズ7
  • シグナル R 0.51
  • 最新の Chrome / Firefox

残念ながら、JavaScript クライアントはロング ポーリングを使用しています。クライアント側で Web ソケットを強制すると、まったく接続できなくなります。

$.connection.hub.start({ transport: ['webSockets'] })

サーバー コードは自己ホスト型で、サンプルに基づいており、次のようになります。

static void Main(string[] args)
{
    string url = "http://localhost:8081/";
    var server = new Server(url);

    // Map the default hub url (/signalr)
    server.MapHubs();

    // Start the server
    server.Start();

    Console.WriteLine("Server running on {0}", url);

    // Keep going until somebody hits 'x'
    while (true)
    {
        ConsoleKeyInfo ki = Console.ReadKey(true);
        if (ki.Key == ConsoleKey.X)
        {
            break;
        }
    }
}

public class MyHub : Hub
{            
    public void Send(string message)
    {
        Clients.addMessage(message);
    }
}

私は周りを検索しましたが、決定的なものは何も見つかりませんでした。Visual Studio 2012 を使用する必要がありますか、それとも Windows 8 / IIS 8 でのみ機能しますか?

4

4 に答える 4

58

Windows 8 / .NET 4.5 でも最初は動作しませんでしたが、これらの追加のヒントを使用して、最終的に動作するようになりました。

  • Websocket サポートをインストールする

    -> Turn Windows features on or off
    -> Internet Information Services 
    -> World Wide Web Services 
    -> Application Development Features 
    -> WebSocket Protocol
    
  • web.config の appSettings の下に、次の設定を追加します。

    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    

SignalR は Websocket を自動的にネゴシエートします。指定する必要はなく、コードに特別なものは必要ありません。

于 2012-08-01T13:09:26.133 に答える
23

この回答https://stackoverflow.com/a/9135334/700926に基づいて、SignalR での WebSocket サポートが Windows 8/IIS8 に依存していることがわかります。回答は、SignalR の github ページの wiki ページも指していますが、そのページはもう存在しません。

しかし、github で wiki リポジトリを複製し、いくつかのリビジョンに戻ると、SignalR.WebSocketsSignalR の github ページによると、もう存在しないプロジェクトのドキュメントが表示されます (wiki サイトが削除された理由を説明している可能性があります)。今年2月からのウィキページの改訂では、次のSignalR.WebSocketsように述べています。

SignalR.WebSockets パッケージを既存の SignalR プロジェクトに追加して、クライアントがWebSocket プロトコルを使用して接続できるようにすることができます。SignalR jQuery クライアントは WebSocket 経由で自動的に接続を試みるため (ブラウザーがサポートしている場合)、WebSocket を SignalR ベースのアプリケーションに追加するためにクライアント側で変更を加える必要はありません。

SignalR.WebSockets は、 ASP.NET 内からの着信 WebSocket 接続をリッスンするために、 Microsoft.WebSocketsに依存して います。このパッケージは、ASP.NET 4.5 および IIS 8.0 に追加された新しい WebSockets サポートに依存しています。その結果、SignalR.WebSockets パッケージは Windows 8 マシンでのみ動作します (.NET 4.5 は以前のバージョンの Windows にインストールされますが、IIS 8.0 には Windows 8 が必要です)。(開発者プレビューを使用して) Windows 8 マシンをセットアップする方法の詳細については、 こちらを参照してください。

上記で提供できたものよりも新しい情報を検索しようとしましたが、私が知る限り、SignalR wiki は現在のバージョンでこのトピックを明示的にカバーしていません。

于 2012-07-22T16:57:18.787 に答える