尽管主机说它正在侦听端口,但无法使用 drda 连接到另一台机器上的 informix

Posted

技术标签:

【中文标题】尽管主机说它正在侦听端口,但无法使用 drda 连接到另一台机器上的 informix【英文标题】:can't connect to informix on a different machine with drda although host says it's listening on port 【发布时间】:2017-06-01 20:08:30 【问题描述】:

我在使用informix 的通用.net 驱动程序连接到另一台机器上的informix 服务器时遇到问题。当我运行 testconn40_32 时,它失败并出现错误 08001。奇怪的是主机说它正在侦听指定的端口。

host 中的 sqlhosts 文件有一行指定 drda 连接,如下所示:

dr_informix1210 drsoctcp localhost dr_informix1210

我还在主机的 onconfig 文件中为该主机指定了一个 DBSERVERALIASES 名称:DBSERVERALIASES dr_informix1210, lo_informix1210

我还设置了所有环境变量,包括 PATH、INFORMIXDIR、INFORMIXSERVER、ONCONFIG 和 INFORMIXSQLHOSTS。

我的服务文件中有这样的服务行:

dr_informix1210    9089/tcp

我添加了一条规则以允许该端口上的连接到防火墙

我在 /etc/hosts 中的 hosts 文件也列出了这样的服务器:

127.0.0.1     localhost

我的连接字符串如下:Database=sigac_historico;Server=(ip adress:port);UserID=(userid);Password=(password)

所以我想知道我是否错过了任何步骤。我知道该错误意味着由于主机拒绝连接而未启用 drda。 主机运行 Ubuntu,我的程序是用 .NET 编写的,从 windows 运行。

我还会提到,如果我对该服务器进行 telnet,它会引发错误,提示无法打开连接。

还有一个问题:我看到 IBM 有一个不同的产品叫做 DB2,¿这是唯一支持 ADO.NET 的产品吗?目前我正在尝试连接到 Informix Server

谢谢。

【问题讨论】:

如果您的服务器 sqlhosts 文件配置为仅侦听 localhost,则 informix 实例将不接受来自其他服务器的连接。 正如@Luís 上面提到的,尝试将 localhost 替换为您的主机外部网络接口 IP 地址。如果您的客户端应用程序(testconn40_32)也在同一主机上运行,​​那么它可能是一个不同的问题。 Informix 确实支持 ADO.NET,它应该可以工作。 @PradeepNatarajan 我确实会尝试一下,我的客户端应用程序在另一台机器上运行,所以希望它是我正在寻找的答案。 【参考方案1】:

为了补充 Pradeep 所说的,您还可以将“*hostname”放在 SQLHOSTS 文件(服务器端)的第 3 列中,这样它就会产生一个所有网络接口(real if、localhost 等)的侦听器。

关于客户,是的,IBM 有一个很大的想法叫 DB2(我会尽量避免;)

要从 .Net 连接 Informix 数据库,您有两种选择: 1. 连接到 DRDA 别名的 IBM Data Server Client(这是您目前拥有的) 2. Informix .Net Provider(包含在“Informix CSDK”中)

后者是“原生/经典”.Net Provider,使用标准 SQLI 协议(类似于所有 Informix 客户端)并支持比 DRDA 更多的 Informix 功能,但目前缺少一些“新”.Net 功能( EF/实体模型之类的东西)。

看看Informix Developers Handbook,它通过一些很好的示例来解释这两个提供者如何使用它们。

【讨论】:

以上是关于尽管主机说它正在侦听端口,但无法使用 drda 连接到另一台机器上的 informix的主要内容,如果未能解决你的问题,请参考以下文章

WAMP:无法连接到本地主机

无法让 nextcloud 在端口 82 上侦听

VirtualBox 端口转发不适用于 NAT 适配器

boost.asio 如何发现我的服务器应用程序正在侦听哪个端口?

无法连接到 SMTP 主机:email-smtp.us-east-1.amazonaws.com,端口:465,响应:-1

无法连接到服务器:没有到主机的路由服务器是否在主机“ ************”上运行并接受端口5432上的TCP / IP连接?