ASP.Net Сохранение состояния через PostBack - PullRequest
1 голос
/ 13 марта 2012

Мне нужно сохранить некоторый текст в обратной передаче, но я не могу сохранить его в сеансе сервера из-за нелипкой балансировки нагрузки для массива серверов.

В конце постбэка у меня есть

Response.Redirect(Request.RawUrl);

Так как это перенаправление, я не могу надежно установить cookie-файлы во всех браузерах, так что этого нет (и ограничение в 4096 символов также может быть проблемой)

Единственный вариант, который я могу придумать, - это использовать параметры запроса, но сохраняемые данные могут содержать более 2048 символов.

Есть ли решение этой проблемы, кроме сохранения результата в базе данных?

Ответы [ 3 ]

1 голос
/ 13 марта 2012

Используя Server.Transfer, вы можете установить публичное свойство вашей исходной страницы:

public string SomeTextINeed { get; set; }

Затем, когда у вас есть набор текста, вы можете позвонить

Server.Transfer("myexcitingUrl");

И на целевом методе page_Load проверьте ваш текст:

SourceWebForm1 webform = Context.Handler as (SourceWebForm1);
string someTextINeed = webform.SomeTextINeed;
0 голосов
/ 13 марта 2012

Ваше единственное правильное решение здесь - это использовать функциюaility состояния сеанса ASP.NET, фактически именно для этого она была создана.

Для требований, не связанных с БД, вы можете просто использовать общий доступ кКэш памяти, а не БД для хранения состояния сеанса , есть пара вариантов, которые уже хорошо работают с сеансами ASP.NET:

Да, есть кривая обучения, но после настройки вы не пожалеете об этом, это дает вам многосвобода, особенно когда имеешь дело с балансировщиком нагрузки и незакрепленными сеансами, это определенно стоит того.

0 голосов
/ 13 марта 2012

Viewstate может работать.Сохраняйте / извлекайте значения следующим образом:

ViewState["MyNumericValue"] = myNumericValue;
//at next postback
myNumericValue = (int)ViewState["MyNumericValue"];

Состояние просмотра хранится в скрытом html-поле на странице, поэтому для сохранения значений вам потребуется HTTP POST, а не GET (который будетпроблема, если вам нужно сказать Response.Redirect. Скорее отправьте форму из JavaScript следующим образом:

document.forms["myform"].submit();

Если это не сработает, в зависимости от размера страницы и воздействия, которое вы готовысделать со своей скоростью загрузки, вы можете инициировать перенаправление в javascript, а не response.redirect. Это означает, что вы сначала устанавливаете куки, а затем перенаправления. Если значение слишком велико для хранения в куки, я бы сказал, что это невозможнои что вам нужно будет сохранить его в базе данных.

...