Существуют ли альтернативы WebMethod для обхода обратных передач, но доступа к сеансу?

Поэтому я пытаюсь повысить производительность нашего приложения ASP.Net Webforms.

Как обычно, постбэки делают все возможное, чтобы снизить производительность. Я пришел, чтобы узнать о вызовах WebMethod, которые мне тоже удалось заставить работать. Однако для моего конкретного сценария мне нужно получить доступ к сеансу, что, очевидно, невозможно в статическом методе.

Итак, теперь моя идея заключалась в том, чтобы написать HttpModule для решения этой проблемы. Однако это кажется довольно трудоемким, поэтому мне интересно, знает ли кто-нибудь из вас о готовом решении для этой задачи?

Имейте в виду, это просто вопрос о том, существует ли что-то уже. Написать модуль было бы довольно просто. Я просто хотел бы не изобретать велосипед.


person Dbl    schedule 01.08.2014    source источник
comment
Когда вы используете атрибут WebMethod в методе, вы можете указать свойство EnableSession: ="nofollow noreferrer">msdn.microsoft.com/en-us/library/   -  person Yuriy Galanter    schedule 01.08.2014
comment
Я так делаю постоянно - чтобы показать, например, прогресс загрузки файлов. Загрузка файла происходит в iframe и обновляет переменную сеанса по мере ее выполнения. PageMethods используется для запроса переменной Session со страницы, содержащей iframe, поэтому может отображаться индикатор выполнения.   -  person Martin Smellworse    schedule 01.08.2014
comment
доступ к сеансу ваша проблема? если да, почему бы вам не использовать HttpContext.Current.Session["..."], он доступен в статических методах   -  person faby    schedule 01.08.2014
comment
@faby нет ли разницы между HttpContext.Current.Session[a] = b и Session[a] = b на странице?   -  person Dbl    schedule 01.08.2014
comment
нет @AndreasMüller, я отправляю ответ   -  person faby    schedule 01.08.2014
comment
Зачем даже минусовать? Я просил альтернативы, потому что я, очевидно, не знал об этом... Особенно, когда я нашел 3 ТАКИХ вопроса, и это не дубликат...   -  person Dbl    schedule 01.08.2014


Ответы (1)


если ваша проблема заключается в доступе к объекту Session из статического члена, вы можете использовать HttpContext.Current.Session["..."]

[WebMethod(EnableSession = true)]
public static string Test()
{
    string s = HttpContext.Current.Session["Test"].ToString();
    return s;
}

см. здесь для документации о HttpContext.Current Property; внутри этого свойства у вас также есть Request, Response и так далее.

По предложению @Martin Smellworse

Где бы вы ни установили сеанс, вам нужны EnableSessionState="ReadOnly" и Async="true" в объявлении страницы.

person faby    schedule 01.08.2014
comment
я попробую и отмечу как ответ, а затем удалю вопрос, так как по какой-то причине за меня проголосовали - person Dbl; 01.08.2014
comment
Интересно, можете ли вы сказать, кто минусует? Я не понимаю, почему некоторые люди настолько «святее тебя». Мне это кажется вполне резонным вопросом. Везде, где вы устанавливаете сеанс, вам необходимо EnableSessionState=ReadOnly и Async=true в объявлении страницы. - person Martin Smellworse; 01.08.2014
comment
@MartinSmellworse Спасибо за дополнительную информацию. И да... я тоже не понимаю. не то чтобы уже были десятки вопросов по этому поводу. - person Dbl; 01.08.2014
comment
@MartinSmellworse ты прав! спасибо за предложение. я вставлю это в свой ответ - person faby; 01.08.2014
comment
Рад, что у тебя получилось. В первый раз, когда я сделал это, я потратил около 2 дней, пытаясь заставить его работать! - person Martin Smellworse; 01.08.2014
comment
В моем случае я не могу заставить его работать с EnableSessionState=ReadOnly. Если вытащить, то работает. Когда я оставляю EnableSessionState=ReadOnly там, я могу получить доступ к сеансу, но он содержит только данные, добавленные до запуска страницы, и все, что я добавил во время загрузки страницы, недоступно внутри веб-метода. Когда я удаляю EnableSessionState=ReadOnly, все, что я добавил во время загрузки страницы, доступно в веб-методе. - person Joe Salazar; 25.10.2019