AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RPC und Delphi 2009

Ein Thema von alphaflight83 · begonnen am 21. Apr 2009 · letzter Beitrag vom 1. Jul 2009
Antwort Antwort
Seite 2 von 3     12 3      
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#11

Re: RPC und Delphi 2009

  Alt 21. Apr 2009, 17:18
Delphi-Quellcode:
HashMessageDigest := TIdHashMessageDigest5.Create;
  try
    { determine the md5 digest hash of the request }
    Hash := Hash128AsHex(HashMessageDigest.HashValue(XmlRequest)); // <-
Indy muss auf jeden Fall auf die neue Tiburon-Version upgedated werden, aber der XML-RPC Code scheint etwas älter zu sein.
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;
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von alphaflight83
alphaflight83

Registriert seit: 5. Jun 2008
Ort: Würzburg
148 Beiträge
 
Delphi 12 Athens
 
#12

Re: RPC und Delphi 2009

  Alt 22. Apr 2009, 11:47
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 ...
Make me a sandwich! - What? Make it yourself. - Sudo make me a sandwich! - Okay
  Mit Zitat antworten Zitat
Benutzerbild von alphaflight83
alphaflight83

Registriert seit: 5. Jun 2008
Ort: Würzburg
148 Beiträge
 
Delphi 12 Athens
 
#13

Re: RPC und Delphi 2009

  Alt 23. Apr 2009, 11:33
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:
FUNCTION TXmlParser.TranslateEncoding (CONST Source : STRING) : STRING;
BEGIN
  Result := Source;
END;
In XmlRpcCommon.pas:
- 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:
  { determine the md5 digest hash of the request }
  // Hash := Hash128AsHex(HashMessageDigest.HashValue(XmlRequest));
  Hash := HashStringMD5AsHex(XmlRequest);
In XmlRpcServer.pas:
- 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.
Angehängte Dateien
Dateityp: rar xml-rpc-for-d2009_194.rar (2,26 MB, 47x aufgerufen)
Make me a sandwich! - What? Make it yourself. - Sudo make me a sandwich! - Okay
  Mit Zitat antworten Zitat
Benutzerbild von alphaflight83
alphaflight83

Registriert seit: 5. Jun 2008
Ort: Würzburg
148 Beiträge
 
Delphi 12 Athens
 
#14

Re: RPC und Delphi 2009

  Alt 15. Jun 2009, 13:54
Ab heute gibt es den Real Thin Client (RTC) unter der freien BSD Lizenz.
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)
Make me a sandwich! - What? Make it yourself. - Sudo make me a sandwich! - Okay
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#15

Re: RPC und Delphi 2009

  Alt 15. Jun 2009, 14:32
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?
Delphi-Quellcode:
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;
nja, und den darin verwendeten LibXmlParser hatte ich auch noch nicht so richtig unter D09 zum Laufen gebracht.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von alphaflight83
alphaflight83

Registriert seit: 5. Jun 2008
Ort: Würzburg
148 Beiträge
 
Delphi 12 Athens
 
#16

Re: RPC und Delphi 2009

  Alt 15. Jun 2009, 15:45
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.
Make me a sandwich! - What? Make it yourself. - Sudo make me a sandwich! - Okay
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#17

Re: RPC und Delphi 2009

  Alt 15. Jun 2009, 15:54
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?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von alphaflight83
alphaflight83

Registriert seit: 5. Jun 2008
Ort: Würzburg
148 Beiträge
 
Delphi 12 Athens
 
#18

Re: RPC und Delphi 2009

  Alt 16. Jun 2009, 08:29
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;
Make me a sandwich! - What? Make it yourself. - Sudo make me a sandwich! - Okay
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#19

Re: RPC und Delphi 2009

  Alt 16. Jun 2009, 09:16
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.

Müßte ich nur mal sehn, wie ich das mit dem Internetversand hinbekomm.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von alphaflight83
alphaflight83

Registriert seit: 5. Jun 2008
Ort: Würzburg
148 Beiträge
 
Delphi 12 Athens
 
#20

Re: RPC und Delphi 2009

  Alt 16. Jun 2009, 10:00
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.

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.
Make me a sandwich! - What? Make it yourself. - Sudo make me a sandwich! - Okay
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz