У меня есть веб-сервис WCF, который использует состояние сеанса ASP.NET. WCF устанавливает блокировку чтения и записи для сеанса для каждого запроса. Это означает, что мой веб-сервис может обрабатывать только один запрос за раз для пользователя, что ухудшает воспринимаемую производительность нашего приложения AJAX.Как установить тайм-аут LOCK для чтения и записи в ASP.NET SessionState?
Так что я пытаюсь найти способ обойти это ограничение.
- Использование блокировки только для чтения (которая допускает одновременный доступ к сеансу) не поддерживается WCF.
- Я не нашел способ освободить блокировку чтения и записи вручную во время обработки запроса
- Итак, теперь я думаю, что может быть какой-то способ установить тайм-аут блокировки чтения и записи на очень короткий интервал, чтобы ожидания ожидания не требовали очень долгого ожидания. См. Нижнюю часть, выделенную полужирным шрифтом.
Из MSDN: http://msdn.microsoft.com/en-us/library/ms178581.aspx
«Если две параллельные запросы сделаны одной и той же сессии первый запрос получает эксклюзивный доступ к информации о сеансе Второй запрос выполняется только после того, как первый запрос закончен.. (Второй сеанс также может получить доступ, если исключительная блокировка информации освобождается, потому что первый запрос превышает тайм-аут блокировки.) Если значение EnableSessionState в директиве @ Страницы установлено в ReadOnly, запрос на чтение - только информация сеанса не приводит к исключительной блокировке данных сеанса ».
... Но я не нашел никакой информации о том, как долго этот тайм-аут блокировки, или как его изменить.
Вам нужно полное состояние сеанса? Не можете ли вы извлечь то, что вам нужно, и пройти в DTO? –
Мне не нужно все состояние сеанса, только некоторые из данных там. Я не уверен, как это относится к проблеме блокировки. –
Я нашел эти различные свойства, которые могут быть связаны и соответствующие: HttpContext.Current.Session.IsReadOnly = ложной HttpContext.Current.ReadonlySessionState = ложной System.Web.SessionState.SessionStateModule.s_configExecutionTimeout = 110 секунд системы. Web.SessionState.SessionStateModule.LOCKED_ITEM_POLLING_DELTA = 0,25 секунды System.Web.SessionState.SessionStateModule.LOCKED_ITEM_POLLING_INTERVAL = 500 (миллисекунды?) System.Web.SessionState.SessionStateModule.s_lock = System.Web.Util.ReadWriteSpinLock . –