У меня есть относительно простая проблема, которую я не могу решить без большого количества уродливых обходных путей. По сути, я разрабатываю клиента платежного шлюза, в соответствии с которым веб-сайт сообщает серверу платежей о предстоящем платеже, клиент переводится на сервер платежей, и как только платеж завершен, сервер платежей информирует веб-сайт об отдельном потоке. что оплата была сделана, и перенаправляет клиента. Теперь клиент может быть «получен» на веб-сайте до получения уведомления о платеже. Таким образом, мне нужно запрограммировать систему на ожидание получения уведомления или не более 30 секунд.
После получения уведомления объект Order
помечается как «Оплаченный». Проблема заключается в следующем:
- Клиент перенаправлен на сайт раньше,
Order.Paid
по-прежнему false
- Через 1 - 5 секунд уведомление получено и
Order
помечено как true
- Благодаря управлению сессиями Nhibernate клиент по-прежнему видит
Order.Paid
как false
в другом потоке.
- Что еще хуже, иногда клиент
Order
сбрасывается на End_Request
, а Order.Paid
снова сбрасывается на false
.
Единственный способ, которым я попытался, похоже, работает, это то, что я явно удаляю сеанс Nhibernate перед ожиданием, а затем постоянно создаю новый сеанс, пока он не будет найден платным. Однако проблема в том, что, поскольку исходный сеанс был удален, отложенная загрузка любых объектов, уже загруженных до того, как рука перестанет работать, и приведет к ошибкам.
На мой взгляд, все выглядит просто, но все же кажется довольно сложным из-за управления сессиями, есть идеи, как это сделать?
Спасибо!