эта тема связана с одной из Java, но я не могу найти решение для C#. http://theblasfrompas.blogspot.com/2010/01/closing-obsolete-database-change.htmlОтменить регистрацию изменений оракула
Я использую Oracle.ManagedDataAccess.dll с уведомлением об изменении.
Все работает нормально, но у меня есть одна проблема. Когда мое приложение запускается, я создаю уведомление базы данных (с таймаутом 0 - оно должно быть), и у меня есть обращение к OracleDependency. Когда мое приложение останавливается, я могу использовать эту ручку, чтобы позвонить удалить регистрацию таким образом:
oracleDependency.RemoveRegistration(connection);
Проблема возникает, когда мои приложения происходит сбой в некотором роде и я не могу вызвать метод RemoveRegistration. Я теряю дескриптор OracleDependency, поэтому после запуска приложения я не могу удалить устаревшие регистрации. Как всегда при запуске приложение создаст новую регистрацию, но теперь будет существовать ДВА - одна новая и одна устаревшая. Таким образом, мое приложение получит уведомление дважды. Вопрос в том, как удалить устаревшие уведомления, созданные моим приложением.
Ok мое дальнейшее исследование ниже: я нашел на гадательных документации, которая существует статический метод OracleDependency.GetOracleDependency (строка GUID) Так после создания оракулы зависимости я сохраняю его Id (кажется, его справы). Когда мое приложение остановлено, я могу использовать этот метод для получения моей зависимости. К сожалению, он не работал после перезапуска приложения:/Если я пытаюсь получить OracleDependency по этому идентификатору, он возвращает значение null, но он существует в USER_CHANGE_NOTIFICATION_REGS