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

时间:2015-05-27 13:33:06

标签: oracle firewall odp.net

为新手问题道歉,但那是我 - 甲骨文的新手。

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

我能够将SQL Developer连接到我的数据库,但不是简单的ODP.Net客户端。

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

我正在寻找有关如何让ODP.Net享受SCAN为SQL Developer提供的行为的建议。

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

(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=myusername))))

我将此相同的连接字符串插入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的代理。

0 个答案:

没有答案