【发布时间】:2020-03-31 00:12:07
【问题描述】:
我有以下部署:
A) 服务器机器:
- Windows 7 - 64 位 - SP1(英文)
- Oracle 数据库 11g 快捷版
- ODAC 11.2.0.1.2(仅安装了 Oracle Instant Client 11.2.0.1.0)
B) 客户端机器:
- Windows 7 - 32 位 - SP1(西班牙语)
- 微软 .NET Framework 4.0
- ODAC 11.2.0.1.2(完整安装)
在客户端机器中,我有一个非常简单的应用程序,它执行以下步骤:
- 创建一个 OracleConnection
- 创建 OracleCommand(从表中选择字段)
- 根据前面的命令创建一个 OracleDependency
执行完这些步骤后,我可以在 DBA_CHANGE_NOTIFICATION_REGS 表中看到已插入新记录。此记录中的信息与我的客户端设置(用户连接、IP 地址、IP 端口)完全匹配。
然后,我修改数据库以确保要通知的查询结果在此修改后发生更改。我的申请应该得到通知,但事实并非如此。
我已经检查(使用 Wireshark),修改后,一些流量通过 DBA_CHANGE_NOTIFICATION_REGS 中指定的端口从服务器发送到客户端,但客户端应用程序没有收到通知。
所以,似乎通知创建正确,从服务器到客户端计算机的通知也被发送,但通知没有到达应用程序。
为了接收通知,我还需要在客户端做什么?
提前谢谢....
这里是我使用的代码:
private void buttonConnectOracle_Click(object sender, EventArgs e)
{
String constr = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.164.10.202)(PORT=30005))" +
"(CONNECT_DATA=(SID=MASI)));User Id=dbuser;Password=dbuserpasswd;";
try
{
OracleCon = new OracleConnection(constr);
OracleCon.Open();
buttonConectarOracle.Enabled = false;
RegisterOracleCommandDependency();
}
catch (Exception E)
{
MessageBox.Show(String.Format("ERROR connecting with Oracle BD: {0}{0}Connection string: {1}{0}{0}Error:{0}{2}", "\n\r", constr, E.Message));
}
}
private void RegisterOracleCommandDependency()
{
String sql = "SELECT * FROM SCEHMA.REF";
OracleCommand command = new OracleCommand(sql, OracleCon);
OracleDep = new OracleDependency(command);
command.Notification.IsNotifiedOnce = false;
command.ExecuteNonQuery();
OracleDep.OnChange += new Oracle.DataAccess.Client.OnChangeEventHandler(OnMyNotificationOracle);
}
public void OnMyNotificationOracle(object src, OracleNotificationEventArgs args)
{
String logStr = "Notification received at " + DateTime.Now.ToString();
//TODO: Add logStr to log
}
【问题讨论】:
-
您的客户端应用程序是 Web、控制台还是 Windows 应用程序?
-
这是一个 Windows 应用程序。
-
您查看过文档吗?我认为它包含您在“加载和运行更改通知演示应用程序”[3,4] 中寻找的内容。如果你让它工作,请告诉我。
-
11.2 数据库和客户端中存在可能导致无法接收通知的问题。请在此处查看我的答案以确保您没有遇到该错误:stackoverflow.com/questions/25629461/…
-
请发布您的代码
标签: oracle notifications odp.net