如何配置emsserver.ini让Rad Server连接远程Interbase并解决许可证问题
问题描述
我曾在Stack Overflow上找到问题《Hosting RAD Server in IIS. EMS license not found》,这正是我遇到的错误。尝试该问题下的解决方案后,仍出现许可证未找到的问题。
IP为192.168.2.28的服务器上运行着带许可证的RAD Server和Interbase生产Web应用,运行正常。我们正搭建另一台服务器(用于测试或后续负载均衡),需要连接192.168.2.28上的Interbase数据库。
新服务器上emsserver.ini的Data部分配置如下:
InstanceName:192.168.2.28/gds_db Database=C:\Users\Public\Documents\Embarcadero\EMS\emsserver1.ib UserName=TheUerName Password=ThePassword
通过Postman连接新服务器时,收到错误:
"EMS license not found. To resolve this issue, install an instance of Interbase with an EMS license and configure emsserver.ini to connect to the licensed instance."
我们使用的是Delphi 10.3.1,根据上述Stack Overflow问题的内容,我认为配置是正确的,但仍有以下疑问:
- InstanceName的配置是否正确?IP地址无误,gds_db是192.168.2.28上运行的实例名称。
- emsserver1.ib文件是否需要存在于新服务器上?它不应只存在于192.168.2.28吗?如果仅需在192.168.2.28上存在,为何新服务器的emsserver.ini中要指定该文件的完整路径?Database属性应如何正确配置?
- 是否是emsserver.ini配置错误?是否需要在192.168.2.28上做一些修改才能正常工作?
疑问解答与配置修正
1. InstanceName配置正确性
你的InstanceName格式错误。对于远程Interbase实例,正确的格式应该用冒号分隔主机地址和实例名(默认端口3050可省略),斜杠仅适用于本地实例(如localhost/gds_db)。修正后的配置应为:
InstanceName=192.168.2.28:gds_db
如果远程Interbase使用了非默认端口,需补充端口号,例如:
InstanceName=192.168.2.28:3051:gds_db
2. emsserver1.ib文件位置与Database配置
emsserver1.ib不需要存在于新服务器上,它仅需在192.168.2.28的Interbase服务器本地存储。你当前配置的本地路径是错误的,Database属性需要填写远程服务器上Interbase可识别的数据库路径,有两种方式:
- 使用网络共享路径:
注意:新服务器的RAD Server运行账号需要拥有访问该共享路径的权限。Database=\\192.168.2.28\C$\Users\Public\Documents\Embarcadero\EMS\emsserver1.ib - 使用Interbase数据库别名:
在192.168.2.28的Interbase管理工具中,为emsserver1.ib创建一个别名(如EMS_DB),然后新服务器的配置改为:
这种方式更简洁,也避免了权限问题。Database=EMS_DB
3. 其他配置检查与源服务器修改
除了上述两处核心错误,还需排查以下点:
- 网络与权限:确保新服务器能访问192.168.2.28的Interbase服务端口(默认3050),防火墙已开放该端口;RAD Server运行账号需有远程连接Interbase的权限。
- 许可证限制:确认192.168.2.28上的EMS许可证支持多服务器连接,部分基础许可证可能限制仅允许本地RAD Server连接。
- 版本一致性:新服务器的RAD Server/EMS版本(Delphi 10.3.1)必须与192.168.2.28上的版本完全一致,版本不匹配会导致许可证校验失败。
- 配置冗余:检查
emsserver.ini的Data部分是否残留本地Interbase的配置项,确保所有配置都指向192.168.2.28的远程实例。
内容的提问来源于stack exchange,提问作者Ken Davis

