使用IBLite连接到Android上的Interbase的远程实例不起作用

问题描述

在Delphi 10.4.1中,我试图构建一个Android应用程序,该应用程序连接到在笔记本电脑上运行的Interbase实例(可以从台式机远程连接到该实例)。我得到了例外:

Project Project6.apk raised exception class EIBNativeException with message '[FireDAC][Phys][iblite]Unable to complete network request to host "192.168.1.58".
Failed to locate host machine.
Undefined service gds_db/tcp.'.

连接参数:

Database=192.168.1.58:C:\Users\Public\Documents\Embarcadero\Studio\21.0\Samples\data\employee.gdb
User_Name=sysdba
Password=masterkey
DriverID=IB

如果我连接到本地数据库,或者在Windows上运行该应用程序,则一切正常。

我已经在XE7(https://youtu.be/XAZQfYzvxHc?t=1384)中看到了这一点,但是无法在10.4.1中使用。

我在做什么错了?

解决方法

如果Windows计算机上的InterBase在默认实例'gds_db'上运行,则可能是在端口3050上使用TCP套接字。尝试将Android应用程序的数据库URL更改为以下内容,以便它包含目标3050端口号。我假设它无法自动在Android上解析“ gds_db”名称,因为未在Android上定义TCP套接字服务名称。在Windows,Linux,macOS等台式机平台上,InterBase安装程序会更新系统服务文件以将“ gds_db”名称转换为3050。仅提供TCP套接字端口号是一种无需端点名称即可定位目标端点的防故障方法

数据库= 192.168.1.58 / 3050:C:\ Users \ Public \ Documents \ Embarcadero \ Studio \ 21.0 \ Samples \ data \ employee.gdb