Announcement

Collapse
No announcement yet.

TWebResponse.Response.SendStream

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TWebResponse.Response.SendStream

    <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&gt;0 then
    Reader.ReadComponent(SO);
    ShowMessage(SO.Text);
    Finally
    Reader.Free;
    SO.Free;
    M.Free;
    end;
    end;
    </font></pre>

  • #2
    Hallo,<br> Problem gelöst.<br>Wie so oft ist der, der lesen kann eindeutig im Vorteil. Insbesondere, wenn es sich um die Delphi-Hilfedatei handelt.<br>Lösung: TReader und TWriter weglassen und die WriteComponent/ReadComponent Methode von TMemoryStream verwenden.<br>Jens Schuman

    Comment


    • #3
      Hallo,<br>weiß vielleicht jemand, wie man einen Stream mit TIdHTTP (Indy) vom Client zum Server sendet. TIdHTTP hat eine Post Methode. Wie soll ich innerhalb von TWebModule darauf reagieren ? TWebRequest hat scheinbar keine Methode um einen Stream aus der Verbindung zu lesen.<br> Jens Schuman

      Comment

      Working...
      X