C# 静态列表-带EnableSession的WebMethod
我正在asp.net应用程序中使用JTable()进行表单身份验证 我的web应用程序将为每个成功登录的用户创建一个会话 现在,Jtable使用一个数据源,它是一个静态列表。此静态列表所在的类不是静态的C# 静态列表-带EnableSession的WebMethod,c#,jquery,asp.net,.net,C#,Jquery,Asp.net,.net,我正在asp.net应用程序中使用JTable()进行表单身份验证 我的web应用程序将为每个成功登录的用户创建一个会话 现在,Jtable使用一个数据源,它是一个静态列表。此静态列表所在的类不是静态的 public class UserSpecificClass { [WebMethod(EnableSession = true)] public static object PaymentsList(int jtStartIndex, int jtPag
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 };
}
}
public类userspecific类
{
[WebMethod(EnableSession=true)]
公共静态对象PaymentsList(int-jtStartIndex、int-jtPageSize、字符串jtSorting)
{
//从数据库获取数据
使用(DBDataContext上下文=新的DBDataContext(_staticConnString))
{
//LINQ查询-获取用户详细信息,包括与用户的所有关系
var PaymentDetails=(从上下文中的t1开始)。费用
在上下文中连接t2。t1.InvoiceID上的发票等于t2.ID
其中t2.MemberID==5
选择新的
{
相关发票=t1.InvoiceID,
Charge\u Description=t1.ChargeType.Name,
费用金额=t1.金额,
支付金额=t1.PaidAmount,
贷记=t1.CreditAmount,
上次付款=t2.PaidAmount==0?“未付款”:t2.PaidDate.ToString()
}).ToList();
_mhubPayments=新列表();
foreach(付款明细中的var obj)
{
MHubPaymentsHistory数据=新MHubPaymentsHistory(对象相关发票、对象费用、描述、对象费用、金额、,
对象支付金额、对象贷记金额、对象上次支付金额);
_mhubPayments.Add(数据);
}
//将结果返回到jTable
返回新的{Result=“OK”,记录=_mhubPayments,TotalRecordCount=recordCount};
}
}
现在,我知道静态变量和属性将被创建一次,并且在服务器上的应用程序域中对所有用户都可用…所以很明显,我不希望web应用程序中有1个InvoicesList
但是我不确定当一个新用户登录,并且我从上面的类中检索数据时,静态对象(本例中的列表)是否会特定于新登录用户的会话?因为“EnableSession=true”属性
ie:如果100个用户登录,在创建/发布的100个会话中的每一个会话中,将WebMethod(EnableSession)属性附加到对象是否意味着每个用户会话都有一个特定于会话的静态列表对象?这基本上是说这个静态对象是特定于会话的,因此是特定于用户的吗
请澄清。
提前感谢向方法添加属性无法更改任何静态字段的行为
如果要使用会话状态,请将数据存储在HttpContext.Current.session中。在这种情况下,静态数据可能会有问题,因为整个应用程序中只有一个存储位置,因此存储在那里的值在请求之间是可见的。静态方法不会有相同的问题-静态方法是有效的没有实例就可以调用,无法访问实例数据,但在其他方面与非静态方法相同。没有帮助,与Kev想知道的事情没有什么关系。@MichaelViktorStarberg:真的吗?你是如何理解这个问题的?我从一个答案开始,但总结起来有问题。SLaks:我会对你的答案投赞成票,对你的答案投反对票请尽快提问。这次我显然把我的整个问题都弄错了:(我已经用一个更精确的描述我试图理解的东西来回复以前的评论。)我应该在我发布的代码中重新编写我试图理解的东西来回复这个问题吗?我没有看到任何静态字段。公共静态对象PaymentsList?这是一个函数。它不存储任何数据;你的问题没有意义。在p当然,你有任何静态列表。好的。但是你看到我从哪里来了吗?考虑到你的更正,在这种情况下,这个方法返回的对象会是每个用户特定的会话吗?我试图理解在这个特定场景中使用“static”的影响,并确保每个用户不会看到任何其他用户ers信息?im“新建”要返回的新类列表(list())这一事实是否足以确保显示的记录将是登录用户?我再次尝试了解静态与webmethod和enable session的用法..感谢Hanks bmm6o-我最初的问题和解释有几个错误,可能会产生误导,正如SLaks明显指出的那样,但这更能回答我的问题在最好的细节。感谢大家在这篇文章中寻找。