1

サーバーにファイルをアップロードしてファイルを処理するためのアップロードページを持つ MVC Web アプリケーションがあります。処理には時間がかかる場合があるため (10 ~ 30 分)、進行状況バーを使用して完了率を表示します。

このページには、SignalR を初期化する次のコードがあります。

// Define functions to facilitate push from the server.
m_uploadHub = $.connection.importDataHub;

$.extend(m_uploadHub.client, {
    updateProgress: function (pct) {
        progressbar.progressbar("value", pct);
    },

    updateStatus: function (status) {
        $("#status").html(status);
    },

    updateProgressBarText: function (text) {
        progressLabel.text(text);
    },

    complete: function () {
        // no
    }
});

try {
    $.connection.hub.start().done(function () {
        // Set connection id to hidden field
        $('#SignalRConnectionId').val($.connection.hub.id);
    });
}
catch (e) {
    alert('SignalR hub start fail: ' + e);
}

つまり、ページが読み込まれると、上記の JavaScript コードが実行され、SignalR が開始され、停止することはありません。

この設計は正しいですか、それともユーザーがアップロード ボタンをクリックして実際にファイルをアップロードする場合にのみ$.connection.hub.start()を使用する必要がありますか? また、MVC アクションが戻ったときに$.connection.hub.stop()
で接続を停止する必要がありますか? (ファイルが正常にアップロードされたか、いくつかのエラー/警告が返されました)

ご意見をお聞かせください。

4

1 に答える 1

1

SignalR 接続の開始と停止は、さまざまな方法で利用できます。ただし、SignalR 接続をすぐに開始し、決して停止しない方がはるかに一般的であると私は主張します。

あなたの場合、アップロードがクリックされた/完了した前後にSignalR接続を使用したい「場合」に応じて、別のアプローチを取ることができます。

ユーザーがアップロードをクリックしない限り、SignalR 接続を本当に使用しない場合は、アップロード ボタンがクリックされたときにのみ開始する必要があります。アップロードが完了した後に SignalR 接続を使用しない場合は、必ず停止してください。使用していない場合は、サーバーを占有しておく必要はありません。

わずかに異なる問題 (@Steve によって提起された) に対処するには: アプリケーションで SignalR を使用しているのがこのアップロード部分だけである場合、それはおそらくやり過ぎです。

于 2013-05-31T18:01:34.850 に答える