SignlR macht die bidirektionale und dauerhafte Verbindung zwischen Server und Client möglich. Dadurch können ASP.NET-Entwickler in Echtzeit arbeiten. Kursleiter Alejandro Amrein zeigt anhand eines einfachen Beispiels auf, wie diese Technologie genutzt werden kann.
Vor allem Collaboration-fähige Web-Applikationen erfordern immer mehr die Möglichkeit, Nachrichten vom Server aus in die Clients zu pushen. Das liegt nicht in der Natur von HTTP. HTTP ist ein state-less Protokoll, d.h. der Client (meistens ein Browser) macht eine Abfrage, die Verbindung öffnet sich, der Server bearbeitet die Abfrage und gibt eine Antwort zurück. Dann wird die Verbindung getrennt.
Ziel von SignalR ist es, bidirektionale, dauerhafte Verbindungen zwischen Client und Server in einer einfachen und zuverlässigen Art und Weise zu erreichen.
Vor SignalR hat es verschiedene Methoden gegeben, wie Client und Server in einer Web-Applikation kommunizieren konnten:
Implementationsbeispiel:
setInterval(function() {
$.ajax({
url: "server",
success: function(data) {
// data verwenden
},
dataType: "json"
});
}, 30000);
Implementationsbeispiel:
(function poll() {
$.ajax({
url: "server",
success: function(data){
// data verwenden
},
dataType: "json",
complete: poll,
timeout: 30000
});
})();
In einer ähnlichen Weise wie WCF eine Abstraktion aller möglichen Kommunikationstechnologien darstellt, stellt SignalR eine Art Abstraktion über die oben erwähnten Technologien. Das heisst, SignalR benützt im Hintergrund diese Technologien, stellt dem Entwickler aber eine einfache und konsistente Schnittstelle zur Verfügung. Der Entwickler definiert JavaScript-Funktionen Client-seitig und .NET-Methoden Server-seitig und sorgt dafür, dass eine dauerhafte Verbindung zwischen beiden entsteht, durch die die eine Seite die Funktionen der anderen Seite einfach aufrufen kann.
SignalR bietet viele Möglichkeiten. Ich zeige in diesem Beitrag ein einfaches Beispiel, sodass Sie schnell in die Technologie einsteigen können. Sie werden feststellen, wie einfach es ist, eine Echtzeit-Kommunikation zu erzeugen.
Im Folgenden werde ich Schritt für Schritt eine «Hello world»-Applikation erstellen:
Wir starten Visual Studio 2013 und erstellen eine neue leere Web-Applikation (HelloSignalR). In Visual Studio 2013 ist SignalR eingebaut. Wenn man mit früheren Versionen von Visual Studio arbeitet, muss man SignalR als NuGet Package installieren (mehr dazu unter http://www.asp.net/signalr):
Als Nächstes must man SignalR in der OWIN Pipeline hinzufügen (siehe Blog zu Open Web Interface for .NET (OWIN))
Server-seitig müssen wir einen sogenannten Hub erstellen. Dieser stellt unsere Verbindung dar und stellt dem Client eine Reihe von Methoden (in diesem Fall nur eine: die hello-Methode) zur Verfügung.
Der Client-Code besteht aus zwei Teilen:
Die HTML-Seite beinhaltet lediglich ein TextBox, einen Button und ein DIV:
Die erwähnte JavaScript-Funktionalität registriert sich gegenüber dem Server Hub (helloHub) und registriert die Funktion broadcastMessage. Ausserdem wird die Verbindung gestartet und wenn diese erstellt wird, wird ein Click-Ereignis-Handler deklariert, damit beim Klick auf den Button die (Server-seitige) hello-Funktion mit den eingegebenen Namen aufgerufen wird (diese verteilt dann die Nachricht zu den anderen Sitzungen).
Zum Testen starten wir drei verschiedene Browser-Sitzungen und geben in der Sitzung 1 einen Name ein (Alejandro). Unmittelbar erscheint der Name Alejandro in den anderen Sitzungen (Clients.Others schliesst alle registrierten Sitzungen ein, ausser die aktuelle). Danach geben wir in der Sitzung 2 Peter ein und in der Sitzung 3 Hans.
Das ist das Resultat:
SignalR abstrahiert die verschiedenen verfügbaren Echtzeit-Kommunikations-Technologien (u.a. Periodoc Polling, Long polling, WebSocktes) und stellt eine vereinfachte Infrastruktur für Entwickler zur Verfügung. Dadurch können Sie diese Client- und Server-seitige Funktionen definieren, die sich dann gegenseitig aufrufen können.
Kommentar