AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi ISAPI - DLL - Private Variablen

ISAPI - DLL - Private Variablen

Ein Thema von LD93 · begonnen am 16. Feb 2010 · letzter Beitrag vom 22. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2   
LD93

Registriert seit: 18. Aug 2007
14 Beiträge
 
#1

ISAPI - DLL - Private Variablen

  Alt 16. Feb 2010, 14:45
Hallo,

(leider hat mein PC den nichtabgeschickten Post geschreddert, deshalb etwas kürzer)

ich habe eine ISAPI-DLL Entwickelt, die Proxy spielt. Leider bekomme ich beim Laden einer Seite mit Bildern Probleme: Die Bilder werden nicht geladen, ein Druck auf F5 zeigt Wirres Zeug oder ein Bild (Statt der Website) an.

Vermutung: Die im Action-Teil (ich nutze die Delphi-TWebModule Komponente) definierten Variablen überschreiben sich. Kann das sein? Was kanns sonst sein?
Und vor allem: Was kann ich dagegen tuen?

mfg

D.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

Re: ISAPI - DLL - Private Variablen

  Alt 16. Feb 2010, 15:31
Hallo,

zeig' uns bitte den fraglichen Quelltext, die Fehlermöglichkeiten sind hier zu vielfältig, um sie theoretisch abzuhandeln.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: ISAPI - DLL - Private Variablen

  Alt 16. Feb 2010, 15:37
Hi!

Versucht Du die Bilder mit im HTTP-Stream zu senden oder per IMG Tag einzelrequest?

Mavarik
  Mit Zitat antworten Zitat
LD93

Registriert seit: 18. Aug 2007
14 Beiträge
 
#4

Re: ISAPI - DLL - Private Variablen

  Alt 16. Feb 2010, 20:40
Ok,
Delphi-Quellcode:


procedure TProxy.WebModule1WebActionItem1Action(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
mem:tmemorystream;


www: TIdHTTP;
IdCookieManager1: TIdCookieManager;
Werte : TStringStream;

const
server='http://atom:81';
begin
    www:= TIdHTTP.Create(webmodule1);
    IdCookieManager1:= TIdCookieManager.Create(www);
    mem:=tmemorystream.Create;
[url]www.CookieManager:=[/url] IdCookieManager1;
[url]www.AllowCookies:=true;[/url]
    try

for i:=0 to request.CookieFields.Count-1 do
IdCookieManager1.AddCookie(request.CookieFields.Strings[i],'/');

werte:=TStringStream.Create(request.Content);

if uppercase(request.Method)='POSTthen
www.Post(server+anfrage+request.Query ,werte,mem)
 else
 www.Get(server+anfrage+request.Query ,mem);


 for i:=0 to IdCookieManager1.CookieCollection.Count-1 do

      with response.Cookies.Add do
            begin

             Name:=idCookieManager1.CookieCollection.Items[i].CookieName ;
             Value:= IdCookieManager1.CookieCollection.Items[i].value;
              expires:=(now)+1000;
              Path:='/';
              secure:=false;
            end;

mem.Position:=0;
response.ContentStream:=mem;
 response.SendResponse;
 response.ContentLength:=response.ContentStream.Size;
 finally
 mem.Free;
  [url]www.Free;[/url]
  IdCookieManager1.Free;
   werte.Free;
 end;
end;
ich hole darüber eine html-seite, worin wieder <img> Tags enthalten sind.
Der Code "klappt" ja auch, aber nur wenn ich nur eine Sache gleichzeitig mache...
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

Re: ISAPI - DLL - Private Variablen

  Alt 17. Feb 2010, 07:20
Hallo,

den Server hast Du in einer Konstanten deklariert, aber woher kommt anfrage?www.Post(server+anfrage+request.Query ,werte,mem) Habe den Eindruck, dass das so, wie Du es gebaut hast, nicht threadsicher ist. Vermutlich wird die Routine für jede Anfrage aufgerufen, aber es ist nicht für jede Anfrage eine eigene Instanz verfügbar, so dass das Ergebnis eher als zufällig zu betrachten ist, da sich alle Anfragen die gleichen Variabeln "teilen" und alle immer mit den Werten arbeiten, die der "Letzte" den globalen Variabeln zugewiesen hat.
Globale Variabeln in ISAPI.DLL's sind tödlich (eigene Erfahrung ).
  Mit Zitat antworten Zitat
LD93

Registriert seit: 18. Aug 2007
14 Beiträge
 
#6

Re: ISAPI - DLL - Private Variablen

  Alt 17. Feb 2010, 14:20
Bzgl. Anfrage: Da habe ich wohl zuviel beim posten zuviel gekürzt.
bei var:
anfrage:string;

und vor Werte:= kommt
anfrage:=Request.Pathinfo;


Das das Programm so nicht threadsicher ist vermute ich auch, aber ich dachte der IIS/whatever würde die einzelnen Teile so aufrufen,dass das klappt - scheint ja nicht so.
Ich dachte ich hätte die Variablen so richtig privat deklariert

Ich wüsste gerne wie es richtig geht - weiß jemand Bescheid?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

Re: ISAPI - DLL - Private Variablen

  Alt 17. Feb 2010, 15:14
Hallo,

welche Delphiversion hast Du, meine mich daran erinnern zu können, das ISAPI-DLL's von älteren Delphiversionen nicht threadsicher sind, weil das Grundgerüst der DLL's einen Fehler enthält. Weiß aber nicht mehr, für welche Versionen das galt und wie man den Fehler wegbekommen konnt.

Ich glaube, es hing mit der Reihenfolge der in der DPR automatisch eingefügten Unit in der USES-Klausel zusammen.

Habe mal Google befragt und bin auf dieses hier gestoßen. Eventuell hilft Dir das ja weiter.
  Mit Zitat antworten Zitat
LD93

Registriert seit: 18. Aug 2007
14 Beiträge
 
#8

Re: ISAPI - DLL - Private Variablen

  Alt 17. Feb 2010, 15:44
Ich benutze Delphi 7, der trick mit dem Reihenfolge wechseln hat nichts gebracht, aber ich hab nen screenshot machen können.

und das coinitflag steht auf COINT_MULTITHERADED;
Miniaturansicht angehängter Grafiken
unbenannt_141.png  
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

Re: ISAPI - DLL - Private Variablen

  Alt 17. Feb 2010, 15:55
Hallo,

der Screenshot enthält ein Bitmap-Bild, stimmt der Contenttype? Müsste in diesem Fall image/bmp sein.
  Mit Zitat antworten Zitat
LD93

Registriert seit: 18. Aug 2007
14 Beiträge
 
#10

Re: ISAPI - DLL - Private Variablen

  Alt 17. Feb 2010, 15:59
dachte mir das das ein bild ist

sollte aber ne html seite sein
von daher ist der content-type sogar richtiger als der inhalt...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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