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