De SignalR-component gebruikt WebSocket als transport om verbinding te maken met een SignalR-server. Als dit transport niet wordt ondersteund, wordt een fout gegenereerd.
De SignalR-clientcomponent heeft een eigenschap genaamd SignalR waar u de volgende gegevens kunt instellen:
De client ondersteunt het verzenden van tekst- of binaire gegevens.
De Hubs API maakt het mogelijk servermethoden aan te roepen vanaf de client en clientmethoden vanaf de server. Het protocol dat voor persistente verbindingen wordt gebruikt, is niet rijk genoeg om RPC-semantiek (remote procedure call) uit te drukken. Dit betekent echter niet dat het protocol voor hub-verbindingen volledig anders is dan dat voor persistente verbindingen. Het protocol voor hub-verbindingen is veeleer grotendeels een uitbreiding van het protocol voor persistente verbindingen.
Wanneer een client een servermethode aanroept, stuurt deze niet langer een vrije tekenreeks zoals bij permanente verbindingen. In plaats daarvan stuurt het een JSON-tekenreeks met alle benodigde informatie om de methode aan te roepen. Hier is een voorbeeldbericht dat een client zou sturen om een servermethode aan te roepen:
WriteData('{"H":"chathub","M":"Send","A":["Delphi Client","Test message"],"I":0}');
De payload heeft de volgende eigenschappen:
I – aanroepidentificatie – stelt u in staat antwoorden te koppelen aan verzoeken
H – de naam van de hub
M – de naam van de methode
A – argumenten (een array, kan leeg zijn als de methode geen parameters heeft)
Als het stringargument dubbele aanhalingstekens bevat, vervang " door \"
Voorbeeld: als het argument {"test":1} is, verzend het argument als {\"test\":1}
WriteData('{"H":"chathub","M":"Send","A":["{\"test\":1}"],"I":0}');
Authenticatie kan worden ingeschakeld om een gebruiker te koppelen aan elke verbinding en te filteren welke gebruikers toegang hebben tot bronnen. Authenticatie wordt geïmplementeerd via Bearer Tokens: de client verstrekt een toegangstoken en de server valideert dit token en gebruikt het om de gebruiker te identificeren.
Momenteel worden alleen Bearer-tokens ondersteund:
Hier geeft u het token rechtstreeks door aan de Signal-server (omdat het token is verkregen via een andere server).
Authentication.Enabled: als actief, wordt autorisatie gebruikt voordat een websocket-verbinding tot stand wordt gebracht.
Authentication.Authentication: 2 typen verificatie worden ondersteund: bearer-token of cookies. Beide vereisen een externe manier om de vereiste waarden te verkrijgen.
BearerToken: verkregen tokenwaarde.
Cookie: stel de waarde in van het vereiste cookie.
oSignalR := TsgcWSAPI_Signal.Create(nil);
oSignalR.SignalR.Enabled := True;
oSignalR.SignalR.Authentication := srcBearerToken;
oSignalR.SignalR.BearerToken.Token := 'token here';
Het component heeft de volgende gebeurtenissen:
Deze gebeurtenis wordt gegenereerd wanneer de client succesvol verbinding maakt met de server.
Dit event wordt geactiveerd wanneer de verbinding van de client met de server wordt verbroken.
Deze gebeurtenis wordt aangeroepen wanneer er een fout is in de WebSocket-verbinding.
Het protocol dat wordt gebruikt voor een persistente verbinding is vrij eenvoudig. Berichten die naar de server worden verzonden, zijn gewoon onbewerkte tekenreeksen. Er is geen specifiek formaat vereist. Berichten die naar de client worden verzonden zijn meer gestructureerd. De eigenschappen die u in het bericht kunt vinden zijn als volgt:
C – bericht-ID, aanwezig voor alle niet-KeepAlive-berichten
M – een array met daadwerkelijke gegevens.
{"C":"d-9B7A6976-B,2|C,2","M":["Welcome!"]}
Deze gebeurtenis wordt aangeroepen wanneer binaire gegevens van de server worden ontvangen.
Wanneer een servermethode wordt aangeroepen, stuurt de server een bevestiging dat de aanroep is voltooid door de aanroep-id naar de client te sturen en — als de methode een waarde heeft geretourneerd — de retourwaarde, of — als het aanroepen van de methode is mislukt — de fout.
Hier zijn voorbeeldresultaten van een servermethodeaanroep:
{"I":"0"}
Een server-void-methode waarvan de aanroepidentificator "0" was, is succesvol voltooid.
{"I":"0", "R":42}
Een servermethode die een getal retourneert waarvan de aanroep-ID "0" was, is succesvol voltooid en heeft de waarde 42 geretourneerd.
{"I":"0", "E":"Error occurred"}
Dit evenement wordt geactiveerd wanneer een KeepAlive-bericht wordt ontvangen van de server.