Это не зависит от браузера, потому что транзакция выполняет на сервере Oracle , к которому подключен клиент (ASP?). NET . Уничтожение IIS разблокирует его, поскольку оно разрывает соединение между сервером БД и клиентом БД, на котором выполняется транзакция.
Теперь в этом и заключается суть проблемы :-) Один может использовать опрос из веб-клиента и заставить сервер определять, когда было получено недостаточно опросов. Однако в этом заключается большая проблема, заключающаяся в том, что (как правило) нет способа убедиться, что работник веб-службы, запустивший транзакцию, возобновлен (я думаю, что это можно сделать с некоторыми настройками продолжения, но они не часто [пока].)
Итак, здесь я предлагаю два метода:
1) Иметь дополнительного брокера, такого как системный сервис, которому можно давать команды с веб-сервера, в дополнение к некоторому опросу веб-клиента. Это будет запускать любые транзакции, назначать идентификаторы, автоматически прерывать работу, если входящие запросы перестают поступать, и т. Д. Это позволит всегда «подключаться» обратно к правильной транзакции для отмены или получения результатов или чего-либо еще. Тьфу.
2) Поскольку работник веб-службы "занят" и не может использоваться другими соединениями, пока транзакция не завершится в любом случае ... просто сделайте, чтобы веб-сервер поддерживал соединение с веб-клиентом активен, пока транзакция БД не завершится (например, запрос будет открыт в новом окне браузера, в котором будет указано: «Закрытие этого запроса прервет выполнение »). Конечно, это зависит от 1) способности конкретного сервера выполнять потоковую передачу содержимого 2) способности (неявной / явной) проверки того, что транзакция закрыта, когда запрос завершается нормально или когда поток отключен - я никогда не пытался в (ASP?). NET. Все еще гадость.
Редактировать: второй пример может быть выполнен без потоковой передачи контента - например, скрыт за вызовом AJAX или IFRAME на «сообщить пользователю, что транзакция происходит на странице». Ключевым моментом является то, что он должен быть настроен так, чтобы , когда веб-транзакция заканчивалась, он почти сразу же завершал транзакцию базы данных . Это будет зависеть от веб-сервера.
Для ASP.NET см. Поток ответов как способ с поточной передачей для потоковой передачи и / или обнаружения разорванного соединения HTTP-ответа.