Einzelnen Beitrag anzeigen

Delbor

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

AW: Webbroker und mehrere Seiten unter localhost

  Alt 28. Sep 2015, 14:15
Hi Olli73

Da bei Embarcadero nichts darüber nachzulesen ist, wann der/die Threads starten, und da Embarcadero selber das Event BeforeDispatch für Vorarbeiten wie DB-Zugriffe etc. empfiehlt, nahm ich mal an, dass BeforeDispatch gefeuert wird, bevor der Thread wirklich startet.

Zitat:
Von den Webmodulen werden automatisch mehrere Instanzen erstellt und alle (parallelen) Anfragen werden dann jeweils in einer von diesen Instanzen von Webmodul abgearbeitet, und zwar multithreaded (wäre ja auch blöd, wenn eine Anfrage mal länger dauert und alle anderen deswegen ewig warten müssten).
Nach meinem Stand der Unwissenheit wird für jede Anfrage genau eine Instanz des Webmoduls erzeugt. Die Embarcadero-Seiten habe ich bisher folgendermassen interpretiert:
  • Der Browser startet eine Anfrage, wenn der User auf ein Lesezeichen klickt oder die URL in der Adresszeile eingibt.
  • Der Dispatcher nimmt die Anfrage entgegen und feuert OnBeforeDispatch, sofern dieses Event assigned ist,
  • Startet danach/andernfalls einen Thread, in dem nun erstmal der Defaulthandler des Webmoduls abgearbeitet wird, sofern Handled nicht auf False umgestellt wurde(in diesem Fall würde der DefaultHandler am Schluss aller ActionItems abgearbeitet).
  • Wenn ActionItem[1] Handled auf True stellt, ist die Behandlung abgeschlossen und es werden keine weiteren ActionItems mehr abgearbeitet.
  • Wenn ActionItem[1] Handled auf False stellt (bzw. belässt), ist die Behandlung noch nicht abgeschlossen, und ActionItem[2] wird abgearbeitet. Diese Folgen können beliebig fortgesetzt werden, bis ein ActionItem Handled auf True stellt.
  • War Handled False, als die Bearbeitung der ActionItems begann, wird nun ActionItem[0] ausgeführt. Andernfalls war dies zu Anfang schon der Fall, und die Behandlung ist nun abgeschlossen.

Nach deiner Reaktion zu urteilen, hätte ich ganz offensichtlich vor meinen Zugriffen auf die Form eine Criticalsection einleiten müssen. Das würde wohl auch erklären, weshalb ich keinen Schreibzugriff auf den Speicher habe.
Nicht erklärt ist damit allerdings, wieso unter anderem die URL leer ist und PathInfo die offenbar zuletzt eingegeben Datei angibt.
Und woher kommen die offensichtlich 4 Threads? Es scheint mir im Moment so, als würden die im OnBeforeDispatch-Event erzeugt. Etwa durch meine Zugriffe auf Form1??

Über Kommentare, eventuell wo angebracht, auch etwas ausführlichere, würde ich mich sehr freuen! Vielen Dank!

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