5

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

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

请帮我解决这个问题。

4

7 回答 7

5

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

静态方法不保证静态变量状态,即使方法保证是线程安全的。您必须管理该状态,并且 asp.net 将静态变量视为在所有用户之间共享。从相关问题中查看此答案。

更多阅读:线程同步

于 2013-09-13T06:30:37.800 回答
1

我们遇到了类似的问题,发现是我们的负载均衡器(f5 Big-IP)弄乱了会话 ID。我们将负载均衡器更改为有状态的,它现在可以完美运行...

于 2013-09-04T11:14:59.677 回答
1

sessionState在 web.config 中添加:

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

也尝试以下解决方案:

  1. 开始>管理工具>服务
  2. 右键单击 ASP.NET 状态服务,然后单击“开始”。

正如@TombMedia 的答案中提到的,变量也需要锁定。

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

于 2013-09-17T08:18:35.170 回答
1
  • 在windows服务中开启aspnet状态服务。
  • 使用 session["x"] 而不是静态 x
  • 使用 viewstate["x"] 作为页面级别的值
于 2013-09-16T15:05:53.370 回答
1

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

于 2013-09-17T04:02:06.583 回答
1

检查您的会话状态配置(参见下面的示例)。也许您使用“InProc”以外的另一种模式并在一些问题中运行。

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

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

希望这可以帮助。

于 2013-09-16T15:51:04.700 回答
0

这将在 Web.config 和 <%@ outputcache duration="1" varybyparam="none" %> 中设置,以删除所有 .aspx 表单。

问候卢比

于 2014-09-15T07:05:15.820 回答