web-dev-qa-db-ja.com

SignalRネゴシエート404

SignalR2.0を使用しています。 VS 2012でローカルに実行すると、すべて正常に機能します。ただし、IISでサイトを公開すると、機能しなくなります。サイトは読み込まれますが、スクリプトの1つが404 NotFoundを返します。スクリプトは次のようなものです。

https://example.com/signalr/negotiate?xxx

この道は確かに存在しません。正しいパスは次のとおりです。

https://example.com/ private/ signalr/negotiate?xxx

太字の部分に注意してください。

Webサイト内( https://example.com/ )別のアプリケーションがあります( https://example.com/private/ )。これはSignalRを使用しています。

シグナル/ハブパスは私のプライベートサイトからアクセスできるため、これはSignalRのバグのようです。

13
user1594757

私も同様の問題を抱えていました。 / 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にルーティングされました。

19
styfle

同じ問題が発生しました。これはすべてCORSに関するものです。次のように、Sturtup.csのCORS構成にホストURLを追加する必要があります。

            services.AddCors(option =>
        {
            option.AddPolicy("AutomationCors", builder =>
            {
                builder.AllowAnyMethod()
                    .AllowAnyHeader()
                    .WithOrigins("YOUR LOCALHOST URL",
                                 "YOUR Host URL")
                    .AllowCredentials();
            });
        });
2
mehdipayervand

Signalrを使用するWebサイトがルートサイトとして実行されていない場合にも、同じ問題が発生しました。以下の解決策は私のために働いた。 _/signalr_を使用する代わりに、_../signalr_を使用します。どのサイト名フォルダでも機能します。ハードコードされた名前はありません 'MyApp' var connection = $.hubConnection('../signalr', {useDefaultPath: false});

2
Jyo Reddy

同じ問題がありました。ルートサイトの仮想ディレクトリとして実行されている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);
    };
}
1
YY_Minneapolis

おそらく、アプリケーションにMapSignalR()を追加しました( https://example.com/private/ )。ルートで必要な場合は、Webサイトで構成を行います( https://example.com/

0
Gustavo Armenta