mVCアプリケーションでSignalRを使用しようとしました。それはうまく機能しますが、Chromeコンソールで次のエラーが表示されます
WebSocket connection to 'ws://localhost:18245/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=bNDGLnbSQThqY%2FSjo1bt
8%2FL45Xs22BDs2VcY8O7HIkJdDaUJ4ftIc54av%2BELjr27ekHUiTYWgFMfG6o7RaZwhf
fpXavzWQ1jvkaxGm5rI%2BWtK7j0g1eQC2aOYP366WmRQLXCiYJfsm4EbwX6T8n2Aw
%3D%3D&connectionData=%5B%7B%22name%22%3A%22importerhub%
22%7D%5D&tid=9' failed: HTTP Authentication failed; no valid credentials available
面白いことは、ハブを介してコントローラーから呼び出すjqueryメソッドが正常に機能することです。
jQuery:
$(function () {
// Initialize the connection to the server
var importerHub = $.connection.importerHub;
// Preparing a client side function
// called sendMessage that will be called from the server side
importerHub.client.sendMessage = function (message) {
showOrUpdateSuccessMessage(message);
};
$.connection.hub.start();
});
コントローラ:
var hubContext = GlobalHost.ConnectionManager.GetHubContext<ImporterHub>();
hubContext.Clients.All.sendMessage("All operations complete");
.Net v4.5.1、SignalR v2.1.2.0およびIIS 8.5 with Windows Authenticationを使用しています。
このエラーを修正するにはどうすればよいですか?
Chromeの問題に直面しているようです。問題は、ChromeがWebSocketのWindows認証を適切に処理しないことです。
以下は、数年前に提出されたChromeはHTTP認証の形式をサポートしていませんでした。
https://code.google.com/p/chromium/issues/detail?id=123862
この問題は、基本認証およびダイジェスト認証では解決されていますが、Windows(NTLM/Negotiate)認証では解決されていません。 Chrome WebSocketsによるWindows認証のサポートの進捗状況を追跡するために1か月前に作成された問題がありました。
https://code.google.com/p/chromium/issues/detail?id=423609
どうやら、Windows認証の問題はChrome devチャネルで部分的に修正されますが、WebSocketを確立する前にクライアントがサーバーで既に認証されている場合のみです。
コントローラーからsendMessage
を呼び出すことができる理由は、WebSocket接続が失敗したときにSignalRが自動的にWebSocket以外のトランスポート(サーバー送信イベントまたはロングポーリング)の使用にフォールバックするためです。 ChromeはSignalRの他のトランスポートでWindows認証を適切に処理します。
何も変更しないことをお勧めします。 Chromeは最終的にWebSocketのWindows認証をサポートします。
chromeコンソールのエラー以外の唯一の本当の問題は、ChromeでSignalR接続を確立するのに少し時間がかかる可能性があることです。それが大きな問題である場合、いつでもできます クライアントが使用するトランスポートを指定してください 。したがって、Chromeでは、serverSentEvents
とlongPolling
しか試すことができませんでしたが、その後Chromedoesは問題を修正します。コードを変更するまで、可能な限り最適なトランスポートを使用しません。
バグは生きているようですが、彼らはそれに取り組んでいるようです。 https
/wss
を使用して問題を解決できます。
読み取り codeMonkey s answer at SignalRはWindows統合認証で動作しない 。
ここに私がそれを解決した方法があり、私にとってこれはChromeとは何の関係もありませんでした。 chromeを使用しており、リアルタイムデータを処理しています。私のエラーは春のセキュリティでした
.antMatchers("/ws/myapp", "/http/myaap", "/topic/**", "/app/**" ).permitAll()
Chrome: here からダウンロードする)のDevチャンネルに切り替えることで、この問題を解決できました。インストールしたら、chrome:// flagsでdevフラグを有効にする必要がありました。 /。「認証のためのWebSocket接続の再利用を有効にする」を検索し、機能を有効にします。バージョン69以上である必要があります