【问题标题】:a static issue with asp.net multiple users/clientsasp.net 多个用户/客户端的静态问题
【发布时间】:2013-06-26 17:57:06
【问题描述】:

在 asp.net 中使用 static 安全吗?

情况是这样的:

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

所以:

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

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

所以使用 jquery 触发 [Webmethod] 是我能想出的在运行时更新 div 内容的唯一方法

所以问题是如果 10 个用户会同时触发 web 方法

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 将显示返回的值...

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

【问题讨论】:

  • C# 不支持静态局部变量。

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


【解决方案1】:

ASP.NET AJAX 页面方法必须是 static。我认为在处理static,尤其是static 字段时,说从来没有安全的东西是安全的(双关语)。

【讨论】:

  • (removed "a"; 显然这种类型的方法确实必须是 static) ,b:即使它是真的,那也不能使它“安全”,并且 c:有一个静态方法和静态字段之间的区别 - 静态字段肯定不安全在 asp.net 中
  • 您误解了这里的上下文,ASP.NET AJAX 页面方法与 ASP.NET 页面类中的方法不同。方法上的 [WebMethod] 属性是 ASP.NET AJAX 用来将其视为可调用脚本的。我已经更新了我的原始答案以包含 AJAX 这个词。很抱歉造成混乱。
  • 我熟悉[WebMethod],但我从未看到它与static一起使用,或者看到它必须与static一起使用的任何限制 -你能说得更具体一些吗,也许有一些引用?
  • 这是真的吗,因为据我记得(而且我记得它确实必须)尝试使用和不使用静态确实很重要,我将测试它是否“连接”到使用和的方法没有static 只是为了确保ajax 是否触发它与修饰符有关
【解决方案2】:

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

someCalculation 没有意义 - C# 中没有 static 局部变量之类的东西,它不会编译。

【讨论】:

  • 好的,很高兴知道使用 Web 方法不必使用static 修饰符。其次,当我将转换我的程序时,我将发布一个新代码,因此结果 div 将通过来自 javascript 触发器的 Ajax 发布/调用更新,而不是第一次尝试(resDiv.InnerText=value;,它只会在请求结束时显示)所以现在我将尝试通过客户端“触发系统”输出“当前”状态的下一个选项
  • @AviaAfer 好吧,karl 似乎不同意我的观点——我并不声称自己是绝对正确的,但我当然不知道有任何此类限制;但是,静态或非静态:这不会改变任何静态 字段 的行为方式
  • 好的,我很抱歉无缘无故地开始这篇文章,或者没有任何结构。我会回来检查我的真实场景,这将更加清晰和日常使用(直到现在,我的大多数简单的 c# WebApps 只是发送了一些处理数据的请求并在完成后返回,我移动到很少当页面需要在运行时更新时会更复杂)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
相关资源
最近更新 更多