我需要在回发中保存一些文本,但由于对服务器阵列的非粘性负载平衡,我不能将其存储在服务器会话中。
在回发结束时我有
Response.Redirect(Request.RawUrl);
由于这是一个重定向,我无法在所有浏览器上可靠地设置cookie,因此它已经出局(并且4096字符限制也可能是一个问题)
我能想到的唯一选择是使用查询参数,但保存的数据可能超过2048个字符。
除了将结果存储在数据库中之外,还有解决方法吗?
答案 0 :(得分:1)
使用Server.Transfer,您可以设置源页面的一些公共属性:
public string SomeTextINeed { get; set; }
然后,一旦设置了文本,就可以调用
Server.Transfer("myexcitingUrl");
在目标page_Load方法上检查文字:
SourceWebForm1 webform = Context.Handler as (SourceWebForm1);
string someTextINeed = webform.SomeTextINeed;
答案 1 :(得分:0)
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中触发重定向。这意味着您先设置cookie然后重定向。如果该值太大而无法存储在cookie中,我会说这是不可能的,您需要将其存储在数据库中。
答案 2 :(得分:0)
这里唯一合适的解决方案是使用ASP.NET会话状态功能,实际上就是它的构建目的。
对于非数据库要求,您只需使用共享的内存缓存而不是数据库来存储会话状态,有一些可供选择的已经适用于ASP.NET会话:
是的,有一个学习曲线,但是在你设置之后你就不会后悔,这给了你很多自由,特别是在处理负载均衡器和非粘性会话时,它确实存在值得。