<pre><font size="2" face="Verdana">Hallo,
ich möchte mit TIdHTTP ein Objekt (THTTPStreamObj) via HTTP übertragen.
Das sonderbare ist nur, es kommt beim Empfänger nichts an. Erst habe ich gedacht,
es liegt daran, dass ich keinen reinen Text übertrage. Kann auch nicht sein,
da ich mit TFileStream eine beliebige Datei vom Server downloaden kann.
Weiß jemand einen Rat ?
Jens Schumann
<font size="1" face="Verdana">
<strong>Objekt, das Übertragen werden soll:</strong>
Type
THTTPStreamObj = class(TComponent)
private
FText: String;
public
procedure Assign(Source : TPersistent); override;
published
property Text : String read FText write FText;
end;
<strong>Sender:</strong>
procedure TIB6WebModule.IB6WebModulewaMemStreamAction(Sender : TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
{
Wenn hier anstatt TMemoryStream TFilestream verwendet wird, kann man sehen,
das SO richtig geschrieben wird.
}
var
M : TStream;
SO : THTTPStreamObj;
Writer : TWriter;
aStr : String;
begin
M:=TMemoryStream.Create;
SO:=THTTPStreamObj.Create(Nil);
SO.Text:='Dies ist der Text, der übertragen wurde';
Writer:=TWriter.Create(M,1024);
Try
Writer.WriteComponent(SO);
M.Seek(0,soFromBeginning);
Response.SendResponse;
Response.SendStream(M);
Finally
Writer.Free;
M.Free;
SO.Free;
end;
end;
<strong>Empfänger:</strong>
procedure TForm1.Button2Click(Sender: TObject);
var
M : TStream;
Reader : TReader;
SO : THTTPStreamObj;
AURL : String;
begin
M:=TMemoryStream.Create;
Reader:=TReader.Create(M,1024);
SO:=THTTPStreamObj.Create(Nil);
AURL:='http://sww.mr_turbo.de/mysoap/ib6_server.dll/memstream';
Try
HTTP.Get(AURL,M);
M.Seek(0,soFromBeginning);
If M.Size>0 then
Reader.ReadComponent(SO);
ShowMessage(SO.Text);
Finally
Reader.Free;
SO.Free;
M.Free;
end;
end;
</font></pre>
ich möchte mit TIdHTTP ein Objekt (THTTPStreamObj) via HTTP übertragen.
Das sonderbare ist nur, es kommt beim Empfänger nichts an. Erst habe ich gedacht,
es liegt daran, dass ich keinen reinen Text übertrage. Kann auch nicht sein,
da ich mit TFileStream eine beliebige Datei vom Server downloaden kann.
Weiß jemand einen Rat ?
Jens Schumann
<font size="1" face="Verdana">
<strong>Objekt, das Übertragen werden soll:</strong>
Type
THTTPStreamObj = class(TComponent)
private
FText: String;
public
procedure Assign(Source : TPersistent); override;
published
property Text : String read FText write FText;
end;
<strong>Sender:</strong>
procedure TIB6WebModule.IB6WebModulewaMemStreamAction(Sender : TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
{
Wenn hier anstatt TMemoryStream TFilestream verwendet wird, kann man sehen,
das SO richtig geschrieben wird.
}
var
M : TStream;
SO : THTTPStreamObj;
Writer : TWriter;
aStr : String;
begin
M:=TMemoryStream.Create;
SO:=THTTPStreamObj.Create(Nil);
SO.Text:='Dies ist der Text, der übertragen wurde';
Writer:=TWriter.Create(M,1024);
Try
Writer.WriteComponent(SO);
M.Seek(0,soFromBeginning);
Response.SendResponse;
Response.SendStream(M);
Finally
Writer.Free;
M.Free;
SO.Free;
end;
end;
<strong>Empfänger:</strong>
procedure TForm1.Button2Click(Sender: TObject);
var
M : TStream;
Reader : TReader;
SO : THTTPStreamObj;
AURL : String;
begin
M:=TMemoryStream.Create;
Reader:=TReader.Create(M,1024);
SO:=THTTPStreamObj.Create(Nil);
AURL:='http://sww.mr_turbo.de/mysoap/ib6_server.dll/memstream';
Try
HTTP.Get(AURL,M);
M.Seek(0,soFromBeginning);
If M.Size>0 then
Reader.ReadComponent(SO);
ShowMessage(SO.Text);
Finally
Reader.Free;
SO.Free;
M.Free;
end;
end;
</font></pre>
Comment