![]() |
Re: RPC und Delphi 2009
Delphi-Quellcode:
Indy muss auf jeden Fall auf die neue Tiburon-Version upgedated werden, aber der XML-RPC Code scheint etwas älter zu sein.
HashMessageDigest := TIdHashMessageDigest5.Create;
try { determine the md5 digest hash of the request } Hash := Hash128AsHex(HashMessageDigest.HashValue(XmlRequest)); // <- Es gibt aber auch in der neuen Indy Version MD5 Funktionen, die den gewünschten Hash liefern sollten. Nur heissen sie jetzt wahrscheinlich anders. Meine Indy-basierte MD5 Funktion sieht so aus:
Delphi-Quellcode:
function MD5Hash(const Input: WideString): string;
begin with TIdHashMessageDigest5.Create do try Result := LowerCase(HashStringAsHex(string(Input))); finally Free; end; end; |
Re: RPC und Delphi 2009
Joa, mit deiner MD5 Funktion kompiliert es, allerdings wirft Indy (idHTTP) bei der Ausführung Fehler.
Wärs gelaufen hätte ich mich gefreut wie'n Schnitzel, aber so müsste ich jetzt doch tiefer in die Thematik einsteigen, als ich das eigentlich wollte. Da die mMn größte Problematik hier der verwendete XML-Parser ist, der nur begrenzte Unicode Unterstützung mitbringt, muss man sich wohl damit mal genauer auseinandersetzen, bzw. einen adäquaten Ersatz finden. PS: Wenn jemand natürlich den Stein der Weisen zu diesem Thema parat hat ... :wink: |
Re: RPC und Delphi 2009
Liste der Anhänge anzeigen (Anzahl: 1)
So hab jetzt doch noch mal versucht was Vernünftiges zu Stande zu bringen,
bin aber nach erfolgreichem Kompilieren wieder an der Ausführung gescheitert: EIdHttpProtocolException HTTP/1.0 500 Internal Error The server encountered an unexpected condition which prevented it from fulfilling the request. Unter Delphi 7 mit XML-RPC-2.0.0 funktioniert das ganze mit dem selben Aufruf ohne Probleme. In LibXmlParser.pas hab ich folgende Änderungen vorgenommen (Alle Änderungen im Code durch Note (SeHa-2009-04-23) gekennzeichnet) - Die AnsiToUtf8 und Utf8ToAnsi Funktionen auskommentiert - Special Helper Functions rausgenommen, da die zu Fehlern geführt haben. - TranslateEncoding schleift nur noch durch:
Delphi-Quellcode:
In XmlRpcCommon.pas:
FUNCTION TXmlParser.TranslateEncoding (CONST Source : STRING) : STRING;
BEGIN Result := Source; END; - IdHashMessageDigest eingebunden - Funktion eingefügt: function HashStringMD5AsHex(const AStr: WideString): string; welche der Funktion von mjustin entspricht In XmlRpcClient.pas: - Bekannte benötigte Änderungen für Indy10 eingesetzt - In TRpcCaller.Execute HashStringMD5AsHex Funktion eingesetzt
Delphi-Quellcode:
In XmlRpcServer.pas:
{ determine the md5 digest hash of the request }
// Hash := Hash128AsHex(HashMessageDigest.HashValue(XmlRequest)); Hash := HashStringMD5AsHex(XmlRequest); - IdContext eingebunden - Bekannte benötigte Änderungen für Indy10 eingesetzt DiMime.pas: durch aktuellere Version ersetzt Wie gesagt, hat es nach den Änderungen kompiliert (Auch ohne dass Ansi-Strings und -Chars ersetzt wurden) Aber bei der Ausführung kommt besagter Fehler. Hab das ganze Gedönz mal angehängt. |
Re: RPC und Delphi 2009
Ab heute gibt es den
![]() Hiermit sollte sich dann das leidige Thema RPC auf D2009 vernünftig lösen lassen. (Edit: Wodurch dann für mich auch die Änderungsversuche am XML-RPC hinfällig werden) |
Re: RPC und Delphi 2009
hatte mir grad mal dieses XML-RPC angesehn und sowas find ich schon witzig ... wozu haben die da XML-Klassen verwaut, wo sie nichtmal genutzt werden? :shock:
Delphi-Quellcode:
nja, und den darin verwendeten LibXmlParser hatte ich auch noch nicht so richtig unter D09 zum Laufen gebracht.
function TRpcFunction.GetRequestXML: string;
var Strings: TStrings; begin Strings := TStringList.Create; try Strings.Add('<?xml version="1.0"?>' + #13#10); Strings.Add('<methodCall>' + #13#10); Strings.Add(' <methodName>' + FObjectMethod + '</methodName>' + #13#10); GetBodyXML(Strings); Strings.Add('</methodCall>' + #13#10); Result := Strings.Text; finally Strings.Free; end; end; |
Re: RPC und Delphi 2009
Jo, ich hatte mich etwas darin verrannt den Parser umschreiben zu wollen,
woran ich gescheitert bin. Dann wollte ich den Parser ersetzen, bin aber nach gottseidank nur kurzer Versuchszeit heute auf die Nachricht beim RTC gestoßen. Jetzt versuch ich mich mal daran. |
Re: RPC und Delphi 2009
Also einen in D09 laufenden Parser hab ich ja ... nur kenn ich mich mit diesem RPC nicht so aus und da wäre es schwer nun etwas dafür zu machen,
wobei der Aufbau der XML-Dateien schonmal recht einfach gestaltet ist. Wie nutzt man es denn programmseitig? |
Re: RPC und Delphi 2009
Die Antwort wird dir wahrscheinlich nicht sehr viel bringen, da ich zur komplizierten Seite, dem Server leider gar nichts sagen kann,
da das ein Kollege in Python geschrieben hat. Der Aufruf auf Client-Seite ist simpel, da nur die Eigenschaften EndPoint, ObjectMethod sowie Ip-Adresse und Port benötigt werden. Beispiel-Aufruf: Das Programm würde hier eine Beschreibung zu einem Item anhand seiner ItemID aus einer serverseitig hinterlegten Liste holen. (Wie gesagt, die eigentliche Logik steckt dabei im Serverprogramm.)
Delphi-Quellcode:
(**********************************
** Function: RPC_ItemDescription ** **********************************) function RPC_ItemDescription (IP_Address: String; TCP_Port, ItemID : Integer):LongInt; var RpcCaller : TRpcCaller; RpcFunction : IRpcFunction; RpcResult : IRpcResult; begin RpcCaller := TRpcCaller.Create; try RpcCaller.EndPoint := '/RPC2'; RpcCaller.HostName := IP_Address; RpcCaller.HostPort := TCP_Port; RpcFunction := TRpcFunction.Create; RpcFunction.ObjectMethod := 'get_item_descr'; RpcFunction.AddItem (ItemID); RpcResult := RpcCaller.Execute(RpcFunction); Result := RpcResult.AsInteger; finally RpcCaller.Free; end; end; |
Re: RPC und Delphi 2009
Also im Prinzip wird nur eine XML-Datei zusammengebastelt,
wo ein Funktionsname und Parameter eingetragen werden. Dann wird das via TCPIP an eine IP+Port versendet, man bekommt eine neue XML-Datei zurück und sucht da das Ergebnis raus. Also im eigenem Programm werden keine Funktionen aufgerufen? Na da sollte sich ja, wenn die Parameter nicht all zu aufwändig und Exotisch ausfallen, was mit einer kleinen Klasse machen lassen. :stupid: Müßte ich nur mal sehn, wie ich das mit dem Internetversand hinbekomm. |
Re: RPC und Delphi 2009
Joa, möglich, dass das nicht allzu komplex ist, wenn man sich da allerdings ohne XML Vorwissen reinwirft,
kann das schnell ganz schön viel werden. :gruebel: Das Problem dabei ist nur, dass das ganze XML-RPC kompatibel bleiben muss, da das eben in nahezu jeder Sprache verfügbar ist. Edit: Wie gesagt, Mit Delphi 7 war die Sache für mich mit Aufrufen der gezeigten Größenordnung erledigt. Mit dem Thema selbst musste ich mich da nicht allzu sehr befassen. Meine gescheiterten Versuche mit dem Parser haben mir dann eher Frust als Lust bereitet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz