静态列表- WebMethod与EnableSession
本文关键字:EnableSession WebMethod 列表 静态 | 更新日期: 2023-09-27 18:18:42
我在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 .
但是我不确定当一个新用户登录时,我从上面的类中检索数据,静态对象(在这种情况下是列表)是否特定于新登录的用户?由于"EnableSession = true"属性?
ie:如果100个用户登录,在每100个会话创建/发出,是否有WebMethod(EnableSession)属性附加到对象意味着有一个会话特定的静态列表对象为每个用户会话?这是不是说这个静态对象是特定于会话的,因此是特定于用户的?
感谢任何澄清。提前感谢
静态数据在这种情况下可能会有问题,因为整个应用程序只有一个存储位置,因此存储在那里的值在请求之间是可见的。静态方法没有同样的问题——静态方法可以在没有实例的情况下调用,并且不能访问实例数据,但在其他方面与非静态方法相同。
给方法添加属性不可能改变任何静态字段的行为。
如果您想使用会话状态,请将数据存储在HttpContext.Current.Session