Ensiksi loin uuden Hubs-kansion projektin alle
Luo myös uusi PositionVehicle-tiedosto kansion alle, kuten seuraavassa kuvassa näkyy:
Rakenna projekti uudelleen, ja sitten viittaamme seuraaviin kahteen js-tiedostoon näkymäsivulla
Muistiinpano!!!
"/Scripts/jquery.signalR-2.2.2.min.js"-tiedosto lisätään SignalR:n asennukseen ja se on fyysisellä levyllä
"/signalr/hubs" onSignalR generoidaan automaattisesti, jota ei löydy fyysiseltä levyltä!
Katsotaanpa SignalR:n tuottamaa js-tiedostoa seuraavasti:
/*! * ASP.NET SignalR JavaScript Library v2.2.2 * http://signalr.net/
* * Tekijänoikeus (c) .NET Foundation. Kaikki oikeudet pidätetään. * Lisensoitu Apache-lisenssillä, versio 2.0. Katso License.txt projektin juuresta lisenssitietojen saamiseksi.
* */
<reference path="..\..\SignalR.Client.JS\Scripts\jquery-1.6.4.js" /> <reference path="jquery.signalR.js" /> (funktio ($, ikkuna, määrittelemätön) { <param name="$" type="jQuery" /> "käytä tiukkaa";
if (typeof ($.signalR) !== "funktio") { throw new error("SignalR: SignalR ei ole ladattu. Varmistathan, että jquery.signalR-x.js viitataan ennen ~/signalr/js."); }
var signalR = $.signalR;
function makeProxyCallback(hub, callback) { Return-funktio () { Kutsu asiakaskeskusmenetelmää callback.apply(hub, $.makeArray(argumentit)); }; }
function registerHubProxies(instance, shouldSubscribe) { var key, hub, memberKey, memberValue, subscriptionMethod;
for (avain esimerkissä) { if (instance.hasOwnProperty(key)) { hub = instanssi[avain];
jos (!( hub.hubName)) { Ei asiakaskeskus jatka; }
if (shouldSubscribe) { Haluamme tilata hub-tapahtumat subscriptionMethod = hub.on; } else { Haluamme peruuttaa tilauksen keskustapahtumista subscriptionMethod = hub.off; }
Käy läpi kaikki jäsenet keskuksessa ja etsi asiakaskeskuksen toiminnot tilataksesi tai peruuttaaksesi tilauksen for (memberKey in hub.client) { if (hub.client.hasOwnProperty(memberKey)) { memberValue = hub.client[memberKey];
if (!$.isFunction(memberValue)) { Ei asiakaskeskuksen toiminto jatka; }
subscriptionMethod.call(hub, memberKey, makeProxyCallback(hub, memberValue)); } } } } }
$.hubConnection.prototype.createHubProxies = funktio () { var proxyes = {}; this.starting(funktio () { Rekisteröi hubin välityspalvelimet tilatuiksi (instance, shouldSubscribe) registerHubProxies (välityspalvelimet, totta);
this._registerSubscribedHubs(); }).disconnected(funktio () { Poista tilaus kaikista hubin välityspalvelinmuodoista, kun "katkaisemme yhteyden". Tämä varmistaa, ettei toiminnallisia takaisinsoittoja lisätä uudelleen. (instance, shouldSubscribe) registerHubProxies (välityspalvelimet, epätosi); });
proxyes['positionVehicle'] = this.createHubProxy('positionVehicle'); proxyes['positionVehicle'].client = { }; proxyes['positionVehicle'].server = { hello: function (name) { return proxyes['positionVehicle'].invoke.apply(proxyes['positionVehicle'], $.merge(["Hello"], $.makeArray(arguments))); } };
palauta proxyt; };
signalR.hub = $.hubConnection("/signalr", { useDefaultPath: false }); $.extend(signalR, signalR.hub.createHubProxies());
}(window.jQuery, window));
Sitten testataan ja koodi on seuraava:
Testitulokset ovat seuraavat:
Ensimmäiset kaksi viestiä, jotka saimme, lähetettiin molemmat meidän itsemme toimesta, ja me saimme nekin, ja kolmas viesti lähetettiin minulta, joka avasi toisen selaimen, ja saimme senkin.
Kun sain viestin, se ei ollut websocket, vaan itse asiassa HTTP-kysely, koska js ilmoitti virheen
Mitä tulee siihen, miksi js-virhe raportoitiin, puhumme siitä ensi kerralla.
|