Oracle10g 如果具有OracleDependency,则OracleCommand执行块

Oracle10g 如果具有OracleDependency,则OracleCommand执行块,oracle10g,dependencies,notifications,oraclecommand,Oracle10g,Dependencies,Notifications,Oraclecommand,我有以下代码: OracleConnection conn = new OracleConnection(connString); OracleCommand command = new OracleCommand("select * from testtable", conn); conn.Open(); OracleDependency.Port = 2010; OracleDependency dependency = new OracleDependency(command); comm

我有以下代码:

OracleConnection conn = new OracleConnection(connString);
OracleCommand command = new OracleCommand("select * from testtable", conn);
conn.Open();
OracleDependency.Port = 2010;
OracleDependency dependency = new OracleDependency(command);
command.AddRowid = true;
command.Notification.IsNotifiedOnce = false;

dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

command.CommandTimeout = 1000;
DataTable t = new DataTable();
OracleDataAdapter adapter = new OracleDataAdapter(command);
adapter.Fill(t);
conn.Close();
这是一段非常简单的代码,它使用Oracle Notification Service接收有关特定表更改的通知

我的问题是,当我调用adapter.Fillt时;执行只是阻塞。如果没有依赖关系,那么该命令将在实例中执行,因此它不是数据库或数据。我可以通过查询表user_change_notification_regs看到回调在数据库中注册,并且还打开了指定的端口2010:

net8://(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST='myIp')(PORT=2010)))?PR=0

我束手无策,没有什么可以尝试的。

我在尝试将端口号设置为机器上已使用的端口时,看到类似情况下出现异常。当我对设置端口号发表评论时,它运行得很好,所以也许你可以试试?并检查netstat-na中是否有已使用的端口

我看到的例外是:

Oracle.DataAccess.Client.OracleException: ORA-24912: Listener thread failed. Listen failed.
at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck)
at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
at Oracle.DataAccess.Client.OracleDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
至少对我来说,令人困惑的是,异常不是在设置端口时引发的,而是在对其执行第一个查询时引发的