【发布时间】:2013-06-17 20:24:54
【问题描述】:
我在带有表单身份验证的 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..
但我不确定当新用户登录并从上面的类中检索数据时,静态对象(在本例中为列表)是否是新登录用户特定的会话?由于“EnableSession = true”属性?
ie:如果有 100 个用户登录,那么在创建/发布的这 100 个会话中的每一个中,将 WebMethod(EnableSession) 属性附加到对象是否意味着每个用户会话都有一个特定于会话的静态列表对象?这基本上是说这个静态对象将是特定于会话的,因此是特定于用户的?
任何澄清表示赞赏。 在此先感谢
【问题讨论】:
-
我没有看到任何静态字段。
-
公共静态对象 PaymentsList ?
-
这是一个函数。它不存储任何数据;你的问题没有意义。
-
特别是,你有任何静态列表。
-
好吧..但你知道我来自哪里吗?那么,考虑到您的更正,在这种情况下,此方法返回的对象是否是每个用户特定的会话?我试图了解在这种特定情况下使用“静态”的影响,并确保每个用户都不会看到任何其他用户信息?即时“更新”要返回的新类列表(List
())这一事实是否足以确保显示的记录将是登录用户?我再次尝试通过 web 方法了解静态的使用并启用会话.. 谢谢