Сначала я создал новую папку Hubs в рамках проекта
Также создайте новый файл PositionVehicle под папкой, как показано на следующем рисунке:
Перестраиваем проект, а затем ссылаемся на следующие два js-файла на странице просмотра
Заметка!!!
Файл «/Scripts/jquery.signalR-2.2.2.min.js» добавляется при установке SignalR и находится на физическом диске
«/signalr/hubs» — этоSignalR генерируется автоматически, который нельзя найти на физическом диске!
Давайте рассмотрим js-файл, сгенерированный SignalR, следующим образом:
/*! * ASP.NET SignalR JavaScript Library v2.2.2 * http://signalr.net/
* * Авторские права (c) Фонд .NET. Все права защищены. * Лицензировано под лицензией 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" /> «использовать строго»;
если (тип ($.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(экземпляр, shouldSubscribe) { var key, hub, memberKey, memberValue, subscriptionMethod;
для (ключ в примере) { if (instance.hasOwnProperty(key)) { hub = экземпляр[ключ];
если (!( hub.hubName)) { Это не клиентский хаб продолжить; }
if (shouldSubscribe) { Мы хотим подписаться на события хаба subscriptionMethod = hub.on; } else { Мы хотим отписаться от событий хаба subscriptionMethod = hub.off; }
Пройдитесь по всем участникам хаба и найдите функции клиентского хаба для подписки/отписки для (memberKey в hub.client) { if (hub.client.hasOwnProperty(memberKey)) { memberValue = hub.client[memberKey];
если (!$.isFunction(memberValue)) { Это не функция клиентского хаба продолжить; }
subscriptionMethod.call (hub, memberKey, makeProxyCallback(hub, memberValue)); } } } } }
$.hubConnection.prototype.createHubProxies = функция () { VAR прокси = {}; this.starting(function () { Зарегистрируйте хаб-прокси как подписанные (экземпляр, должен подписаться) registerHubProxies (прокси, true);
this._registerSubscribedHubs(); }).disconnected(функция () { Отписывайтесь от всех прокси хаба, когда мы «отключаемся». Это делается для того, чтобы не добавлять функциональные обратные вызовы. (экземпляр, должен подписаться) 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, мы поговорим об этом в следующий раз.
|