У меня есть две разные C ++ ISAPI DLL, которые были настроены и настроены для использования IIS 7 в качестве веб-приложений. Они настраиваются с использованием разных пулов приложений, которые работают под разными учетными записями пользователей домена. Проблема, с которой я сталкиваюсь, заключается в том, что, как только одно из приложений подключается к SQL, другое приложение не может. В коде нет различий между попытками приложений установить соединение — они оба вызывают один и тот же метод статической библиотеки с одинаковыми параметрами. Единственный способ заставить второе приложение подключиться к SQL — это назначить для его пользователя пула приложений того же пользователя домена, что и для первого приложения, или наоборот (что исключает одного пользователя с недостаточными разрешениями). Я дважды проверил, что для драйвера SQL включен пул соединений ODBC, и я отслеживал журналы трассировки администратора источника данных ODBC. Если я отслеживаю журнал трассировки, когда оба пула приложений работают под разными пользователями, SQLAllocHandle
обнаруживается успешно для входа и выхода в трассировке, но SQLDriverConnect
будет успешным только для входа и выхода для первого приложения, которое вызывает его. Когда второе приложение вызывает SQLDriverConnect
с точно такими же параметрами трассировка показывает только журналы ввода и отладки, а также указывает, что этот вызов функции никогда не возвращается. Трассировки пакетов показывают, что второе приложение даже не пытается подключиться к серверу SQL. Тем не менее, первое приложение будет нормально подключаться, а запуск профилировщика в SQL покажет правильное выполнение операторов SQL. Эти приложения прекрасно работали, используя одну и ту же многопользовательскую конфигурацию в Windows 2003 x86 под IIS 6 и более старых версиях драйверов ODBC.
Я надеюсь, что есть простая настройка ODBC, которую я пропустил, но мои поиски заканчиваются пустыми. Любая помощь, которую кто-либо может оказать, будет принята с благодарностью, заранее спасибо.
После более чем недели поиска неисправностей и разговоров с Microsoft мы наконец нашли решение. Из того, что Microsoft сказала нам, они изменили способ взаимодействия процессов между 2003 и 2008 годами, и использование нашей статической связанной библиотеки, как мы, вызывало проблему блокировки, когда она работала под разными пользователями. Когда мы ввели новый поток перед вызовом коннектора ODBC, все работает нормально.