TN067: Datenbankzugriff aus eine ISAPI-Servererweiterung

ISAPI-Servererweiterungen sind DLLs. Sie arbeiten im Prozessraum des Servers. Gleichzeitige Anforderungen an eine ISAPI-Erweiterung werden von separaten Threads behandelt. Daher muss der Code in der ISAPI-Erweiterung threadsicher sein.

Lage

Datenbank-Zugriffsmethoden, die COM verwenden, um die Initialisierung zu behandeln sind nicht threadsicher. Das Problem liegt beim Initialisieren der COM-Bibliotheken in einem Thread und dann mithilfe eines anderen Threads auf die Daten zugreifen. Die aktuelle Implementierung der Microsoft ODBC Desktop-Treiber fällt in diese Kategorie. Diese Treiber (dBase, Microsoft Visual FoxPro, Microsoft Access, Microsoft Excel, Paradox und Text), die im Lieferumfang von Visual C++, verwenden Sie die Microsoft Jet 3.0-Datenbank-Engine, die nicht threadsicher ist. Auch, Data Access Objects (DAO) ist eine COM-basierte API, so dass es nicht zuverlässig in der Multithread-Umgebung von einer ISAPI-Erweiterung ausgeführt wird.

Möglicherweise gibt es andere Datenbank-Zugriffsmethoden sind nicht Thread-sicher.

Auflösung

Zugriff auf eine Datenbank über eine ISAPI-Servererweiterung verwenden eines ODBC-Treibers, das entworfen und getestet für Multithreading verwenden. Microsoft ODBC-Treiber für Microsoft SQL Server 6.x sind ein Beispiel.

Die MFC-ODBC-Datenbankklassen sind Thread-sicher wie der MFC 4.2. Stellen Sie sicher, dass alle ODBC-Datenbanktreiber, die Sie mit diesen Klassen verwenden auch Thread-sicher ist.

Anwendungen, die die MFC-ODBC-Datenbankklassen Version MFC 4.2 verwenden müssen den Datenbankcode innerhalb eines kritischen Abschnitts, um sicherzustellen, dass nur ein Thread zu einem Zeitpunkt den MFC-Code-Datenbank zugreift. Weitere Informationen finden Sie unter Klasse CCriticalSection.

Derzeit sind die MFC-DAO-Datenbankklassen nicht Thread-sicher, weil sie die DAO-COM-basierte Objekte verwenden.

Technische Hinweise von &Nummer |nbsp; Technische Hinweise nach Kategorie

Index