Como posso fazer conexões de banco de dados ADO em 'TISAPIApplication` antes de processar solicitações de entrad
TADOConnection
não está conseguindo se conectar na seção de inicialização do aplicativo Delphi ISAPI App TISAPIApplication
):
@Application é construído com o Delphi XE SPI, executando o Win 7 64 / IIS 7.5 e o WinServer 2008 RS2 - não pode se conectar ao ADO no contexto global de aplicativos ISAPI. (O código de exemplo está usando o MS-SQLServer OLEDB - mas também falhamos ao usar o provedor Sybase ASE.)
O código a seguir falha quandoconn.Open
é chamado -TADOConnection.open
nunca retorna - o aplicativo ISAPI trava na terra de la-la, sem exceçã
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.
O mesmo código em um manipulador de solicitações específico (Delphi webAction) funciona be
Suspeitamos um problema com privilégios de execução no IIS no nível do aplicativo ISAPI. Mas, tanto quanto sabemos, toda a pilha de aplicativos IIS do servidor da web até o diretório virtual específico e a dll ISAPI estão em execução sob as mesmas credenciais e com os mesmos privilégios de execuçã
nquanto isso, minha solução alternativa foi inicializar a infraestrutura do banco de dados a partir de uma chamada de resposta http (um thread ISAPI) e simplesmente verificar se ela foi inicializada em cada chamada subsequente. Isso funciona, mas me sobrecarrega com algumas restrições que eu preferiria não lida
Como posso fazer conexões de banco de dados ADO em umTISAPIApplication
instância, antes de manipular solicitações recebida