我在带有表单身份验证的asp.net应用程序中使用JTable(http://www.jtable.org/)。
我的网络应用程序将为每位成功登录的用户创建会话。
现在,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 .. < / p>
但我不确定当新用户登录并从上面的类中检索数据时,静态对象(在这种情况下是列表)是否会特定于新登录用户?由于'EnableSession = true'属性?
ie:如果100个用户登录,在创建/发布的100个会话中的每个会话中,是否将WebMethod(EnableSession)属性附加到对象意味着每个用户会话都有一个会话特定的静态列表对象?这基本上是说这个静态对象是特定于会话的,因此特定于用户吗?
任何澄清表示赞赏。 提前致谢
答案 0 :(得分:1)
在这种情况下,静态数据可能会出现问题,因为整个应用程序中只有一个存储位置,因此存储在那里的值可以在请求之间显示。静态方法没有相同的问题 - 静态方法可以在没有实例的情况下调用,并且无法访问实例数据,但在其他方面与非静态方法相同。
答案 1 :(得分:0)
向方法添加属性不可能改变静态字段的行为方式。
如果您想使用会话状态,请将您的数据存储在HttpContext.Current.Session