Först skapade jag en ny Hubs-mapp under projektet
Skapa också en ny PositionVehicle-fil under mappen, som visas i följande figur:
Bygg om projektet, och sedan refererar vi till följande två js-filer på visningssidan
Not!!!
Filen "/Scripts/jquery.signalR-2.2.2.min.js" läggs till i installationen av SignalR och finns på den fysiska disken
"/signaler/hubs" ärSignalR genereras automatiskt, som inte kan hittas på den fysiska disken!
Låt oss titta på js-filen som genereras av SignalR, enligt följande:
/*! * ASP.NET SignalR JavaScript Library v2.2.2 * http://signalr.net/
* * Upphovsrätt (c) .NET Foundation. Alla rättigheter förbehållna. * Licensierad under Apache License, version 2.0. Se License.txt i projektets rot för licensinformation.
* */
<referensväg="..\..\SignalR.Client.JS\\Scripts\jquery-1.6.4.js" /> <referensbana="jquery.signalR.js" /> (funktion ($, fönster, odefinierat) { <param name="$" type="jQuery" /> "använd strikt";
om (typeof ($.signalR) !== "funktion") { kasta nytt fel("SignalR: SignalR är inte laddad. Se till att jquery.signalR-x.js refereras före ~/signalr/js."); }
var signalR = $.signalR;
function makeProxyCallback(hub, callback) { returneringsfunktion () { Anropa klienthubbens metod callback.apply(hub, $.makeArray(arguments)); }; }
function registerHubProxies(instance, shouldSubscribe) { var key, hub, memberKey, memberValue, subscriptionMethod;
för (nyckel i instans) { om (instance.hasOwnProperty(key)) { hub = instans[nyckel];
om (!( hub.hubName)) { Inte en klienthubb fortsätt; }
om (shouldSubscribe) { Vi vill prenumerera på hub-evenemangen subscriptionMethod = hub.on; } annars { Vi vill avprenumerera på hub-evenemangen subscriptionMethod = hub.off; }
Gå igenom alla medlemmar på hubben och hitta klienthubbfunktioner för att prenumerera/avprenumerera för (memberKey in hub.client) { om (hub.client.hasOwnProperty(memberKey)) { memberValue = hub.client[memberKey];
om (!$.isFunction(memberValue)) { Inte en klienthubbfunktion fortsätt; }
subscriptionMethod.call(hub, memberKey, makeProxyCallback(hub, memberValue)); } } } } }
$.hubConnection.prototype.createHubProxies = function () { var proxies = {}; this.starting(function () { Registrera hubvproxies som prenumererade (instans, shouldSubscribe) registerHubProxies (proxies, true);
this._registerSubscribedHubs(); }).disconnected(function () { Avprenumerera alla hubbproxies när vi "kopplar bort". Detta är för att säkerställa att vi inte lägger till funktionella återkopplingar. (instans, shouldSubscribe) registerHubProxies (proxies, false); });
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))); } };
återvända proxyer; };
signalR.hub = $.hubConnection("/signalr", { useDefaultPath: false }); $.extend(signalR, signalR.hub.createHubProxies());
}(window.jQuery, window));
Sedan testar vi det och koden är följande:
Testresultaten är följande:
De två första meddelandena vi fick skickades båda av oss själva, och vi fick dem också, och det tredje meddelandet skickades av mig som öppnade en annan webbläsare, och vi fick det också.
När jag fick meddelandet var det inte en websocket, utan faktiskt en HTTP-poll, eftersom vår js rapporterade ett fel
När det gäller varför js-felet rapporterades, kommer vi att prata om det nästa gång.
|