0

我有两个不同的 C++ ISAPI DLL,它们已为 IIS 7 设置和配置以用作 Web 应用程序。它们是使用在不同域用户帐户下运行的不同应用程序池设置的。我遇到的问题是,一旦其中一个应用程序连接到 SQL,另一个应用程序就不能。应用程序尝试建立连接的方式在代码上没有区别——它们都使用相同的参数调用相同的静态库方法。让第二个应用程序连接到 SQL 的唯一方法是将其应用程序池用户设置为与第一个应用程序相同的域用户,反之亦然(排除一个用户权限不足)。我已经仔细检查过是否为 SQL 驱动程序打开了 ODBC 连接池,并且我 已监视 ODBC 数据源管理员跟踪日志。如果我在两个应用程序池在不同用户下运行时监控跟踪日志,SQLAllocHandle在 Trace 中进入和退出都成功显示,但SQLDriverConnect只有第一个调用它的应用程序进入和退出都成功。当第二个应用程序SQLDriverConnect使用完全相同的参数调用时,跟踪仅显示输入,调试日志也表明此函数调用永远不会返回。数据包跟踪表明第二个应用程序甚至从未尝试连接到 SQL 服务器。但是,第一个应用程序连接得很好,并且在 SQL 中运行分析器将显示 SQL 语句的正确执行。这些应用程序在 IIS 6 和旧版本的 ODBC 驱动程序下使用相同的多用户配置在 Windows 2003 x86 上运行良好。

我希望我错过了一个简单的 ODBC 设置,但我的搜索结果是空的。任何人都可以提供的任何帮助将不胜感激,在此先感谢。

4

1 回答 1

0

经过一个多星期的故障排除和与 Microsoft 的交谈,我们终于找到了解决方案。从微软告诉我们的情况来看,他们在 2003 年到 2008 年期间改变了进程相互交互的方式,并且像我们一样使用我们的静态链接库在不同用户下运行时会导致锁定问题。当我们在调用 ODBC 连接器之前引入一个新线程时,一切正常。

于 2014-05-16T19:07:05.967 回答