动态设置RAD服务器的数据库参数

时间:2019-07-18 20:00:26

标签: delphi iis isapi ems

我已经开发了一个在IIS上使用RAD Server的应用程序。到目前为止,我已经成功创建了服务器和客户端应用程序。该应用程序提供了一些信息,需要根据服务器端的MSSQL数据库进行验证。在我的FDConnection组件中设置了数据库连接参数后,在测试环境中一切正常。

但是,我想通过在访问服务器时读取ini文件来更改连接参数。

在我的开发系统上,我可以将ini文件放在bpl输出所位于的目录中。 (即C:\ Users \ Username \ Projects \ Application \ Server \ Win32 \ Debug)。然后,服务器会正​​确读取ini文件并更新组件参数。

我已经根据RAD Server文档在服务器上创建了目录,并将所需的EMS文件放置在该目录中。 (即:C:\ inetpub \ RADServer \ EMSServer)由于这是emsserver.ini文件所在的位置,因此我认为这是放置ini文件的正确位置。如果从此目录启动EMSDevServer.exe,则会正确读取ini文件,并更新FDConnection参数。

但是,当我使用ISAPI dll通过IIS启动RAD Server时,由于数据库连接失败,因此似乎找不到ini文件。

我尝试将ini文件放在C:\ Users \ Public \ Documents \ Embarcadero \ EMS目录中,但这也不起作用。

以下是我的代码,用于访问在DataModuleCreate上调用的ini文件。

procedure TdmSecurity.DataModuleCreate(Sender: TObject);
begin
  SetConnectionStr(FDConnectionSTIKS);
end;

procedure SetConnectionStr(var FDConnectionSTIKS: TFDConnection);
var ConfigIni: TInifile;
    DBServerName, DBName, Path: string;
begin
  Path := GetCurrentDir;
  ConfigIni := TIniFile.Create(System.IOUtils.TPath.Combine(Path, 'Config.ini'));
//  ConfigIni := TIniFile.Create(System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetDocumentsPath, 'Config.ini'));
//  ConfigIni := TIniFile.Create('C:\Users\leonard\Projects\LumberNowEMS\Server\Win32\Debug\config.ini');
  DBServerName := ConfigIni.ReadString(AppNode, 'ServerName', 'ZEUS');
  DBName := ConfigIni.ReadString(AppNode, 'DataBase', 'NOTHING');

//  showmessage(configini.FileName);


  with FDConnectionSTIKS.Params as TFDPhysMSSQLConnectionDefParams do
  begin
    DriverID := 'MSSQL';
    Server := DBServerName;
    Database := DBName;
    UserName := DBUserID;
    Password := DBPassword;
  end;

  ConfigIni.Free;

//  showmessage(Path + '; DBName:' +DBName);
//  Result := Format('DriverID=MSSQL;Server=%s;Database=%s;User_name=%s;Password=%s', [DBServerName, DBName, DBUserID, DBPassword]);
end;

我希望IIS从同一位置读取ini文件,但事实并非如此。有人可以告诉我应该将ini文件放在哪里,以便IIS可以正确访问它,或者是在Rad Server中设置数据库连接的更好方法吗?如果有我可以访问的变量,也许我可以将参数放在emsserver.ini中。

2 个答案:

答案 0 :(得分:1)

太晚了,还在发布答案。

System.SysUtils 中的函数在这里会有帮助。

以下函数调用将为您提供 .bpl 文件所在目录的路径。

ExtractFilePath(GetModuleName(HInstance));

将 ini 与 .bpl 文件一起放置,将上述函数的结果与 Ini 文件名结合将有助于您定位 ini。

答案 1 :(得分:0)

@nolaspeaker-我会为您提供答案,但您只发表了评论。您的回复促使我找到一种确定所使用路径的方法。因此,我将path变量的值写入了已知的文本文件。

Path := GetCurrentDir;
AssignFile(F, 'C:\Temp\Data.txt');
Rewrite(F);
WriteLn(F, Path);
CloseFile(F);

正在使用的路径是'C:\ Windows \ SysWOW64 \ inetsrv';

我将Config.ini文件移动到了该目录,并且找到并正确读取了它。

感谢您的答复。