我有以下部署:ODP.NET通知不會在客戶端收到
A)服務器計算機:
- 的Windows 7 - 64位 - SP1(英文)
- Oracle數據庫11g快捷版
- ODAC 11.2.0.1.2(僅適用於Oracle即時客戶端安裝11.2.0.1.0)
B)ç lient機:
- 的Windows 7 - 32位 - SP1(西班牙)
- 的Microsoft .NET Framework 4.0
- ODAC 11.2.0.1.2(完全安裝)
在客戶端計算機我有一個非常簡單的應用程序,執行以下步驟:
- 創建一個OracleConnection
- 創建一個的OracleCommand(SELECT字段從表)
- 創建基於前面的命令
一旦執行這些步驟,我能夠在一個新的記錄已插入DBA_CHANGE_NOTIFICATION_REGS表看到一個OracleDependency。此記錄中的信息與我的客戶端設置(用戶連接,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應用程序? – yopez83
這是一個Windows應用程序。 –
你有沒有檢查文檔?我認爲它包含您在「加載和運行更改通知演示應用程序」[3,4]中尋找的內容。讓我知道,如果你得到它的工作。 – yopez83