AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi WebActionItems - oder kurz vor dem Durchdrehen
Thema durchsuchen
Ansicht
Themen-Optionen

WebActionItems - oder kurz vor dem Durchdrehen

Ein Thema von Delbor · begonnen am 22. Aug 2016 · letzter Beitrag vom 30. Aug 2016
Antwort Antwort
Delbor

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

WebActionItems - oder kurz vor dem Durchdrehen

  Alt 22. Aug 2016, 19:55
Hi zusammen

Im Anhang findet ihr diverse Jpegs, die meinen Aktionseditor und einigee andere meiner definitionen im Bezzug auf Pathinfo zeigen.
Stand der Dinge ist:
Bei Programmstart ist der Wert von Request.Pathinfo (per Vorgabe von Delphi) "/".
Aufgerufen wird, nach dem Haltepunkt im Event "OnBeforeDispatch" das DefaultWebActionItem.
Delphi-Quellcode:
procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
  var PathInformation: String;
begin
  PathInformation := Request.PathInfo;
  if Containstext(PathInformation, 'Images') then
  begin
    Self.ActionByName('WACImageItem').PathInfo := Request.PathInfo;
  end;
end;
In WebModuleBeforeDispatch prüfe ich, ob in Pathinfo der String 'Images' enthalten ist und weise dem Property WACImageItem.PathInfo den angeforderten Pfad der Bilddatei zu. Ich hatte erst für jedes Bild ein eigenes WebActionItem zuweisen wollen. Das ergäbe mindestens 12 Items bei 12 Bildern pro Seite, die alle bis auf den eigentlichen Dateinamen übereinstimmen - Grund genug, um dies in einer einzigen Action zu erledigen. Bis auf die Tatsache, dass die Pfade nicht gefunden werden, scheint dies zu klappen.
Die Pfade werden nicht gefunden, weil Delphi meinen HTML-Links (Images/.../..) regelmässig den String '/html/' voranstellt - und da liegen die angeforderten Bilder nicht.
Aber noch sind wir eigentlich erst bei der Start- oder Indexseite. Deren WebActionItem ruft das Homeitem auf:

Delphi-Quellcode:
procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
if Request.PathInfo = '/then
  WebModule1WebActHomeAction(Self,Request,Response,Handled);
end;
und
Delphi-Quellcode:
procedure TWebModule1.WebModule1WebActHomeAction(Sender: TObject; // 1. Act
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin

  Response.Content := PageProducerHome.Content;
  Response.SendResponse;
end;
Nachdem der einige src-Tags und Delphi-Tags beantwortet hat(Images/Background bzw. Replaccetags) wird die Seite anstandslos korrekt angezeigt.
Auf dieser habe ich ein HTML-Menue, über das andere Seiten meines Webprojektes aufgerufen werden sollen. Das sind unter anderem:
Delphi-Quellcode:
   <li><a href="#">Gotthardgiganten</a></li>
   <li><a href="#">Französischer Dampf am Gotthard</a></li>
   <li><a href="html/AufromantischerSpur1.html">DVZO - Auf romantischer Spur1</a></li>
   <li><a href="html/BischofzellerRosenwochen.html">Mit Dampf an die Bischofszeller Rosenwochen</a></li>
   <li><a href="html/Das Juwel vom Waldenburgertal.html">Das Juwel vom Waldenburgertal</a></li>
   <li><a href="html/BahnhofsfestWattwil.html">Bahnhofsfest Wattwil</a></li>
Rufe ich BischofzellerRosenwochen auf, klappt alles, wie es soll, ausser den oben beschriebenen nicht gefundenen Bildpfaden.
Rufe ich aber das Juwel vom Waldenburgertal auf, hat in BeforeDispatch Pathinfo den Wert '/html/Das Juwel vom Waldenburgertal.html', entsprechend dem Wert des WebactionItem-Objektes.
Während des Durchsteppens landet der Cursor schliesslich in TIdCustomHTTPServer.DoExecute, wo zum Schluss die Verbindung gekappt wird. Der Browser zeigt nun eine leere Seite, die Adressezeile ist korrekt, und wenn ich mir den Seitenquelltext im Browser ansehen will, erhalte ich eine leere Seite.
Mit andern Worten: Das WebactionItem.OnAction wird gar nicht aufgerufen (da befindet sich ein Haltepunkt).
PathInfo hatte auch schon mal den Wert/html/html/Das Juwel vom Waldenburgertal.html . ebenso am Schluss die Adresszeile des Browsers - dieser hatte dafür aber weder Inhalt noch Seitenquelltext...

Gruss
Delbor
Angehängte Grafiken
Dateityp: jpg Webactionitems.JPG (63,6 KB, 32x aufgerufen)
Dateityp: jpg WebactionWaldenburg.JPG (78,2 KB, 26x aufgerufen)
Dateityp: jpg Pathinfo Background.JPG (57,0 KB, 16x aufgerufen)
Dateityp: jpg Waldenbuger Juwel-Menue.JPG (54,6 KB, 14x aufgerufen)
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: WebActionItems - oder kurz vor dem Durchdrehen

  Alt 23. Aug 2016, 08:40
Ohne den ganzen Quellcode zu kennen, der da vielleicht noch mit reinspielt, scheint mir der einzige Unterschied zu sein, das beim "Problemfall" Leerzeichen teil der Pathinfo sind. Lass die doch mal weg oder ersetze sie durch Unterstriche.
Ralph
  Mit Zitat antworten Zitat
Delbor

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

AW: WebActionItems - oder kurz vor dem Durchdrehen

  Alt 23. Aug 2016, 10:01
Hi Jumpie

Vielen Dank für Deine Antwort! Durch diese fällt mir jetzt auf, dass und warum die Seite "Auf Romantischer Spur komplett zusammengeschrieben ist. Die Seite entstand bei meinen ersten Versuchen, und irgendwie kann ich mich schwach erinnern, dass ich die Seite damals erst 'normal' beschriftete.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delbor

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

AW: WebActionItems - oder kurz vor dem Durchdrehen

  Alt 23. Aug 2016, 10:39
Hi zusammen

Leider hat das nicht geholfen...

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delbor

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

AW: WebActionItems - oder kurz vor dem Durchdrehen

  Alt 29. Aug 2016, 12:25
Hi zusammen

Das Problem ist immer noch nicht gelöst. In den letzten Tagen habe ich mir in einer Excel-Tabelle mal die Werte beim durchsteppen festgehalten.
Auffallend ist dabei die jeweilige Pathinfo und das Ergebnis:
  1. '/html/BahnhofsfestWattwil.html'
  2. '/html/BischofzellerRosenwochen.html'
  3. '/html/AufromantischerSpur1.html'
Nach Programmstart ist die erste PathInfo, die Request enthält immer "/". Das ist zugleich die Pathinfo des Defaulthandlers. Und der ruft das WebactionItem der Homeseite auf. Diese wird so wie es sein soll, angezeigt. Beim debuggen hab ich jeweils im HTML-Menue die Punkte angeklickt, von denen die oben aufgeführten PathInfos stammen. Die Pathinfo-Propertys der WebActionItems haben übereinstimmende Werte.
Interessant ist: die Seiten der ersten beiden Pathinfos wurden nicht dargestellt, und der Browser enthielt auch keinen Seitenquelltext. Was dabei passiert: TWebRequest durchsucht die Collection Webaction, findet keine Übereinstimmung und kappt die Verbindung.
Die dritte Seite hingegen wird dargestellt - zwar ohne Hintergrund und ohne CSS-Formatierung, aber sie wird offenbar gefunden. Und das bei völliger Übereinstimmung der Request- und der WebactionItem.Pathinfo mit den vorangehenden Links. Und nätürlich sind alle diese HTML-Dateien genau da, wohin Pathinfo zeigt.
Irgendwie kam ich dann auf die Idee, dass solch seltsames Verhalten damit zu tun haben könnte, dass ich nirgendwo Critcalsection einsetze, obwohl das komplette Webmodul in einem eigenen Thread abläuft.
Ich hab mich in der Vergangenheit darauf verlassen, dass das Webmodul, bzw. TPageproducer mit Criticalsection arbeitet. Ersteres wird in einer solchen erstellt, bzw aktiviert. Bei letzterem scheint dies nicht der Fall zu sein; zumindest war meine Suche nach 'Criticalsection' in der Unit HTTPProd erfolglos.
Wenn ich mich recht erinnere, gibt es auf den Seiten von Embarcadero auch ein Beispiel dafür, wie man den Pageproducer einsetzt (und nicht nur da). Von Criticalsection war da nirgends was zulesen...
Woher also kommt dieses seltsame verhalten??

Gruss
Delbor

PS: Ein Gedanke, bzw. einige nicht genügend beachtete Quelltextzeilen: Wenn der Browser im geladenen HTML ein src-Tag(..) findet, setzt er eine neue Anforderung ab. Hab ich übersehen, dass das Webmodul nach jeder Antwort deaktiviert und somit immer wieder neu aktiviert wird? Das würde bedeuten, dass auch eine Pageproducer.Content/Contentstream-Antwort eigentlich in einer Criticalsection abläüft...
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: WebActionItems - oder kurz vor dem Durchdrehen

  Alt 29. Aug 2016, 12:40
Eigentlich sollte es so sein, das jeder Request für sich abgehandelt wird, ohne von vorhergehenden Request etwas wissen zu müssen. Dafür brauchst du da auch keine Critical Sections. Im Falle einer CGI-exe ist es ja sogar auch noch so, das für jeden Request die exe neu gestartet wird.

Ich würde einfach mal in jeder Webaction eine Dummy-Antwort zurückliefern lassen ala Response.Content='Webaction123', um zu sehen, ob wirklich die richtige Action feuert. Wenn das schon nicht klappt hast du ein Problem mit den Pathinfos oder im deinem Quellcode.
Wenn es dagegen klappt, hast du vllt. ein Problem im Code der einzelen Webactions, z.B. bei der Auswahl der richtigen Page-Producer o.ä.

Ohne den konkreten Code zu sehen, kann man da halt nichts genaueres zu sagen.
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz