是否可以通过不同的主机名访问同一应用程序之间共享的静态变量?

时间:2018-10-23 16:36:29

标签: c# asp.net iis-8

我已经相当确定答案是否定的,但是似乎找不到确切的答案。如果我部署了可以由多个主机名访问的应用程序,则每个主机名将启动其自己的应用程序单独实例,并且不会在它们之间共享静态变量,对吧?

编辑:托管环境是IIS,只有一个网站具有对不同主机名的多个绑定。

1 个答案:

答案 0 :(得分:1)

IIS允许您设置网站可以实际运行的实例数。如果将IIS配置为仅运行单个实例,并且多个域指向该单个实例,则可以访问变量。由于进行了资源管理,IIS会在需要时并经常重新启动这些实例。这就是为什么如果有请求进入并发现IIS已经重新启动了实例,则它将丢失先前静态变量值的内容。但是,如果找到相同的实例,则静态变量仍将保留其值。

不建议将静态变量用于交叉请求消息处理,因为大多数托管服务提供商不使用单个实例来运行您的网站,而是可以使用Web场来运行。这进一步导致我们解释为什么在处理会话时不使用In-proc会话是不好的。 [因为重新启动实例后会话值将丢失]。

从Web场开始,许多实例开始处理多个传入请求。因此,一个请求可以由与处理先前请求的实例不同的另一实例处理。处理该请求的新实例将肯定没有其他实例的变量值。即使它们是同一网站的副本。这是因为它们被识别为同时在服务器上运行的两个不同的应用程序,并且操作系统不允许在两个不同的应用程序之间直接共享静态变量。

但是,您可以充分利用IIS中的服务器端应用程序设置,也可以使用Cookie跨多个域路由信息。这些将使您能够例如从单个网站处理系统中所有其他网站的单一登录。当身份验证网站设置cookie,其他网站可以访问它们时,您可以实现此目的。 ASP.NET允许您这样做。

谢谢