TADOConnection
не удается подключиться в разделе инициализации приложения Delphi ISAPI App (TISAPIApplication
):
Приложение построено с использованием Delphi XE SPI, работает под управлением Win 7 64 / IIS 7.5 и WinServer 2008 RS2- он не может соединиться с ADO в глобальном контексте приложения ISAPI.(В примере кода используется MS-SQLServer OLEDB - но мы также не можем использовать провайдера Sybase ASE.)
Следующий код завершается ошибкой, когда вызывается conn.Open
- TADOConnection.open
никогда не возвращается - приложение ISAPI зависает в la-laземля, исключение не возникло:
library ISAPIBareBones;
uses
ActiveX,
ADODB,
(...)
var
conn: TADOConnection;
begin
CoInitFlags := COINIT_MULTITHREADED;
Application.Initialize;
coinitialize(nil);
conn := TADOConnection.Create(Application);
conn.ConnectionString := 'Provider=SQLOLEDB.1;xxx';
//Fails here:
try
conn.Open;
except on e:exception do
logException(e)
end;
Application.WebModuleClass := WebModuleClass;
Application.Run;
end.
Тот же код в определенном обработчике запросов (Delphi webAction) работает нормально.
Мы подозреваем, что есть проблема с привилегиями выполнения в IIS на уровне приложения ISAPI,Но, насколько мы можем судить, весь стек приложений IIS от самого веб-сервера до конкретного виртуального каталога и самой библиотеки ISAPI все работают под одинаковыми учетными данными с одинаковыми привилегиями выполнения.
Тем временем мой обходной путь состоял в том, чтобы инициализировать инфраструктуру базы данных из ответного вызова http (поток ISAPI), а затем просто проверять, инициализируется ли он при каждом последующем вызове.Это работает, но обременяет меня некоторыми ограничениями, с которыми я предпочел бы не иметь дело.
Как я могу установить соединения с базой данных ADO в экземпляре TISAPIApplication
до обработки входящих запросов.