AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi [IdHttpServer] Verhindern das ContentStream freigegeben wird

[IdHttpServer] Verhindern das ContentStream freigegeben wird

Ein Thema von gsh · begonnen am 17. Aug 2009 · letzter Beitrag vom 17. Aug 2009
Antwort Antwort
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#1

[IdHttpServer] Verhindern das ContentStream freigegeben wird

  Alt 17. Aug 2009, 12:17
Hallo Leute,

ich bin gerade dabei einen IdHttp Server in einem Windows Service zum laufen zu bekommen.
Dieser hat unter anderem die Aufgabe ein in einem MemoryStream gecachet Bild (wird beim Service Start geladen) über HTTP zur Verfügung zu stellen.

Dies funktioniert auch soweit ... aber nur beim ersten Mal. Beim zweiten Zugriff bekommt er eine AV.
Nach ein paar Tests stelle ich fest, dass der IdHttp meinen MemoryStream frei gibt und somit beim zweiten Mal nicht mehr darauf zugegriffen werden kann.

Meine Frage jetzt: Wie kann ich ihm sagen, dass er den Stream nicht freigeben soll. Ich will nicht, dass der Service das Bild bei jedem Request von der Festplatte laden muss.

Hier der Codeabschnitt:
Delphi-Quellcode:
  if ARequestInfo.Command = 'GETthen
  begin
    if ARequestInfo.Document = 'image.gifthen
    begin
      if MS_Image <> nil then
      begin
        AResponseInfo.ResponseNo := 200;
        AResponseInfo.ContentType := 'image/gif';
        AResponseInfo.ContentStream := MS_Image;
      end
      else
      begin
        AResponseInfo.ResponseNo := 404;
        AResponseInfo.ContentText := 'Not Found';
      end;
    end;
  end;
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#2

Re: [IdHttpServer] Verhindern das ContentStream freigegeben

  Alt 17. Aug 2009, 12:25
Hi,

Zitat von gsh:
Delphi-Quellcode:
  if ARequestInfo.Command = 'GETthen
  begin
    if ARequestInfo.Document = 'image.gifthen
    begin
      if MS_Image <> nil then
      begin
        AResponseInfo.ResponseNo := 200;
        AResponseInfo.ContentType := 'image/gif';
        // würd es so machen:
        AResponseInfo.ContentStream.Size := 0;
        AResponseInfo.ContentStream.CopyFrom(MS_Image, MS_Image.Size);
        AResponseInfo.ContentStream.Position := 0;
      end
      else
      begin
        AResponseInfo.ResponseNo := 404;
        AResponseInfo.ContentText := 'Not Found';
      end;
    end;
  end;
Sollte damit funktionieren.

Edit: Blödsinn geschrieben...

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#3

Re: [IdHttpServer] Verhindern das ContentStream freigegeben

  Alt 17. Aug 2009, 12:39
Also das Assign nicht geht hast du eh schon bemerkt
Deine nachbesserung funktioniert auch noch nicht ganz hat mich aber auf den richtigen Weg gebraucht:
Delphi-Quellcode:
if MS_Image <> nil then
      begin
        AResponseInfo.ResponseNo := 200;
        AResponseInfo.ContentType := 'image/gif';
        AResponseInfo.ContentStream := TMemoryStream.Create;
        MS_Image.Position := 0;
        AResponseInfo.ContentStream.CopyFrom(MS_Image, MS_Image.Size);
      end
      else
      begin
        AResponseInfo.ResponseNo := 404;
        AResponseInfo.ContentText := 'Not Found';
      end;
So funktioniert es. Danke
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#4

Re: [IdHttpServer] Verhindern das ContentStream freigegeben

  Alt 17. Aug 2009, 12:44
Hi Alex,

Zitat von gsh:
Also das Assign nicht geht hast du eh schon bemerkt
Deine nachbesserung funktioniert auch noch nicht ganz hat mich aber auf den richtigen Weg gebraucht:
Richtig, hatte das nur kurz aus dem Kopf ohne Delphi vor der Nase runtergetippt

Freut mich aber, daß es jetzt geht

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:26 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