2014-02-06 4 views
0

Я использую OracleODP.NET разъем для подключения к серверу базы данных Oracle.Oracle Managed ODP.NET: подключение принудительно закрыто из-за сетевой ошибки

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

Вопрос в том, как я могу уловить Oracle Исключения связи при отключении соединения? Есть ли какая-либо технология обратного вызова или что-то, что может сообщить мне об отключении?

+0

Не могли бы вы рассказать нам немного больше о том, зачем вам это нужно? Вы все равно не используете соединение, и как только вы попытаетесь, вы поймете, что есть проблема. –

+0

Один объект соединения используется во многих местах моего приложения. Я хочу быть уверенным, что соединение действительно, когда оно используется. Мне нужно отредактировать много строк кодов, чтобы поймать и исправить отключение (я сделаю это, если не будет другого пути). Поэтому я хочу перехватить исключение разъединения и попытаться восстановить соединение еще раз, чтобы другие места (где использовался объект соединения) даже не замечали, что отключение произошло секунду назад. Что происходит, когда происходит отключение? Какое состояние получает объект соединения при нарушении соединения? –

+0

Можете ли вы просто вернуть соединение с пулом соединений OracleConnection после того, как вы его использовали, и получить еще один, когда вам это нужно? Легко настроить пул соединений, чтобы убедиться, что соединение, которое оно распределяет, всегда действует. (используйте Validate Connection = true) http://docs.oracle.com/html/E10927_01/featConnecting.htm –

ответ

0

См. Мой комментарий выше о Validate Connection = true в строке подключения пула соединений.

Вы также можете написать собственный «тестер подключения», который выполняет «Выбор sysdate from dual» в базе данных для проверки соединения.

Оба этих решения стоят в оба конца в базе данных. Ни одно из этих решений не полностью предотвращает сетевые ошибки, поскольку они могут произойти сразу после проверки.

Нижняя строка - вам нужно улавливать исключения в любое время, когда вы используете объект ODP.NET, если вы не хотите необработанного исключения.

Недоступен механизм обратного вызова, который предотвратит это.

Я действительно не понимаю, как вы, кажется, говорите, что получаете исключения, когда вы не используете объекты odp.net. Если вы получаете исключение, вы должны использовать объект odp.net в тот момент, и поэтому вы можете поймать исключение в этом коде.

+0

Спасибо! У меня появилась идея. –

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