asp.net多个用户/客户端的静态问题

时间:2013-06-28 20:56:19

标签: c# asp.net jquery session client-side

在asp.net中使用static是否安全?

情况如下:

后面的代码中的计数器在每个forLoop上向用户报告

这样:

<div id="report"></div> 

将通过jquery ajax设置,因为如果我要添加runat="Server" 它将不会显示,直到所有迭代都会发生。

所以使用jquery来分解[Webmethod]是我在运行时能够更新内容的唯一方法

所以问题是10个用户是否会同时触发webmethod

static int result=someStaticMethodRandomOutput();
[webmethod]
static void StatMet(object userInput){
    return result + intValue() * Convert.ToInt32(userInput);
}

static int intValue(){
   static int someCalculation=someOtherStaticValFromOtherMethodToReturn;
   return someClaculation;
}

在客户端,jQueryAjax将显示返回的值...

现在是否所有或部分用户都会共享返回值或结果值或某些值?

2 个答案:

答案 0 :(得分:1)

ASP.NET AJAX页面方法必须是static。我认为在处理static,特别是static字段时,从来没有任何安全措施是安全的(双关语)。

答案 1 :(得分:1)

result是一个静态字段,确实在所有调用之间共享 - 这意味着在asp.net等多线程环境中,运行时的结果可能非常不可靠。尽管如此,它在字段初始化程序中初始化并且似乎不会被更改,因此您可能会侥幸逃脱它。如果无法更改,请添加readonly以使其显而易见;如果它可以改变,这是一个很大的问题。

someCalculation没有意义 - 在C#中没有static局部变量,它不会编译。