0

我在带有表单身份验证的 asp.net 应用程序中使用 JTable ( http://www.jtable.org/ )。

我的 Web 应用程序将为每个成功登录的用户创建一个会话。

现在,Jtable 使用一个静态列表的数据源。这个静态列表所在的类不是静态的。

      public class UserSpecificClass
 {     
    [WebMethod(EnableSession = true)]
    public static object PaymentsList(int jtStartIndex, int jtPageSize, string jtSorting)
    {
     //Get data from database
            using (DBDataContext context = new DBDataContext(_staticConnString))
            {
                // LINQ Query - Get userDetails including all relationships to user
                var PaymentDetails = (from t1 in context.Charges
                                      join t2 in context.Invoices on t1.InvoiceID equals t2.ID
                                      where t2.MemberID == 5
                                      select new
                                      {
                                          Related_Invoice = t1.InvoiceID,
                                          Charge_Description = t1.ChargeType.Name,
                                          Charge_Amount = t1.Amount,
                                          Amount_Paid = t1.PaidAmount,
                                          Credited = t1.CreditAmount,
                                          Last_Payment = t2.PaidAmount == 0 ? "Not Paid" : t2.PaidDate.ToString()

                                      }).ToList();

                 _mhubPayments = new List<MHubPaymentsHistory>();
                foreach (var obj in PaymentDetails)
                {
                    MHubPaymentsHistory data = new MHubPaymentsHistory(obj.Related_Invoice, obj.Charge_Description, obj.Charge_Amount,
                                                obj.Amount_Paid, obj.Credited, obj.Last_Payment);

                    _mhubPayments.Add(data);
                }

                //Return result to jTable
                return new { Result = "OK", Records = _mhubPayments, TotalRecordCount = recordCount };
    }
}

现在,我知道静态变量和属性将被创建一次,并且在服务器上的应用程序域中可供所有用户使用......所以很明显,我不希望 Web 应用程序中有 1 个 InvoicesList ......

但是我不确定当新用户登录并从上面的类中检索数据时,静态对象(在这种情况下为 list )是否是特定于新登录用户的会话?由于“EnableSession = true”属性?

即:如果有 100 个用户登录,在创建/发布的这 100 个会话中的每一个中,将 WebMethod(EnableSession) 属性附加到对象是否意味着每个用户会话都有一个特定于会话的静态列表对象?这基本上是说这个静态对象将是特定于会话的,因此是特定于用户的?

任何澄清表示赞赏。提前致谢

4

2 回答 2

1

在这种情况下,静态数据可能会出现问题,因为整个应用程序只有一个存储位置,因此存储在那里的值在请求之间是可见的。静态方法没有同样的问题——静态方法可以在没有实例的情况下调用并且不能访问实例数据,但在其他方面与非静态方法相同。

于 2013-06-18T00:56:05.177 回答
0

向方法添加属性不可能改变任何静态字段的行为方式。

如果要使用会话状态,请将数据存储在HttpContext.Current.Session

于 2013-06-17T20:27:51.533 回答