TN067: Access Database from an ISAPI servidor Extension

Extensões de servidor ISAPI são DLLs. Eles trabalham no espaço de processo do servidor. Solicitações simultâneas para uma extensão ISAPI são manipuladas por segmentos separados. Portanto, o código em uma extensão ISAPI deve ser thread-safe.

Situação

Métodos de acesso de banco de dados que usam COM lidar com inicialização não são thread-safe. O problema reside no inicializar as bibliotecas COM em uma única thread e, em seguida, usando outro segmento para acessar os dados. A implementação atual do Microsoft ODBC Desktop Drivers pertence a esta categoria. Esses drivers (dBase, Microsoft Visual FoxPro, Microsoft Access, Microsoft Excel, Paradox e texto) que são fornecidos com Visual C++, use o mecanismo de banco de dados Microsoft Jet 3.0, que não é thread-safe. Além disso, o Data Access Objects (DAO) é uma API baseada em COM, assim que ele não é executado de forma confiável no ambiente multithread de uma extensão ISAPI.

Pode haver outros métodos de acesso de banco de dados que não são thread-safe.

Resolução

Para acessar um banco de dados de uma extensão ISAPI do servidor, use um driver ODBC que foi projetado e testado para uso com vários segmentos. Drivers ODBC da Microsoft para Microsoft SQL Server 6. x são um exemplo.

As classes de banco de dados ODBC do MFC são thread-safe do MFC 4.2. Certifique-se de que nenhum driver de banco de dados ODBC que você usar com essas classes também é thread-safe.

Aplicativos que usam as classes de banco de dados ODBC do MFC anteriores à versão 4.2 MFC precisará ter o código de banco de dados colocado dentro de uma seção crítica para garantir que apenas um thread acessa o código de banco de dados MFC em um tempo. Para obter mais informações, consulte classe CCriticalSection.

Atualmente, as classes de banco de dados DAO MFC não são thread-safe porque eles usam os objetos DAO COM base em.

Técnico anotações por número |nbsp; &Notas técnicas por categoria

Index