在ASP.NET网页中存储数据的最佳实践

Pau*_*aul 5 c# asp.net

我有一组多用户的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)如果我清除静态,我是否会冒另一个用户丢失数据的风险?

UPDATE

我已经重写了删除静态,保持const值并传递我需要的数据作为参数.在我需要保存更新数据的地方,我在session []变量中保留了我需要的最小量.

Dan*_*l B 3

A) 否 - 如果第二个用户在另一个用户正忙时打开页面,会发生什么情况?静态数据集将被第二个用户的数据覆盖,或者您的静态数据集是否以某种方式同时区分不同用户的数据?

B)如果您绝对必须使用静态/服务器端数据,那么是的,您应该以某种方式清除它们。然而,保证这种情况发生是很困难的。(例如,如果一个用户刚刚关闭浏览器)

C) 可能,但如果这是一个问题,那么我在 A) 中的问题已经会给你带来更大的问题。

作为一般答案,将大量数据存储在服务器的内存中通常是不好的做法。它不能很好地扩展,并且容易出现许多不同类型的错误。您的后端应该是无状态的,并且有多种方法可以实现这一点,例如将记录存储在数据库中的单独表中,该表仅在以下位置最终确定(并因此移动到“真实”表中):您拥有的几个屏幕的末尾。