Gehen Sie nach obenErste Schritte mit DataSnap Mobile Connectors
Dieses Thema ist eine Anleitung zum Generieren und Verwenden vonC# Silverlight DataSnap-Proxy, zum Gebrauch mitWindows Phone 7mobile Entwicklung. Der C#-Silverlight-Proxy unterstützt dieselben Datentypen, die DataSnap selbst unterstützt. Es wurden spezielle C#-Klassen erstellt, um diese DBX- und Delphi-Typen zu umschließen, und ihre Verwendung ähnelt der in Delphi.
Auf Anfrage generiert und versendet der DataSnap-REST-Server die Proxy-Klasse, die zum Aufrufen der Methoden auf dem Server verwendet wird. Dies ist der Proxy-Generierung, mit der Sie vielleicht bereits vertraut sind, sehr ähnlich, umfasst aber auch den Prozess des Komprimierens des Proxys und aller Abhängigkeiten sowie des Sendens dieser ZIP-Datei an den Anforderer.
Weitere Informationen zu diesem Prozess finden Sie unterErste Schritte mit DataSnap Mobile Connectors.
Inhalt
- 1 So laden Sie C# Silverlight-Proxydateien von einem DataSnap-REST-Server herunter
- 2 So verwenden Sie die DSProxy-Klasse
- 3 Beispiel einer Servermethode mit einem var-Parameter
- 4 So nutzen Sie Heavyweight-Callbacks
- 5 Siehe auch
So laden Sie C# Silverlight-Proxydateien von einem DataSnap-REST-Server herunter
Zuerst müssen Sie eine Kopie davon erhaltenWin32ProxyDownloader.exe, erhältlich in der\Behälter
Verzeichnis Ihrer Produktinstallation. Auf diese Datei und wo Sie eine Kopie erhalten können, wird weiter unten eingegangenErste Schritte mit DataSnap Mobile Connectors.
Der Downloader ist ein einfaches Dienstprogramm, das dabei hilft, den Server nach dem Proxy und anderen Dateien zu fragen, die für die Kommunikation mit dem Server benötigt werden.
Um den Proxy-Downloader verwenden zu können, müssen Sie die folgenden Parameter angeben:
- -Sprache (erforderlich):Gibt die mobile Plattform und Sprache des angeforderten Proxys an. Für Windows Phone 7 verwenden Siecsharp_silverlight.
- -Protokoll:Gibt das zu verwendende Verbindungsprotokoll an: entweder http oder https. Der Standardwert ist http.
- -Gastgeber:Gibt den Port und den Hostnamen oder die IP-Adresse an, zu dem eine Verbindung hergestellt werden soll. Der Standardwert ist „localhost“ mit Port 80. Um einen anderen Namen oder Port anzugeben, qualifizieren Sie den Namen vollständig mit der Portnummer, getrennt durch einen Doppelpunkt (: „).
- -Ausgang:Gibt den Ordner an, in den die Proxydateien heruntergeladen werden sollen. Wenn nicht angegeben, wird der aktuelle Ordner verwendet.
Das Folgende ist ein Beispiel, das die meisten der oben genannten Parameter verwendet:
C:\Win32ProxyDownloader.exe -Language csharp_silverlight -host 127.0.0.1:8080 -output C:\test
Nach der Ausführung des Downloaders werden die C# Silverlight-Proxydateien in den angegebenen Ausgabeordner kopiert. Diese Dateien umfassen Folgendes:
- JSON-Parsing-DLL
- Statische C#-Quelldateien, die vom Proxy benötigt werden
- DSProxy.cs, der generierte Proxy
Die Hauptdatei istDSProxy.cs, die die Klasse deklariert, die alle auf dem Server definierten Methoden enthält.
So verwenden Sie die DSProxy-Klasse
Der folgende Code zeigt dieDSProxy.cs(C#)-Datei, die vom Server generiert wird. Es enthält eineTServerMethods1Klasse, die die Servermethoden kapselt. Der Server verfügt nur über eine Methode (EchoString), und die C#-Klasse TServerMethods1 implementiert es entsprechend. Der Proxy-Generator hat automatisch den gesamten Code für die Verbindung zum Server und die Ausführung der Methoden generiert. Siehe den C#-Code fürEchoStringMethode unten:
verwenden System;verwenden System.Threading;Namensraum Embarcadero.DataSnap.WindowsPhone7{ öffentlich Klasse DSProxy { öffentlich Klasse TServerMethods1 : DSAdmin { öffentlich TServerMethods1(DSRESTConnection Verbindung, AusnahmeCallback ExCal) : Base(Verbindung, ExCal) { } Privatgelände DSRESTParameterMetaData[] TServerMethods1_EchoString_Metadata; Privatgelände DSRESTParameterMetaData[] get_TServerMethods1_EchoString_Metadata() { Wenn (TServerMethods1_EchoString_Metadata == Null) { TServerMethods1_EchoString_Metadata = neu DSRESTParameterMetaData[] { neu DSRESTParameterMetaData("Wert", DSRESTParamDirection.Eingang, DBXDataTypes.WideStringType, „Zeichenfolge“), neu DSRESTParameterMetaData(„“, DSRESTParamDirection.Rückgabewert, DBXDataTypes.WideStringType, „Zeichenfolge“), }; } zurückkehren TServerMethods1_EchoString_Metadata; } /*** @param Value [in] – Geben Sie auf dem Server Folgendes ein: Zeichenfolge* @return result – Geben Sie auf dem Server Folgendes ein: string*/ öffentlich delegieren Leere EchoStringCallback(Zeichenfolge Ergebnis); öffentlich Leere EchoString(Zeichenfolge Wert, EchoStringCallback Ruf zurück = Null, AusnahmeCallback ExCal = Null) { DSREST-Befehl cmd = getConnection().CreateCommand(); cmd.setRequestType(DSHTTPRequestType.ERHALTEN); cmd.Text setzen(„TServerMethods1.EchoString“); cmd.vorbereiten(get_TServerMethods1_EchoString_Metadata()); InternalConnectionDelegate EchoStringDel = () => { Wenn (Ruf zurück != Null) { versuchen { Ruf zurück.DynamicInvoke(cmd.getParameter(1).Wert erhalten().GetAsString()); } fangen (Ausnahme ex) { Wenn (ExCal != Null) getConnection().syncContext.Schicken(neu SendOrPostCallback(X => ExCal.DynamicInvoke(ex.InnerException)), Null); anders getConnection().syncContext.Schicken(neu SendOrPostCallback(X => BaseExCal.DynamicInvoke(ex.InnerException)), Null); } } }; cmd.getParameter(0).Wert erhalten().SetAsString(Wert); getConnection().ausführen(cmd, Das, EchoStringDel, ExCal); } } }}
Der erste Schritt bei der Verwendung der Proxy-Klasse besteht darin, eine Verbindung zum Server herzustellen und einzurichten. KlasseDSRESTConnectionkapselt alle Eigenschaften und Methoden, die für die Verbindung zum Server erforderlich sind. Erstellen Sie einfach die Verbindung und richten Sie die Eigenschaften wie unten gezeigt ein:
DSRESTConnection Verbindung = neu DSRESTConnection();Verbindung.setHost(„Hostname“);Verbindung.setPort(Port-Nummer);Verbindung.setProtocol(„http“);
- DerGastgeberDie Eigenschaft gibt den Hostnamen oder die IP-Adresse an.
- DerHafenDie Eigenschaft gibt den Port an, den der Server überwacht.
- DerProtokollDie Eigenschaft gibt das Protokoll an, das für die Verbindung verwendet werden soll. Konkret: entweder http oder https.
Um die Servermethoden remote aufzurufen, erstellen Sie einfach die Proxy-Klasse, übergeben Sie die Verbindung und rufen Sie dann die Methode auf:
DSRESTConnection Verbindung = neu DSRESTConnection();Verbindung.setHost(„localhost“);Verbindung.setPort(8080);Verbindung.setProtocol(„http“);DSProxy.TServerMethods1 Stellvertreter = neu DSProxy. TServerMethods1(Verbindung, AusnahmeCallback);Stellvertreter.EchoString("teststring", (Zeichenfolge Ergebnis) =>{ // ...}, AusnahmeCallback);öffentlich Leere AusnahmeCallback(Ausnahme e){ // ...}
Beispiel einer Servermethode mit einem var-Parameter
Das folgende Beispiel ist der Code, der generiert wird, wenn Ihre Servermethode einen var-Parameter enthält oder mehrere Ergebnisse zurückgibt. Dies ist der Delphi-Code für die Servermethode:
Funktion TServerMethods1.VarParamTest(War Wert: Zeichenfolge): Zeichenfolge;Start Wert := StrUtils.ReverseString(Wert); Ergebnis := Wert;Ende;
Und hier ist der generierte Proxy-Code zum Aufrufen dieser Servermethode:
Privatgelände DSRESTParameterMetaData[] TServerMethods1_VarParamTest_Metadata;Privatgelände DSRESTParameterMetaData[] get_TServerMethods1_VarParamTest_Metadata(){ Wenn (TServerMethods1_VarParamTest_Metadata == Null) { TServerMethods1_VarParamTest_Metadata = neu DSRESTParameterMetaData[] { neu DSRESTParameterMetaData("Wert", DSRESTParamDirection.Input-Output, DBXDataTypes.WideStringType, „Zeichenfolge“), neu DSRESTParameterMetaData(„“, DSRESTParamDirection.Rückgabewert, DBXDataTypes.WideStringType, „Zeichenfolge“), }; } zurückkehren TServerMethods1_VarParamTest_Metadata;}/** * @param Wert [In/aus] - Typ An Server: Zeichenfolge
Bitte beachten Sie, dass die Methode eine Instanz von zurückgibtVarParamTestReturns. Diese spezielle Klasse enthält die Informationen überWar
(in/out) Parameter sowie das Ergebnis. Das folgende Beispiel zeigt, wie die Methode aufgerufen und die resultierenden Werte gelesen werden:
Stellvertreter. VarParamTest ("Hallo Welt!", (DSProxy.TServerMethods1.VarParamTestReturns Ergebnis) => { Debuggen.WriteLine(Ergebnis.Wert); Debuggen.WriteLine(Ergebnis.Rückgabewert); });
Sowohl der neue Wert des übergebenen Parameters als auch der Ergebniswert werden von der Result-Instanz gespeichert. Der Wert für Result.Value ist „!dlroW ,olleH“ und Result.returnValue ist „Hello, World!“.
So verwenden Sie schwere Rückrufe
Schwere Rückrufe bieten DataSnap-Servern die Möglichkeit, nahezu sofortige Benachrichtigungen an REST-Clients zu senden. Ein Client kann einen Rückruf für ein bestimmtes Thema auf dem betreffenden Server registrieren. Sobald dieses Thema aktualisiert wird, erhält der Client eine Benachrichtigung. Dies ist natürlich eine sehr vereinfachte Beschreibung dessen, was schwere Rückrufe bewirken, sollte aber für die Zwecke dieses Dokuments ausreichend sein.
Der erste Schritt zur Verwendung von Rückrufen in Ihrer Anwendung besteht darin, eine benutzerdefinierte Rückrufklasse zu erstellen, die von der Zusammenfassung geerbt wirdDBXCallbackKlasse und überschreiben Sie die abstrakte Methode „Execute“. Im Folgenden finden Sie eine Beispielimplementierung dieser Klasse:
öffentlich Klasse Mein Rückruf : DBXCallback { öffentlich überschreiben TJSONValue Ausführen(TJSONArray Parameter) { Debuggen.WriteLine(Parameter.ToString()); zurückkehren neu TJSONTrue(); }}
DerDSClientCallbackChannelManagerDie Klasse verwaltet die Rückrufe des Clients. Es bietet Methoden zum Registrieren und Aufheben der Registrierung der Rückrufe sowie zum Schließen eines oder aller Rückrufe.
Der Konstruktor fürDSClientCallbackChannelManagerakzeptiert 3 Parameter:
- DSRESTConnection, Angabe der Serververbindungsinformationen
- Ein String, der den Namen des Serverkanals enthält, bei dem registriert werden soll
- Ein String, der die ID des Managers enthält (eindeutig für den Server)
DSCallbackChannelManager Manager = neu DSCallbackChannelManager(Verbindung, chname, DSCallbackChannelManager.getNewManagerID());
Im Folgenden finden Sie ein Beispiel für die Registrierung eines Rückrufs und die anschließende Übertragung an denselben Kanal, auf dem er registriert ist:
öffentlich Leere testCallbacks(){ DSAdmin Administrator = neu DSAdmin(Verbindung, ManageExceptionCallback); Manager = neu DSCallbackChannelManager(Verbindung,„chname“,DSCallbackChannelManager.getNewManagerID()); Manager.registerCallback(„mycb01“, neu Mein Rückruf(), () => {Administrator.BroadcastToChannel(chname, neu TJSONString(„Das ist eine Sendung“),(bool B) => { Manager.closeClientChannel(); }); }öffentlich Leere ManageExceptionCallback(Ausnahme e){ // ...}
Der erste Parameter der Methode „registerCallback“ ist eine ID für den Rückruf (eine ID, die für den Clientkanal eindeutig ist). Der zweite Parameter ist die eigentliche zu registrierende Rückrufinstanz und der dritte ist eine Delegate-Methode, die nach Abschluss der Registrierung aufgerufen wird.
Der obige Code registriert eine neue Instanz vonMein RückrufKlasse auf dem Server, der lauschtchnameKanal. Nachdem diese Registrierung erfolgreich war, ruft der Client anBroadcastToChannelund sendet die Zeichenfolge „Dies ist eine Übertragung“ an alle Rückrufe (einschließlich sich selbst), die auf dem Kanal „chname“ lauschen.
Der dritte Parameter zumBroadcastToChannelcall ist ein Delegat, der aufgerufen wird, wenn der Anruf vom Server zurückkehrt. Er enthält einen booleschen Wert, der angibt, ob der Server die Broadcast-Anfrage erfolgreich verarbeitet hat. Der obige Code schließt dann in dieser verschachtelten Delegatendeklaration den Kanalmanager, sodass keine weiteren Broadcasts empfangen werden.
Siehe auch
- Erste Schritte mit DataSnap Mobile Connectors
- Erste Schritte mit iOS Objective-C DataSnap Mobile Connector
- Erste Schritte mit Java Android DataSnap Mobile Connector
- Erste Schritte mit Java BlackBerry DataSnap Mobile Connector