在asp.net网站中为多个会话用户交换内容

时间:2013-09-04 11:01:40

标签: c# asp.net session-variables static-methods pagemethods

我正在开发一个asp.net网站。

  • 当两个不同的用户使用不同的会话访问该网站时,一个用户内容将被交换到另一个用户。
  • 我正在使用javacsript,从.aspx页面调用pagemethods,在代码后面调用C#。
  • 当两个用户一次调用相同的功能时,主要发生此问题。
  • 我认为静态变量可能会导致这个问题,并尝试不使用任何静态变量或静态函数,除了pagemethod函数,其中页面方法是静态的。

请帮我解决这个问题。

7 个答案:

答案 0 :(得分:5)

也可能与线程有关。 Lock这些变量,看看是否有帮助。

静态方法不保证静态变量状态,即使这些方法保证是线程安全的。您必须管理该状态,并且asp.net将静态变量视为在所有用户之间共享。请参阅相关问题的this answer

更多阅读:Thread Synchronization

答案 1 :(得分:1)

我们遇到了类似的问题,发现我们的loadbalancer(f5 Big-IP)搞砸了session-id。我们将负载均衡器更改为有状态,现在它可以完美运行......

答案 2 :(得分:1)

  • 在Windows服务中打开aspnet状态服务。
  • 使用session [“x”]代替Static x
  • 对页面级别值使用viewstate [“x”]

答案 3 :(得分:1)

检查会话状态配置(请参阅下面的示例)。 也许您使用的是另一种模式而不是“InProc”,并且遇到了一些问题。

<sessionState mode="InProc" cookieless="false" timeout="60" />

您还可以考虑使用带有使用SessionID作为前缀的密钥的缓存实例。 企业库提供了良好的缓存实现。

希望这有帮助。

答案 4 :(得分:1)

删除静态变量和静态方法用于响应您的请求。

答案 5 :(得分:1)

在web.config中添加sessionState

<configuration>
  <system.web>
   <sessionState timeout="120" mode=" [InProc|StateServer|SQLServer|Custom]" cookieless="false"  />
  </system.web>
</configuration>

请尝试以下解决方案:

  1. 开始&gt;管理工具&gt;服务
  2. 右键单击ASP.NET State Service,然后单击“开始”。
  3. @TombMedia's Answer中所述,变量也需要LOCK。

    此链接可能会对您有所帮助:Exploring Session in ASP.NET

答案 6 :(得分:0)

这将在Web.config中设置并且&lt;%@ outputcache duration =“1”varybyparam =“none”%&gt;这将删除所有.aspx表单..

此致 RS