Совместное использование ресурсов между веб-запросами?
Есть ли в ASP.Net стандартный способ распределения ресурсов между веб-запросами?
Это моя проблема:
- Есть веб-сервис, который мне нужно запросить из кода за несколькими страницами
- Этот веб-сервис допускает только один сеанс входа в систему за раз
- Если вы войдете в систему дважды, первый сеанс станет недействительным
- Сеансы хранятся в виде строк и истекают каждые 45 минут, после чего я должен повторно пройти аутентификацию
- Два запроса могут выполняться одновременно, если они используют один и тот же сеанс
При этом, каков будет лучший способ сделать эту сессию доступной для нескольких страниц / запросов одновременно? И как я могу убедиться, что после окончания сеанса, что после повторного входа в систему, новый сеанс является общим?
Это все работает на одном сервере.
3 ответа
Я бы обернул весь веб-сервис в класс, подобный сервису, и использовал бы IoC, подобный ninject, для управления экземпляром этого сервиса. Затем вы должны придумать пользовательскую область действия в ninject, чтобы аннулировать истекший сеанс.
Затем в вашем asp.net каждый запрос, которому требуется доступ к этому ресурсу веб-службы, должен попросить ninject вернуть экземпляр службы, которую вы создали. Тогда ninject удастся всегда возвращать один и тот же экземпляр, пока сеанс действителен (учитывая, что у вас есть право выбора области видимости).
Если ваш сайт работает на одном сервере, вы можете хранить строку сеанса службы в кэше, который имеет максимальное время жизни и видимость, соответствующие процессу сервера, а не одному из сеансов вашего клиента.
Тогда любой части вашего кода легко получить информацию о текущем сеансе и установить новый сеанс, если он еще не находится в кеше. Если вы сделаете так, чтобы время жизни кэша было немного короче, чем время жизни сеанса службы, то вы никогда не увидите, что сеанс отклонит вас за то, что он истек - ваша собственная кэшированная копия всегда истекает первой.
Я думаю, что вы ищете переменные "сессии" для хранения ваших данных в течение сессии.
http://msdn.microsoft.com/en-us/library/aa287606(v=vs.71).aspx
- edit --- Объект Application.net - это то, что вы ищете, он применяется с 3.0: msdn.microsoft.com/en-us/library/ms178594(v=vs.85).ASPX
При этом вы будете сохранять переменные состояния, когда ваше приложение работает на сервере.