Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Webbroker und mehrere Seiten unter localhost

  Alt 28. Sep 2015, 11:43
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...
Miniaturansicht angehängter Grafiken
request-auswertungen-2.jpg  
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (28. Sep 2015 um 11:59 Uhr)
  Mit Zitat antworten Zitat