Najpierw utworzyłem nowy folder Hubs w ramach projektu
Utworz także nowy plik PositionVehicle w folderze, jak pokazano na poniższym rysunku:
Odbuduj projekt, a następnie odwołujemy się do dwóch kolejnych plików js na stronie widoku
Nuta!!!
Plik "/Scripts/jquery.signalR-2.2.2.min.js" jest dodawany do instalacji SignalR i znajduje się na fizycznym dysku
"/signalr/hubs" toSignalR jest generowany automatycznie, którego nie można znaleźć na fizycznej płycie!
Przyjrzyjmy się plikowi js wygenerowanemu przez SignalR, w następujący sposób:
/*! * ASP.NET Biblioteka JavaScript SignalR v2.2.2 * http://signalr.net/
* * Copyright (c) .NET Foundation. Wszelkie prawa zastrzeżone. * Licencjonowane na licencji Apache, wersja 2.0. Zobacz License.txt w korzeniu projektu, aby uzyskać informacje o licencji.
* */
<ścieżka referencyjna="..\..\SignalR.Client.JS\Scripts\jquery-1.6.4.js" /> <ścieżka referencyjna="jquery.signalR.js" /> (funkcja ($, okno, niezdefiniowane) { <nazwa parametru="$" type="jQuery" /> "używaj stricte";
if (typeof ($.signalR) !== "function") { wyrzuć nowy błąd("SignalR: SignalR nie jest załadowany. Prosimy upewnić się, że jquery.signalR-x.js jest odwoływane przed ~/signalr/js."); }
var signalR = $.signalR;
function makeProxyCallback(hub, callback) { Funkcja zwrotu () { Metoda klienta hub callback.apply(hub, $.makeArray(arguments)); }; }
function registerHubProxies(instance, shouldSubscribe) { var key, hub, memberKey, memberValue, subscriptionMethod;
dla (klucz w instancji) { if (instance.hasOwnProperty(key)) { hub = instancja[key];
if (!( hub.hubName)) { To nie centrum klienta kontynuacja; }
if (shouldSubscribe) { Chcemy subskrybować wydarzenia w centrum subscriptionMethod = hub.on; } else { Chcemy wypisać się z wydarzeń hub subscriptionMethod = hub.off; }
Przejdź przez wszystkich członków huba i znajdź funkcje klienta huba, aby subskrybować/wypisać for (memberKey in hub.client) { if (hub.client.hasOwnProperty(memberKey)) { memberValue = hub.client[memberKey];
if (!$.isFunction(memberValue)) { To nie funkcja centrum klienta kontynuacja; }
subscriptionMethod.call(hub, memberKey, makeProxyCallback(hub, memberValue)); } } } } }
$.hubConnection.prototype.createHubProxies = function () { var proxies = {}; this.starting(function () { Zarejestruj proxy hubów jako subskrybowane (instancja, powinniśSubscribe) registerHubProxies(proxy, true);
this._registerSubscribedHubs(); }).disconnected(function () { Zrezygnuj ze wszystkich hub proxy, gdy się "rozłączymy". Ma to na celu zapewnienie, że nie dodamy ponownie funkcjonalnych callbacków. (instancja, powinniśSubscribe) registerHubProxies(proxy, false); });
proxy['positionVehicle'] = this.createHubProxy('positionVehicle'); proxy['positionVehicle'].client = { }; proxies['positionVehicle'].server = { Cześć: funkcja (nazwa) { return proxy['positionVehicle'].invoke.apply(proxy['positionVehicle'], $.merge(["Hello"], $.makeArray(arguments))); } };
zastępstwa zwrotne; };
signalR.hub = $.hubConnection("/signalr", { useDefaultPath: false }); $.extend(signalR, signalR.hub.createHubProxies());
}(window.jQuery, window));
Następnie przetestujmy to i kod wygląda następująco:
Wyniki testów są następujące:
Pierwsze dwie wiadomości, które otrzymaliśmy, zostały wysłane przez nas samych, my też je otrzymaliśmy, a trzecią wiadomość wysłałem przeze mnie, otwierając inną przeglądarkę, i też ją otrzymaliśmy.
Gdy otrzymałem wiadomość, nie był to websocket, lecz faktycznie ankieta HTTP, ponieważ nasz js zgłosił błąd
Jeśli chodzi o to, dlaczego zgłoszono błąd js, opowiemy o tym następnym razem.
|