и установить версию ISAPI, которая использовалась для сборки DLL.

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 зависает на ля-ля земле, исключений не возникает:

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 Например, перед обработкой входящих запросов.

Ответы на вопрос(2)

Ваш ответ на вопрос