私は SignalR を使い始めたばかりなので、非常に基本的なことを見落としていた場合はご容赦ください。私の目標は、特定のイベントがサーバー側で発生するまでユーザーが座る「保留ページ」を作成し、そのページにプロセスの次のステップにユーザーを連れて行くように指示することです。クライアントがサーバーで呼び出しを呼び出しているときに適切に動作するように見えるサーバー上にハブを作成しました。
問題は、クライアントがサーバーからの呼び出しをまったく受信せず、ブラウザ コンソールの出力から、クライアントがハブへの必要な接続を確立していないように見えることです。
最新の Google Chrome と MS IE v11 でこれを試しました。各ブラウザに同じメッセージが記録されます。
以下は、MS IE からのブラウザー コンソール出力です (Chrome コンソール出力をテキストに保存する簡単な方法が見つかりませんでした)。
[10:32:02 GMT-0400 (Eastern Daylight Time)] SignalR: Client subscribed to hub 'signinghub'.
[10:32:02 GMT-0400 (Eastern Daylight Time)] SignalR: Negotiating with '/signalr/negotiate?clientProtocol=1.4&connectionData=%5B%7B%22name%22%3A%22signinghub%22%7D%5D'.
[10:32:02 GMT-0400 (Eastern Daylight Time)] SignalR: Connecting to websocket endpoint 'ws://localhost:53915/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=orv901EJmuVZdJis9VFLBMVTl8bgZlbK5pWdAxiugZiYOCPPxytCCjewTQ%2FxcM0bMcGxDdRY6T46ApZSWnL%2BRO8kkllhVhYr1ZROWGSdyFQ2580j%2BR6lXitPVhdXncon&connectionData=%5B%7B%22name%22%3A%22signinghub%22%7D%5D&tid=8'.
[10:32:02 GMT-0400 (Eastern Daylight Time)] SignalR: Websocket opened.
[10:32:07 GMT-0400 (Eastern Daylight Time)] SignalR: webSockets timed out when trying to connect.
[10:32:07 GMT-0400 (Eastern Daylight Time)] SignalR: Closing the Websocket.
[10:32:07 GMT-0400 (Eastern Daylight Time)] SignalR: This browser doesn't support SSE.
[10:32:07 GMT-0400 (Eastern Daylight Time)] SignalR: Binding to iframe's load event.
[10:32:12 GMT-0400 (Eastern Daylight Time)] SignalR: foreverFrame timed out when trying to connect.
[10:32:12 GMT-0400 (Eastern Daylight Time)] SignalR: Stopping forever frame.
[10:32:12 GMT-0400 (Eastern Daylight Time)] SignalR: Opening long polling request to 'http://localhost:53915/signalr/connect?transport=longPolling&clientProtocol=1.4&connectionToken=orv901EJmuVZdJis9VFLBMVTl8bgZlbK5pWdAxiugZiYOCPPxytCCjewTQ%2FxcM0bMcGxDdRY6T46ApZSWnL%2BRO8kkllhVhYr1ZROWGSdyFQ2580j%2BR6lXitPVhdXncon&connectionData=%5B%7B%22name%22%3A%22signinghub%22%7D%5D&tid=4'.
[10:32:13 GMT-0400 (Eastern Daylight Time)] SignalR: Long poll complete.
[10:32:13 GMT-0400 (Eastern Daylight Time)] SignalR: Opening long polling request to 'http://localhost:53915/signalr/poll?transport=longPolling&messageId=d-65C891D3-Q%2C0%7CU%2C0%7CV%2C3%7CW%2C0&clientProtocol=1.4&connectionToken=orv901EJmuVZdJis9VFLBMVTl8bgZlbK5pWdAxiugZiYOCPPxytCCjewTQ%2FxcM0bMcGxDdRY6T46ApZSWnL%2BRO8kkllhVhYr1ZROWGSdyFQ2580j%2BR6lXitPVhdXncon&connectionData=%5B%7B%22name%22%3A%22signinghub%22%7D%5D&tid=10'.
[10:32:17 GMT-0400 (Eastern Daylight Time)] SignalR: longPolling timed out when trying to connect.
[10:32:17 GMT-0400 (Eastern Daylight Time)] SignalR: Aborted xhr request.
[10:32:17 GMT-0400 (Eastern Daylight Time)] SignalR: Stopping connection.
[10:32:17 GMT-0400 (Eastern Daylight Time)] SignalR: Fired ajax abort async = true.
SignalRの概要を読み、最も優先度の高い通信テクノロジから最も優先度の低い通信テクノロジへのフェールオーバーが試行されることを知っています。私が言えることは、通信するために4つの方法すべてを試し、すべての方法で失敗し、最終的に「接続の停止」であきらめていることです。メッセージ。
開発には VS 2013 と IIS Express、SignalR v2.1.0、ASP.NET MVC 5 を使用しています。
クライアントコードを含めるように更新
以下は、ハブへの接続に使用されるクライアントのスクリプトです。
<!--Reference the SignalR library. -->
<script src="~/Scripts/jquery.signalR-2.1.0.min.js" type="text/javascript"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="~/signalr/hubs"></script>
<script>
$.connection.hub.logging = true;
$(function () {
// Reference the auto-generated proxy for the hub.
var chat = $.connection.signingHub;
// Create a function that the hub can call back to redirect the user
chat.client.signDocument = function () {
// Add the message to the page.
window.location.assign("/Signing/Initiate/" + ContractID.value + "?clientUserId=" + ClientUserId.value);
};
// Start the connection.
$.connection.hub.start();
});
</script>
より詳しい情報...
これは、DevExpress から使用しているサード パーティのコンポーネント スイートが原因である可能性があることを発見しました。こちらのチャット サンプルに従うことができ、SignalR はうまく機能しています。DevExpress から MVC 拡張コントロールを追加するとすぐに、SignalR 接続ネゴシエーションが中断されます。回答が得られることを願って、こちらのサポート フォーラムで質問にコメントしました。
ご協力いただきありがとうございます。