23

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

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

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

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

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

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

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

4

8 に答える 8

22

同様の問題がありました。/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 にルーティングされていました。

于 2014-05-16T01:53:04.320 に答える
3

同じ問題がありました。ルート サイトの仮想ディレクトリとして実行されている 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);
    };
}
于 2017-01-03T19:42:09.263 に答える
3

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

于 2015-11-15T23:43:57.160 に答える
2

私は同じ問題に直面しました。私が行っていた間違いは、ConfigureサービスのようにSignal Urlをマッピングしていたように、間違ったエンドポイントURLを呼び出していたのです/notificationが、[API-Host]/api/notification. URLからの削除apiと呼び出しが[API-Host]/notification修正されました。

于 2020-09-01T03:32:00.027 に答える
0

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

于 2013-11-11T18:12:17.197 に答える