Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi RPC und Delphi 2009 (https://www.delphipraxis.net/132879-rpc-und-delphi-2009-a.html)

himitsu 16. Jun 2009 09:14

Re: RPC und Delphi 2009
 
für die XML selber dürfte es reichen sie ohne Codierinfo zu erstellen, dann wäre sie per Standard UTF-8-kodiert und das dürfte mit der Ansi- bzw. ASCII-Kodierung vereinbar sein, welche dieses nicht mehr funktionierende XML-RPC-Teil verwendet ... steht leider nirgends, welches es genau ist, aber egal.

Da sie es nicht angeben und XML laut den XML-Spezifikationen standardmäßig UTF-8 ist, wär das vermutlich dennoch OK.

Und die XML-RPC-Spec sieht nun auch nicht sooo kompliziert aus :angel:

Nja, mal sehn was ich da hinbekomm.

Elvis 16. Jun 2009 11:23

Re: RPC und Delphi 2009
 
Zitat:

Zitat von alphaflight83
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.

An und für sich mag das ganz gut klingen.
Du solltest aber beachten, dass die RTC Lizenz in diesem Jahr öfter gewechselt wurde als manche Leute ihre Unterwäsche wechseln...

alphaflight83 26. Jun 2009 13:28

Re: RPC und Delphi 2009
 
So, ich hab mich jetzt mal am RTC versucht, was auch im Ansatz funktioniert, solange ich keine Parameter mit senden muss.
Ich habs aber bisher nicht geschnallt, wie ich Parameter richtig übergeben kann.

Delphi-Quellcode:
with RtcHttpClient do begin
  ServerAddr := AnsiString(IP_Address);
  ServerPort := AnsiString(IntToStr(TCP_Port));
  // UseWinHTTP := True;
  Connect;
end;

with RtcClientModule do begin
  ModuleFilename := '/RPC2';
  ModuleHost := AnsiString(IP_Address);
  DataFormat := fmt_XMLRPC;
  StartCalls;
  Data.NewFunction('get_item_descr');
  (* --> hier möchte ich noch die Variable Integer: ItemID als Parameter übergeben *)
  Call(RtcResult);
  Post;
end;

with RtcResult do begin
  if Valid then Result := 1
  else Result := 0;
end;

alphaflight83 29. Jun 2009 10:37

Re: RPC und Delphi 2009
 
Okay, sollte jetzt laufen.

Benutzt wurden:
XMLDocument: TXMLDocument;
RtcHttpClient: TRtcHttpClient;
RtcDataRequest: TRtcDataRequest;

Delphi-Quellcode:
(******************************
** Function: RPC_GetItemDesc **
******************************)
function RPC_GetItemDesc(IP_Address: String; TCP_Port, ItemID: Integer):LongInt;
begin
  with XMLDocument do begin
    Active := true;
    Version := '1.0' ;
    Encoding := 'UTF-8' ;
 
    ChildNodes.Clear;
    with AddChild('methodCall') do begin
      with AddChild('methodName') do
        NodeValue:= 'get_item_descr';
      with AddChild('params') do
        with AddChild('param').AddChild('value').AddChild('int') do
          NodeValue:= ItemID;
    end;
  end;

  with RtcHttpClient do begin
    ServerAddr := AnsiString(IP_Address);
    ServerPort := AnsiString(IntToStr(TCP_Port));
    UseWinHTTP := True;
    Connect;
  end;

  with RtcDataRequest do begin
    Request.Method := 'Post';
    Request.URI := '/RPC2';
    Post;
  end;
end;


(******************************************
** Procedure: RtcDataRequestBeginRequest **
******************************************)
procedure RtcDataRequestBeginRequest(Sender: TRtcConnection);
begin
  with TRtcDataClient(Sender) do begin
    Request['Content-type']:='text/xml';
    Write(AnsiString(XMLDocument.XML.Text));
  end;
end;
Alle anderen Kombinationen die ich ausprobiert hatte, haben mir immer die XML Daten so verbaut,
dass der Server die Anfragen nicht gefressen hat. Mit dieser Kombination tut nun alles wie es soll.

DTkalcec 1. Jul 2009 19:02

Re: RPC und Delphi 2009
 
Hier ist ein Beispiel wie es auch mit der eingebauten XML-RPC funktionalität gehn sollte ...

Benutzt werden:
RtcHttpClient: TRtcHttpClient;
RtcClientModule: TRtcClientModule;
RtcResult: TRtcResult;

Delphi-Quellcode:
with RtcHttpClient do begin
  ServerAddr := AnsiString(IP_Address);
  ServerPort := AnsiString(IntToStr(TCP_Port));
  // UseWinHTTP := True;
  AutoConnect:=True;
end;

with RtcClientModule do begin
  ModuleFilename := '/RPC2';
  ModuleHost := AnsiString(IP_Address);
  DataFormat := fmt_XMLRPC;

  with Data.NewFunction('get_item_descr') do // <methodcall><methodname>
    with newArray('params') do // <params>
      asInteger[0]:=123; // <param><value><int>

  Call(RtcResult); // <- raus damit
end;
Da RTC SDK komponenten event-basierts sind, kommt das resultat in das OnResult event von der RtcResult komponente.

Übrigens ... die "Data.toXMLRPCRequest" funktion kann mann vor dem "Call()" beutzen um zu testen wie das XML-RPC string aussieht das an den Server geschickt wird.

MfG,
Danijel Tkalcec


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 Uhr.
Seite 3 von 3     123   

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