2017-04-21 13 views
2

スタンドアロンのSignalRサーバを使用し、我々が利用しているいくつかのハブを構築しようとしています。彼らは正しく動作していますが、私はSignalRにWebSocketsトランスポートを利用させることができませんでした。SignalNETがASPNETでWebsocket Transportを使用していない4.6

一般に、私は、WebResetを使用してSignalRをネゴシエートするための要件に関する現在の情報を見つけることができませんでした。誰かがWebSocketが使われていない理由を理解するのに役立つことができますか?

当社の構成について少し:

  • SignalRサーバー:
    • "Microsoft.AspNet.SignalR": "2.2.1"
    • フレームワーク:net462
  • ホスティング:
    • Azure App Se rvices
      • ウェブソケット:
      • CORSの場合:可起源:*
      • 価格ティア:基本:1小
      • の.NET FrameworkのバージョンV4.6
      • SSL証明書

最新のバージョンのChromeを使用していますJSクライアントとしてEdgeを使用します。

ます。https://customdomain/signalr/negotiate?clientProtocol=1.5

Startup.cs

app.UseOwinAppBuilder(map => 
{ 
    map.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
    HubConfiguration hubConfiguration = new HubConfiguration 
    { 
     EnableDetailedErrors = hubConfig.EnableDetailedErrors.Value, 
    }; 
    map.MapSignalR("/signalr", hubConfiguration); 
}); 


public static IApplicationBuilder UseOwinAppBuilder(this IApplicationBuilder app, Action<IAppBuilder> configuration) 
{ 
    if (app == null) 
    { 
     throw new ArgumentNullException(nameof(app)); 
    } 

    if (configuration == null) 
    { 
     throw new ArgumentNullException(nameof(configuration)); 
    } 

    return app.UseOwin(setup => setup(next => 
    { 
     AppBuilder builder = new AppBuilder(); 
     IApplicationLifetime lifetime = (IApplicationLifetime)app.ApplicationServices.GetService(typeof(IApplicationLifetime)); 
     IServiceProvider serviceProvider = (IServiceProvider)app.ApplicationServices.GetService(typeof(IServiceProvider)); 
     IHostingEnvironment hostingEnv = (IHostingEnvironment)app.ApplicationServices.GetService(typeof(IHostingEnvironment)); 

     AppProperties properties = new AppProperties(builder.Properties); 
     properties.AppName = hostingEnv.ApplicationName; 
     properties.OnAppDisposing = lifetime.ApplicationStopping; 
     properties.DefaultApp = next; 

     configuration(builder); 

     return builder.Build<Func<IDictionary<string, object>, Task>>(); 
    })); 
} 

SignalRサーバからの応答をネゴシエート:ここ

は、私たちのSignalRサーバの設定のいくつかはあります& connectionData = [{"name": "hubname"}]

{ 
    "Url": "/signalr", 
    "ConnectionToken": "MTY5ODlmZmItMDUxNC00ZmJhLTgzZjMtOTcyOGM5ZTUxY2IwOg==", 
    "ConnectionId": "16989ffb-0514-4fba-83f3-9728c9e51cb0", 
    "KeepAliveTimeout": 20, 
    "DisconnectTimeout": 30, 
    "ConnectionTimeout": 110, 
    "TryWebSockets": false, 
    "ProtocolVersion": "1.5", 
    "TransportConnectTimeout": 5, 
    "LongPollDelay": 0 
} 

JSクライアントの初期化:

$.connection.hub.logging = true; 
$.connection.hub.start({ 
    transport: ['webSockets', 'longPolling'], 
    withCredentials: false 
}); 

フルWeb。設定:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.web> 
     <httpRuntime targetFramework="4.6"/> 
     <compilation targetFramework="4.6" strict="true">   
     </compilation> 
    </system.web> 
    <system.webServer> 
     <handlers> 
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/> 
     </handlers> 
     <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/> 
    </system.webServer> 
</configuration> 

クロームツールのコンソールメッセージ:

[19:05:22 GMT-0400 (Eastern Daylight Time)] SignalR: Fired ajax abort async = false. 
[19:05:22 GMT-0400 (Eastern Daylight Time)] SignalR: Auto detected cross domain url. 
[19:05:22 GMT-0400 (Eastern Daylight Time)] SignalR: Client subscribed to hub 'concurrentaccesshub'. 
[19:05:22 GMT-0400 (Eastern Daylight Time)] SignalR: Negotiating with 'https: //customdomain/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22concurrentaccesshub%22%7D%5D'. 
[19:05:22 GMT-0400 (Eastern Daylight Time)] SignalR: longPolling transport starting. 
[19:05:23 GMT-0400 (Eastern Daylight Time)] SignalR: Opening long polling request to 'https: //customdomain/signalr/connect?transport=longP…Og%3D%3D&connectionData=%5B%7B%22name%22%3A%22concurrentaccesshub%22%7D%5D'. 
[19:05:23 GMT-0400 (Eastern Daylight Time)] SignalR: Long poll complete. 
[19:05:23 GMT-0400 (Eastern Daylight Time)] SignalR: LongPolling connected. 
[19:05:23 GMT-0400 (Eastern Daylight Time)] SignalR: longPolling transport connected. Initiating start request. 

編集の提案あたり、私は明示的にのみ、WebSocketを輸送するトランスポートを設定し2017年4月26日

$.connection.hub.logging = true; 
$.connection.hub.start({ 
    transport: ['webSockets'], 
    withCredentials: false 
}); 

ここにaエラーメッセージ:

SignalR: Auto detected cross domain url. 
SignalR: Client subscribed to hub 'concurrentaccesshub'. 
SignalR: Negotiating with 'http: //localhost:56637/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22concurrentaccesshub%22%7D%5D'. 
SignalR: No transports supported by the server were selected. 
SignalR: Stopping connection. 

答えて

0

説明に基づいて私の側で問題を再現することはできません。 Azure Web AppでASPNET 4.6でWebsocket Transportを使うことができます。

"TryWebSockets":偽、

この応答のWebSocketは、サーバー側で無効になっていることを意味しています。 webSocketでwebSocketを無効にすることもできます。 Web設定ファイルに以下のセクションが含まれているかどうかを確認してください。

<system.webServer> 
    <webSocket enabled="false"/> 
</system.webServer> 

あなたがOWINを使用しているので、あなたがウェブ靴下を使用するStartup.Configureメソッドに次のコードを追加しているかどうかを確認してください

2017年5月2日に更新しました。

public void Configure(IApplicationBuilder app) 
{ 
    app.UseWebSockets(); 
    app.UseSignalR(); 
} 
+0

私のweb.configでは ''はありませんが、これを明示的にtrueに設定しようとします。私はまた私の完全なweb.configを持っている私の最初の質問を迎えようとしています –

+0

IIS Express(Windows 10ホスト)でローカルに実行しているとき、 ''または ' '私は動作の変更があるかどうかを確認します。私は実際にWebSocketModule上の500.19エラーを受け取ります。これはapplicationHost.configで既にtrueと定義されています。また、完全なweb.configファイルで投稿を更新しました。 –

+0

トランスポートの値をJSコードの['webSockets']として明示的にWebSocketを使用するように変更してください。エラーが発生したかどうかを確認し、詳細エラーメッセージを提供してください。 – Amor

関連する問題