Announcement

Collapse
No announcement yet.

ISAPI, IBX 4.4.2 and 2 IBDatabases

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ISAPI, IBX 4.4.2 and 2 IBDatabases

    Hallo,

    folgenedes ärgerliches Problem.

    Ich verwende IBX 4.4.2 (Deutsch) um bei einer ISAPI Applikation auf Interbase Datenbanken zuzugreifen.

    Zwei Datenbanken (IBDatabase). Einmal eine Adressendatenbank und einmal ein Datenbank mit Bannerinformationen. Beiden im gleichen Webmodul.

    Wenn ich nur eine Datenbank nutze läuft die Applikation ohne Problem.

    Wenn ich jedoch die zweite Datenbank "verwende" hängt sich die ISAPI Applikation irgendwann ohne jeglich Fehlermeldung auf. Ich brauche nur Connect auf True setzten und dann hängt sich die Applikation in der Funktion.

    (ich lasse eine Web-Stresstest laufen der mehrer Instancen des Webmoduls starten läßt)

    Unit: IBDatabase
    Procedure: procedure TIBDatabase.DoConnect;
    Aufruf: "if Call(isc_attach_database(StatusVector, Length(FDBName),
    PChar(FDBName), @FHandle,
    FDPBLength, FDPB), False) > 0 then"

    auf. Die Funktion kehrt von dem Aufruf nicht mehr zurück. Der Fehler tritt auch dann auf wenn nur die Datenbank via Connect geöffnet wurde. Transaktionen oder irgendwelche Queries werden nicht geöffnet.

    Jede Datenbank hat ihre eigene Transaktion. Die Queries sind mit der richtigen Datenbank und Transaktion verbunden.

    Ich habe sämtliche Transactions Isolations Level (Bei IBTransaktion) ausprobiert. Bei Snapshot tritt der Fehler am seltensten auf. Bei "Snapshot Table Stability" am häufigsten.

    Habe mir daran schon die Zähne ausgebissen. Hat irgendjemand eine Idee wie man das Problem lösen könnte ?

    mit vielen Grüßen aus Bremen

    Nils Bödeker
    [email protected]

  • #2
    Hallo,

    eine ISAPI-DLL wird vom IIS in mehreren Arbeits-Threads ausgeführt, daher müssen alle Aufrufe in der ISAPI absoult threadfest sein. Im Fall des Zugriffs auf eine InterBase-Datenbank bedeutet dies, das man <b>niemals</b> einen direkten lokalen Datenbankzugriff machen darf, sondern dass <b>immer</b> über TCP/IP (Bsp: <i>192.168.10.1:\ib\employee.gdb</i>) gegangen werden muss. Der lokale Zugriffsweg nur über den Dateinamen ist in GDS32.DLL <b>nicht</b> threadfest

    Comment

    Working...
    X