2009-10-30 4 views
0

У меня есть следующий код:OracleCommand выполнения блоков, если есть OracleDependency

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.Fill(t);, выполнение просто блокирует. Команда выполняется в экземпляре, если к нему не привязана зависимость, поэтому это не база данных или данные. Я могу видеть вызов обратно регистрирующий с базой данных, запрашивая таблицу user_change_notification_regs и также открыл порт, указанный (2010):

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

Я в конце остроумия и ранд из вещей, чтобы попробовать.

ответ

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) 

Запутанной вещь (по крайней мере для меня) было исключение возбуждается не тогда, когда порт установлен, но позже, когда первый запрос был выполнен против него.

 Смежные вопросы

  • Нет связанных вопросов^_^