我有一组多用户的ASP.NET网页.页面使用AJAX更新面板,因此我可以避免在每次回发时更新屏幕.每个页面的生命周期如下:
1.在Page_Load期间,从Web服务获取用户的相关数据.
2.将数据(非常大)和服务引用存储在静态数据集中.
3.允许通过屏幕控制(网格,文本框)对部分数据进行各种编辑
.4.验证通过表单
5 捕获的数据.将更新的数据发送回服务
我在Page类本身中使用静态变量执行此操作,如下所示:
public partial class MyPage : System.Web.UI.Page
{
static xxxx.DataCaptureServiceClient m_Service; //reference to web service
static string m_PersonID = string.Empty; //current person_id page is viewing
static ServResponse m_ServiceResult = null; // reference to our data to edit ( ServResponse is a large data contract)
static string m_SortExpression = "Reference"; //default sort expression for grid
const int PERSONID_COLUMN = 0; //column index in grid for the personID column
const int STATUS_COLUMN = 4; //column index in grid for the application status
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!Page.IsPostBack)
{
// Get new service instance.
m_Service = new xxxx.DataCaptureServiceClient();
ShowDataOnPage(); //get data in m_ServiceResult and bind to a grid on screen
}
}
catch (Exception ex)
{
Response.Redirect("ErrorPage.aspx", false);
}
}
protected void butNext_Click(object sender, EventArgs e)
{
try
{
Page.Validate();
if (Page.IsValid)
{
// Use m_ServiceResult and m_Service to send a packaged submission to the service.
SendDatatoService();
Response.Redirect("TheNextPage.aspx", false);
}
}
catch (Exception ex)
{
Response.Redirect("ErrorPage.aspx", false);
}
}
//Other methods which allow edits to m_ServiceResult
Run Code Online (Sandbox Code Playgroud)
我想知道是否:
A)这是实施的好方法还是有更好的实践?
B)当我重定向到另一个页面时,我应该通过将所有静态设置为NULL来清除内存吗?
C)如果我清除静态,我是否会冒另一个用户丢失数据的风险?
我已经重写了删除静态,保持const值并传递我需要的数据作为参数.在我需要保存更新数据的地方,我在session []变量中保留了我需要的最小量.
A) 否 - 如果第二个用户在另一个用户正忙时打开页面,会发生什么情况?静态数据集将被第二个用户的数据覆盖,或者您的静态数据集是否以某种方式同时区分不同用户的数据?
B)如果您绝对必须使用静态/服务器端数据,那么是的,您应该以某种方式清除它们。然而,保证这种情况发生是很困难的。(例如,如果一个用户刚刚关闭浏览器)
C) 可能,但如果这是一个问题,那么我在 A) 中的问题已经会给你带来更大的问题。
作为一般答案,将大量数据存储在服务器的内存中通常是不好的做法。它不能很好地扩展,并且容易出现许多不同类型的错误。您的后端应该是无状态的,并且有多种方法可以实现这一点,例如将记录存储在数据库中的单独表中,该表仅在以下位置最终确定(并因此移动到“真实”表中):您拥有的几个屏幕的末尾。
归档时间: |
|
查看次数: |
2967 次 |
最近记录: |