SignalR2.0を使用しています。 VS 2012でローカルに実行すると、すべて正常に機能します。ただし、IISでサイトを公開すると、機能しなくなります。サイトは読み込まれますが、スクリプトの1つが404 NotFoundを返します。スクリプトは次のようなものです。
この道は確かに存在しません。正しいパスは次のとおりです。
https://example.com/ private/ signalr/negotiate?xxx
太字の部分に注意してください。
Webサイト内( https://example.com/ )別のアプリケーションがあります( https://example.com/private/ )。これはSignalRを使用しています。
シグナル/ハブパスは私のプライベートサイトからアクセスできるため、これはSignalRのバグのようです。
私も同様の問題を抱えていました。 / signalr URL を構成するためのドキュメントは次のとおりです。
ただし、私のソリューションはドキュメントとは異なります。標準のapp.MapSignalR()
を変更する代わりに、/MyApp/signalr
を使用するようにクライアントコードを変更しました。これが「MyApp」が私のWebアプリケーションの仮想ディレクトリであるコードです。
var connection = $.hubConnection('/MyApp/signalr', {useDefaultPath: false});
var changesHub = connection.createHubProxy('changesHub');
changesHub.on('userCountChanged', function (count) {
$('#user-count').text(count);
});
connection.start().done(function () {
console.log('Hub has started');
changesHub.invoke('subscribeToChanges', user.id);
});
逆の方法(MapSignalRを/ signalrパスに変更)を試しましたが、これは機能せず、ネゴシエーションは/ MyApp/signalr/negotiateにルーティングされました。
同じ問題が発生しました。これはすべてCORSに関するものです。次のように、Sturtup.csのCORS構成にホストURLを追加する必要があります。
services.AddCors(option =>
{
option.AddPolicy("AutomationCors", builder =>
{
builder.AllowAnyMethod()
.AllowAnyHeader()
.WithOrigins("YOUR LOCALHOST URL",
"YOUR Host URL")
.AllowCredentials();
});
});
Signalrを使用するWebサイトがルートサイトとして実行されていない場合にも、同じ問題が発生しました。以下の解決策は私のために働いた。 _/signalr
_を使用する代わりに、_../signalr
_を使用します。どのサイト名フォルダでも機能します。ハードコードされた名前はありません 'MyApp' var connection = $.hubConnection('../signalr', {useDefaultPath: false});
同じ問題がありました。ルートサイトの仮想ディレクトリとして実行されているWebサイト。何らかの理由で、../signalrのように../をプレフィックスとして付けることはできませんでしたが、。/ signalrは機能しました。
私のサンプルコード:
function initSR() {
// logs signalr messages
$.connection.hub.logging = true;
// Declare a proxy to reference the hub.
var chat = $.connection.myHub;
$.connection.hub.url = "./signalr";
$.connection.hub.start();
// Create a function that the hub can call to broadcast messages.
chat.client.broadcastMessage = function (message) {
// Process Message, take action upon receipt
alert(message);
};
}
おそらく、アプリケーションにMapSignalR()を追加しました( https://example.com/private/ )。ルートで必要な場合は、Webサイトで構成を行います( https://example.com/ )