Спочатку я створив нову папку Hubs під проєктом
Також створіть новий файл PositionVehicle під папкою, як показано на наступному рисунку:
Перебудуємо проєкт, а потім посилаємося на наступні два js-файли на сторінці перегляду
Примітка!!!
Файл "/Scripts/jquery.signalR-2.2.2.min.js" додається до інсталяції SignalR і знаходиться на фізичному диску
"/signalr/hubs" — цеSignalR генерується автоматично, який не можна знайти на фізичному диску!
Давайте розглянемо js-файл, згенерований SignalR, наступним чином:
/*! * ASP.NET JavaScript бібліотека SignalR v2.2.2 * http://signalr.net/
* * Авторські права (c) .NET Foundation. Всі права захищені. * Ліцензовано під ліцензією Apache, версія 2.0. Дивіться License.txt у root проєкту для інформації про ліцензію.
* */
<reference path="..\.\SignalR.Client.JS\Scripts\jquery-1.6.4.js" /> <reference path="jquery.signalR.js" /> (функція ($, вікно, невизначено) { <param name="$" type="jQuery" /> «використовувати суворо»;
якщо (typeof ($.signalR) !== "функція") { throw new Error("SignalR: SignalR не завантажений. Будь ласка, переконайтеся, що jquery.signalR-x.js згадується перед ~/signalr/js."); }
var signalR = $.signalR;
function makeProxyCallback(hub, callback) { Функція повернення () { Викликайте метод client hub callback.apply(hub, $.makeArray(arguments)); }; }
function registerHubProxies(instance, shouldSubscribe) { var key, hub, memberKey, memberValue, subscriptionMethod;
для (ключ у прикладі) { якщо (instance.hasOwnProperty(ключ)) { hub = instance[key];
якщо (!( hub.hubName)) { Не клієнтський хаб продовжити; }
if (shouldSubscribe) { Ми хочемо підписатися на події хабу subscriptionMethod = hub.on; } else { Ми хочемо відписатися від хаб-подій. subscriptionMethod = hub.off; }
Пройдіть по всьому учаснику хабу та знайдіть функції клієнтського хабу для підписки/відписки for (memberKey у 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 () { Зареєструйте хаб-проксі як підписані (екземпляр, має підписатися) registerHubProxies (proxies, true);
this._registerSubscribedHubs(); }).disconnected(function () { Відписайтеся від усіх проксі хаба, коли ми «відключаємося». Це робиться для того, щоб ми не додавали функціональні зворотні виклики. (екземпляр, має підписатися) registerHubProxies (проксі, хибно); });
proxies['positionVehicle'] = this.createHubProxy('positionVehicle'); proxies['positionVehicle'].client = { }; proxies['positionVehicle'].server = { hello: function (name) { return proxies['positionVehicle'].invoke.apply(proxies['positionVehicle'], $.merge(["Hello"], $.makeArray(arguments))); } };
повернення проксі; };
signalR.hub = $.hubConnection("/signalr", { useDefaultPath: false }); $.extend(signalR, signalR.hub.createHubProxies());
}(window.jQuery, вікно));
Потім протестуємо, і код виглядає так:
Результати тесту такі:
Перші два повідомлення, які ми отримали, були надіслані нами самі, і ми теж їх отримали, а третє повідомлення надіслав я, який відкрив інший браузер, і ми теж його отримали.
Коли я отримав повідомлення, це був не вебсокет, а HTTP-опитування, бо наш js повідомив про помилку
Щодо причини повідомлення про помилку js, про це поговоримо наступного разу.
|