У меня есть приложение WinForms, которое при первом запуске сначала создает OracleConnection, а затем вызывает хранимую процедуру, которая записывает запись в таблицу user_session. OracleConnection - это статический член класса, который намеренно никогда не удаляется, поскольку мы хотим, чтобы соединение существовало на протяжении всего жизненного цикла приложения. По сути, идея состоит в том, чтобы отслеживать, кто использует приложение в любое время. Когда приложение закрывается, оно вызывает другую хранимую процедуру для удаления записи из таблицы user_session.
Это все работает достаточно хорошо, но мы хотели удовлетворить тот редкий (?) Случай, когда приложение падает, и запись в нашей таблице user_session не очищается. Для этого у нас есть другая хранимая процедура, которая проверяет, какие сеансы существуют в представлении Oracle v $ session, и если он находит сеанс в user_session, который не существует в v $ session, он очищает запись в user_session. Это также, кажется, работает довольно хорошо.
Но теперь у нас есть новая служба WCF, размещенная в IIS 6. Она также выполняет ту же логику запуска, что и приложение WinForms - она создает OracleConnection и не удаляет его до тех пор, пока служба не отключится.
И все же по какой-то причине запись этой службы в v $ session исчезает. Это происходит довольно случайно, но довольно регулярно (обычно после нескольких часов работы службы). Это заставляет нашу хранимую процедуру очищать сеанс службы из нашей таблицы user_sessions, когда это не нужно, что я пытаюсь исправить.
Итак, на мой вопрос: У OracleConnections в конечном итоге истекает время, возможно, если они простаивают слишком долго? Если да, то где настроено это время? Если нет, то почему мой сеанс удаляется из v $ session?
Я думал, что если OracleConnection не удаляется, то сеанс (в v $ session) будет зависать бесконечно (или до тех пор, пока процесс не будет остановлен / уничтожен). Похоже, именно так все и работает в приложении WinForms. Но это не наш опыт работы с сервисом WCF: как я уже объяснил, сессия просто исчезает, несмотря на то, что OracleConnection все еще остается открытым. (Я попытался прослушать событие StateChange, на случай, если по какой-то причине OracleConnection закрывался, но событие никогда не срабатывает, поэтому соединение определенно все еще открыто. Мы также настроили IIS, чтобы не завершать незанятые процессы, не как служба закрыта без нашего ведома.)
Заранее спасибо.