Oracle 如何通过防火墙连接ODP.Net?

Oracle 如何通过防火墙连接ODP.Net?,oracle,firewall,odp.net,Oracle,Firewall,Odp.net,我为一个新手问题道歉,但这是我-甲骨文的新手 我的客户端和oracle服务器由防火墙隔开。有限的一组IP地址可以通过此防火墙路由。一个可路由IP是扫描侦听器的地址,它重定向到具有不可路由IP的oracle服务器 我能够将SQLDeveloper连接到我的数据库,但不是一个简单的ODP.Net客户端 使用wireshark,我看到当SQL Developer连接到扫描侦听器时,扫描应答会重定向到扫描IP上的随机端口,然后它可能会代理到实际的Oracle服务器。Wireshark透露,当ODP.Ne

我为一个新手问题道歉,但这是我-甲骨文的新手

我的客户端和oracle服务器由防火墙隔开。有限的一组IP地址可以通过此防火墙路由。一个可路由IP是扫描侦听器的地址,它重定向到具有不可路由IP的oracle服务器

我能够将SQLDeveloper连接到我的数据库,但不是一个简单的ODP.Net客户端

使用wireshark,我看到当SQL Developer连接到扫描侦听器时,扫描应答会重定向到扫描IP上的随机端口,然后它可能会代理到实际的Oracle服务器。Wireshark透露,当ODP.Net尝试连接时,扫描回复时会重定向到后端服务器的实际IP,该IP不可路由

我正在寻找关于如何让ODP.Net享受SCAN为SQL开发者提供的行为的建议

为了简单起见,我尝试使用相同的连接字符串,完全绕过tnsnames.ora。在SQLDeveloper中,我仅使用IP地址、端口和服务名称配置了一个连接。然后,我使用wireshark观察SQL Developer发送到服务器的连接字符串(是的,SQL Developer重复CID部分):

我将相同的连接字符串插入了一个
OracleConnection

        var bldr = new Oracle.DataAccess.Client.OracleConnectionStringBuilder();
        bldr.DataSource = @"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.130.X.Y)(PORT=1521))(CONNECT_DATA=(CID=(PROGRAM=SQL Developer)(HOST=__jdbc__)(USER=myusername))(SERVICE_NAME=myservice)(CID=(PROGRAM=SQL Developer)(HOST=__jdbc__)(USER=myuser))))";
        var connection = new Oracle.DataAccess.Client.OracleConnection(bldr.ConnectionString);
        connection.Open();
        connection.Close();

而不是连接,我收到一个超时。对捕获的数据包的进一步检查揭示了上面详述的行为:SCAN充当SQL Developer的代理,但不充当ODP的代理。

将SQL Developer使用的连接字符串与.NET使用的连接字符串进行比较。如果您使用完全相同的连接信息,行为应该是相同的。@ChristianShay非常感谢您的回复。我也是这么想的!但我没能让它工作。我补充了一些我试图回答这个问题的细节。有什么吸引你的眼球吗?再次感谢。一些评论:不要使用OracleConnectionStringBuilder,只需使用实际的文字连接字符串,暂时从等式中再提取一个移动部分。同样,在SQL Developer和ODP,NET中使用EZ Connect代替TNS条目。。类似于10.130.X.Y:1521/myservice的内容在尝试ODP.NET之前,请确保该字符串与SQL Developer一起使用。
        var bldr = new Oracle.DataAccess.Client.OracleConnectionStringBuilder();
        bldr.DataSource = @"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.130.X.Y)(PORT=1521))(CONNECT_DATA=(CID=(PROGRAM=SQL Developer)(HOST=__jdbc__)(USER=myusername))(SERVICE_NAME=myservice)(CID=(PROGRAM=SQL Developer)(HOST=__jdbc__)(USER=myuser))))";
        var connection = new Oracle.DataAccess.Client.OracleConnection(bldr.ConnectionString);
        connection.Open();
        connection.Close();