尽管主机说它正在侦听端口,但无法使用 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的主要内容,如果未能解决你的问题,请参考以下文章
boost.asio 如何发现我的服务器应用程序正在侦听哪个端口?
无法连接到 SMTP 主机:email-smtp.us-east-1.amazonaws.com,端口:465,响应:-1
无法连接到服务器:没有到主机的路由服务器是否在主机“ ************”上运行并接受端口5432上的TCP / IP连接?