まず、プロジェクトの下に新しいHubsフォルダを作成しました
また、以下の図のようにフォルダの下に新しいPositionVehicleファイルを作成します。
プロジェクトを再構築し、ビューページで以下の2つのjsファイルを参照します
手記!!!
「/Scripts/jquery.signalR-2.2.2.min.js」ファイルはSignalRのインストールに追加され、物理ディスク上に存在します
「/signalr/hubs」はSignalRは自動的に生成されます物理ディスクには存在しません!
SignalRが生成したjsファイルを見てみよう。以下のように。
/*! * ASP.NET SignalR JavaScriptライブラリ v2.2.2 * http://signalr.net/
* * 著作権 (c) .NET Foundation 無断転載を禁じます。 * Apache ライセンス バージョン 2.0 のもとでライセンスされています。 ライセンス情報についてはプロジェクトのルートLicense.txtを参照してください。
* */
<参照パス="..\..\SignalR.Client.JS\Scripts\jquery-1.6.4.js" /> <参照パス="jquery.signalR.js" /> (関数 ($, window, undeed) { <param name="$" type="jQuery" /> 「厳格を使う」;
if(typeof ($.signalR) !== "function") { 新しいエラーを投げろ("SignalR: SignalRは読み込まれていない。 ~/signalr/js.の前にjquery.signalR-x.jsが必ず参照されているようにしてください。"); }
var signalR = $.signalR;
function makeProxyCallback(hub, callback) { 返還関数() { クライアントハブメソッドを呼び出します callback.apply(hub, $.makeArray(arguments)); }; }
function registerHubProxies(instance, shouldSubscribe) { var key、hub、memberKey、memberValue、subscriptionMethod;
(実例のキー) { もし (instance.hasOwnProperty(key)) { hub = インスタンス[キー];
もし(!( hub.hubName)) { クライアントハブではありません 続けてください; }
もし(すべきサブスクライブ){ ハブイベントに登録したいのです subscriptionMethod = hub.on; } そうでなければ { ハブイベントの購読を解除したいのです subscriptionMethod = hub.off; }
ハブ内の全メンバーをループして、クライアントハブの機能を見つけて購読解除します for (memberKey in hub.client) { if (hub.client.hasOwnProperty(memberKey)) { memberValue = hub.client[memberKey];
もし(!$.isFunction(memberValue))) { クライアントハブ機能ではありません 続けてください; }
subscriptionMethod.call(hub, memberKey, makeProxyCallback(hub, memberValue)); } } } } }
$.hubConnection.prototype.createHubProxies = function () { var プロキシ = {}; this.starting(function () { ハブプロキシを加入登録として登録してください (インスタンス、shouldSubscribe) registerHubProxies(proxies, true);
this._registerSubscribedHubs(); }).disconnected(function () { 「切断」時にすべてのハブプロキシのサブスクライブを解除してください。 これは、機能的なコールバックを再加えないようにするためです。 (インスタンス、shouldSubscribe) registerHubProxies(プロキシ、false); });
プロキシ['positionVehicle'] = this.createHubProxy('positionVehicle'); プロキシ['positionVehicle'].client = { }; プロキシ['positionVehicle'].server = { こんにちは:関数(名前){ return proxies['positionVehicle'].invoke.apply(proxies['positionVehicle'], $.merge(["Hello"], $.makeArray(arguments)))); } };
代理を返すこと; };
signalR.hub = $.hubConnection("/signalr", { useDefaultPath: false }); $.extend(signalR, signalR.hub.createHubProxies());
}(window.jQuery, window));
では、試してみよう。コードは以下の通りだ:
検査結果は以下の通りです。
最初に受け取った2つのメッセージはどちらも私たち自身が送ったもので、私たちも受信しました。3つ目のメッセージは私が別のブラウザを開いて送ったもので、こちらも受信しました。
メッセージを受け取ったとき、それはwebsocketではなくHTTPポールでした。なぜなら、私たちのjsがエラーを報告したからです
なぜjsエラーが報告されたのかについては、次回お話しします。
|