我有两个不同的C ++ ISAPI DLL,它们已经设置并配置为IIS 7用作Web应用程序。它们使用在不同域用户帐户下运行的不同应用程序池进行设置。我遇到的问题是,一旦其中一个应用程序连接到SQL,另一个应用程序就不能。应用程序如何尝试建立连接之间的代码没有区别 - 它们都使用相同的参数调用相同的静态库方法。使第二个应用程序连接到SQL的唯一方法是将其应用程序池用户设置为与第一个应用程序相同的域用户,反之亦然(这将排除一个用户权限不足的用户)。我已经仔细检查了SQL驱动程序的ODBC连接池是否已打开,并且我已经监视了ODBC数据源管理员跟踪日志。如果我在两个应用程序池在不同用户下运行时监视跟踪日志,则SQLAllocHandle
在跟踪中成功显示进入和退出,但SQLDriverConnect
仅对第一个进入和退出都成功调用它的应用程序。当第二个应用程序使用完全相同的参数调用SQLDriverConnect
时,跟踪仅显示输入和调试日志,还指示此函数调用永远不会返回。数据包跟踪表明第二个应用程序甚至从未尝试连接到SQL服务器。但是,第一个应用程序将正常连接并在SQL中运行探查器将显示SQL语句的正确执行。在IIS 6和旧版本的ODBC驱动程序下,使用Windows 2003 x86上的相同多用户配置,这些应用程序运行良好。
我希望有一个我错过的简单ODBC设置,但我的搜索结果是空的。任何人都可以提供的帮助将非常感谢,提前谢谢。
答案 0 :(得分:0)
经过一周多的故障排除和与Microsoft的交谈后,我们终于找到了解决方案。从微软告诉我们的情况来看,他们改变了流程在2003年到2008年之间相互交互的方式,并且使用我们的静态链接库,就像我们在不同用户下运行时导致锁定问题一样。当我们在调用ODBC连接器之前引入一个新线程时,一切正常。