2012-11-15 22 views
8

mit indy TIdHTTPServer, auf der Ebene von OnCommandGet gibt es die Möglichkeit, einen Stream mit den Daten an AResponseInfo.ContentStream zu übergeben. das ist in Ordnung. Wann kann ich diesen Stream freigeben? unter der Annahme, dass der Server kann mehrere Anfragen erhalten, und jede Anfrage kann zu gegebener Zeit behandelt werden, und ein Stream kann beliebig zu dem anderen beenden.Nachdem ein Stream an CommandGet übergeben wurde, wann kann er freigegeben werden?

wo könnte der Stream freigegeben werden?

Codebeispiel:

var 
    StreamsToFree : TList; 

//assume StreamsToFree := TList.create; properly 

procedure TObject.IdHttpServerCommandGet(AContext: TIdContext; 
    ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); 
var 
stream : TFileStream; 
begin 
    stream := TFileSTream.create('file.name'); 
    AResponseInfo.ContentStream := stream; 
    AResponseInfo.ResponseNo := 200; 
    StreamsToFree.Add(generateReceiptXML); 
end; 

Wann kann der Strom befreit werden? auf was sogar, und wie können wir den IdHttpServer kennen, beendete seine Übertragung?

Antwort

14

Wenn Sie es der ContentStream-Eigenschaft zuweisen, wird Indy der Besitzer Ihres Streams und wird es freigeben, wenn es nicht mehr benötigt wird.

Bearbeiten: Angenommen, Sie verlassen FreeContentStream Eigenschaft auf True festgelegt (das ist die Standardeinstellung).