2011-02-15 117 views
0

我有一个网络服务器,而且我的团队已将Web应用程序的应用程序池设置为3,以实现静音和性能。但是,我们偶然发现部分应用程序未完全正常工作的问题。会话状态和应用程序池

我们认为问题出在应用程序的这部分使用会话的地方,我们认为当数据回发时它不会链接回正确的工作进程。

但是,我不确定这一点,或者我是否应该在web.config中使用SessionState。如果我是对的,模式应该是InProc,SessionState还是其他?会话中是否有超时?

有人可以请教我吗?

回答

0

因此,您已将应用程序分成三部分放在同一台服务器上,每台服务器都在IIS自己的应用程序池下运行?我会挑战背后的假设,但那不是你的问题。

我不认为你可以做到这一点,并使用开箱即用的工具共享会话状态。它使用站点(元数据库)路径作为会话状态“密钥”的一部分,因此来自不同站点的会话不会发生冲突。

但是,如果你能做到这一点,你需要使用out-of-proc sessionState模式之一(StateServer或SQLServer)。

我还没有试过以下,但他们可能会帮助你。

以下是Code Project article的链接,该链接描述了将SQL Server会话更改为组网站和共享会话。

以下是指向ASP 101 article的链接,它描述了与子站点共享会话的一种方式。不知道这是否适用于您的情况与不同的应用程序池。

编辑:

啊,一个网络花园。是的,您的工作进程不共享InProc会话数据。您需要使用外部提供商。 StateServer工作正常。您需要在服务器上启用ASP.NET状态服务并更新您的web.config以使用它。有一些事情要考虑它:

  • 它是否运行在不同的服务器上 比IIS?需要启用远程 连接。
  • 你有多个网络 服务器?需要定义一台机器 键。
  • 您是否在 会话中存储对象?需要将它们标记为 可序列化。

网上有很多资源可以帮助解决这个问题,这里是一个例子blog post

+0

不完全。这部分应用程序有自己的web.config,因为应用程序的每个部分都是在Visual Studio 2010中的解决方案中构建为项目。在IIS上,我们为此应用程序提供了自己的网站和应用程序池,并在应用程序池中为其提供了它3个asp.net工作进程或Web远程访问。如果应用程序池被设置为默认值,那么它很好,并按预期工作,将其设置为3 - 它不会。我不认为使用SQL Server是可能的,因为我们使用的数据库是Oracle。 – Andy5 2011-02-15 23:09:26

0

您不能以多线程方式(应用程序池中的3个线程)使用InProc,而不能保证每个请求都转到同一个线程。

InProc字面上意味着在进行中,如在当前线程的内存中。

如果您转移到另一种存储方法,即对数据库,则可以在给定应用程序的所有实例之间共享会话。

我建议阅读this

+0

这可以通过Oracle数据库工作吗?如果有,有一个例子吗? – Andy5 2011-02-16 09:26:33