Hi zusammen
Der Titel fasst mein Problem ziemlich passend zusammen.
In einem Eventhandler 'OnBeforeDispatch' habe ich folgenden Code:
Delphi-Quellcode:
procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject;
Request: TWebRequest; Response: TWebResponse;
var Handled: Boolean);
var List: TStringList; Refererstr, SourceStr, LogPath:
string; i,x: Integer;
LogStream : TFileStream;
begin
List := TStringList.Create;
LogPath := '
I:\DelphiXE8 Corner\DelphiXE8VclCorner\DelborWebserverXE8\DelborDataSnapServer';
LogStream := TFileStream.Create(LogPath,fmOpenReadWrite);
try
LogStream.WriteBuffer(Request.PathInfo, SizeOf(Request.PathInfo));
LogStream.WriteBuffer(Request.Referer, SizeOf(Request.Referer));
LogStream.WriteBuffer(Request.URL, SizeOf(Request.URL));
Form1.Memo1.Lines.Add('
PathInfo := '+ Request.PathInfo);
Form1.Memo1.Lines.Add('
Referer := ' + Request.Referer);
Form1.Memo1.Lines.Add('
From := ' + Request.From);
Form1.Memo1.Lines.Add('
Url := ' + Request.URL);
Form1.Memo1.Lines.Add('
****************************');
Request.QueryFields.Delimiter := '
;';
Form1.Memo1.Lines.Add('
QueryFields : ');
Request.ExtractQueryFields(List);
Form1.Memo1.Lines.AddStrings(List);
Form1.Memo1.Lines.Add('
****************************');
Form1.Memo1.Lines.Add('
GetEnumerator := '+ Request.Query);
Form1.Memo1.Lines.Add('
============================');
for i := 0
to Self.Actions.Count -1
do
begin
Refererstr := Actions[i].PathInfo;
if ContainsText(Request.Referer,Refererstr)
then
begin
x := Pos(Refererstr,Request.Referer);
SourceStr := Copy(Refererstr,x,SizeOf(Refererstr));
if Self.Actions[i].PathInfo = SourceStr
then
Actions[i].OnAction(Sender,Request,Response, Handled);
end;
end;
finally
List.Free;
LogStream.Free;
end;
Wenn ich die Exe und anschliessend den Server starte, sieht das so aus, wie im Anhang ersichtlich.
Ich habe festgestellt, dass obige Prozedur bis zu vier mal ausgeführt wird, und offenbar wird das Memo dabei jedesmalüberschrieben. Zumindest schliesse ich das daraus, das die hartgecodeten Stings jeweils nur einmal angegeben sind.
Also versuchte ich, die Strings in ein Logfile zu schreiben, um so festzustellen, ob während der ersten drei Durchgänge die gesuchten Strings geschrieben werden. Aber da wird eine
AV geworfen - Zugriff verweigert.
Sehe ich mir den Eigenschaften-Dialog zu den Parentordnern an, sind diese schreibgeschützt. Entferne ich diesen Schutz und übernehme die neuen Einstellungen, sind diese bei einem erneuten Öffnen des Eigenschaften-Dialogs wieder da.
Ein anderes Programm, das eine Ebene höher im selben Ordner liegt, benutzt ungehindert Filestreams...
Für meine diversen Webseiten (und die benötigten Css-Scripts) habe ich jeweils eigene PageProducer-Komponenten in eigenen WebActionItems, nur kriege ich es nicht hin, dass diese auch aufgerufen werden.
Wie, zum Kuckuck, zeige ich weitere als nur die erste Seite in einer Webbrokeranwendung an?
Gruss
Delbor
PS:
Um das untenstehende Kpeg zu machen, musste ich die Anwendung starten und folglich alle Zeilen betreffend den Logstream auskommentieren. Dabei ging eine seltsame Fehlermeldung, die vor dem Start auftritt, fast vergessen:
Delphi-Quellcode:
LogStream.WriteBuffer(Request.PathInfo, SizeOf(Request.PathInfo));
LogStream.WriteBuffer(Request.Referer, SizeOf(Request.Referer));
LogStream.WriteBuffer(Request.URL, SizeOf(Request.URL));
In diesen Zeilen stoppt Delphi die Compilieruung, setzt das Caret vor die letzte Klammer und meckert, da müsse noch eine Variable hin... Die Help gibt aber lediglich an, dass die Prozeduren als overload deklariert sind...