Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET/WCF/IIS中静态变量的作用域是什么?_C#_Asp.net_.net_Wcf_Iis - Fatal编程技术网

C# ASP.NET/WCF/IIS中静态变量的作用域是什么?

C# ASP.NET/WCF/IIS中静态变量的作用域是什么?,c#,asp.net,.net,wcf,iis,C#,Asp.net,.net,Wcf,Iis,这里有两个问题都得到了高度支持,但答案似乎相互矛盾 静态变量的实际范围是什么 在我的例子中,假设我有一个在IIS下运行的WCF服务。多台服务器,前面有一个负载平衡器。每个服务器上有一个站点,还有一个应用程序池。假设在实现服务的类中存储了一个静态变量 该变量是否仅在工作进程中持续存在?应用程序池?服务器?我试图研究它,但在这里发现了两个相互矛盾的答案 在该员额下: 回复说“每个工作进程都是运行您的站点的不同程序,都有自己的静态变量” 但在这一职位下: 回答说“静态变量是每个池的” 也许我只是不

这里有两个问题都得到了高度支持,但答案似乎相互矛盾

静态变量的实际范围是什么

在我的例子中,假设我有一个在IIS下运行的WCF服务。多台服务器,前面有一个负载平衡器。每个服务器上有一个站点,还有一个应用程序池。假设在实现服务的类中存储了一个静态变量

该变量是否仅在工作进程中持续存在?应用程序池?服务器?我试图研究它,但在这里发现了两个相互矛盾的答案

在该员额下:

回复说“每个工作进程都是运行您的站点的不同程序,都有自己的静态变量”

但在这一职位下:

回答说“静态变量是每个池的”

也许我只是不理解这些帖子,但它们似乎相互矛盾

当我检查时,似乎有几个工作进程正在运行。这就是我的问题


任何帮助都将不胜感激。我试图重构一些东西,避免使用静态变量,因为这似乎有风险,并暴露出并发性问题,但在不了解当前行为的情况下提出更改,我感到非常不舒服。谢谢

静态变量在应用程序域的生命周期中一直存在。因此,有两件事将重置静态变量:应用程序域重新启动或使用新类

每个应用程序池可以有多个工作进程

每个辅助进程将运行不同的应用程序实例

应用程序的每个实例都有一个单独的AppDomain- 每个应用程序实例一个。

发生以下任何情况时,IIS重新启动asp.net应用程序时,静态变量将丢失

  • 池决定是否需要重新编译
  • 打开app_offline.htm文件
  • 手动重新启动应用程序池
  • 池已达到服务器上定义的某些限制,请重新启动
  • 重新启动iis
  • 静态变量不是线程安全的,如果从不同线程访问它们,则需要使用lock关键字

    由于重新启动应用程序将重置静态变量,并且您希望在应用程序的整个生命周期内保持数据,因此您应该将数据持久存储在DB或文件中。您可以使用数据库会话状态模式以会话状态存储每个用户的信息


    ASP.NET应用程序状态/变量将不起作用,因为它们存储在内存中,因此它们不是持久的,因此它们在应用程序域重新启动时也会丢失。

    静态变量将在应用程序域的生命周期内持续存在。因此,有两件事将重置静态变量:应用程序域重新启动或使用新类

    每个应用程序池可以有多个工作进程

    每个辅助进程将运行不同的应用程序实例

    应用程序的每个实例都有一个单独的AppDomain- 每个应用程序实例一个。

    发生以下任何情况时,IIS重新启动asp.net应用程序时,静态变量将丢失

  • 池决定是否需要重新编译
  • 打开app_offline.htm文件
  • 手动重新启动应用程序池
  • 池已达到服务器上定义的某些限制,请重新启动
  • 重新启动iis
  • 静态变量不是线程安全的,如果从不同线程访问它们,则需要使用lock关键字

    由于重新启动应用程序将重置静态变量,并且您希望在应用程序的整个生命周期内保持数据,因此您应该将数据持久存储在DB或文件中。您可以使用数据库会话状态模式以会话状态存储每个用户的信息


    ASP.NET应用程序状态/变量将不起作用,因为它们存储在内存中,因此它们不是持久的,因此它们在应用程序域重新启动时也会丢失。

    当我们在web中定义静态字段时,wcf将仅与应用程序域限制共享。

    当我们在web中定义静态字段时,wcf它将仅与应用程序域限制共享。

    看这一点,它解释了ASP.NETSo中的静态变量范围,它是每个工作进程的吗?看这一点,它解释了ASP.NETSo中的静态变量范围,它是每个工作进程的吗?一个工作进程可以运行多个应用程序实例。。把它想象成一个迷你cpu,你可以在你的cpu上运行许多exe,每个exe都有一个静态变量还有一件事。。。假设我的应用程序是IIS上唯一的应用程序,工作进程是否可以同时运行我的应用程序的多个实例?是的,工作进程可能会生成线程来启动应用程序域。工作进程可以运行多个应用程序实例。。把它想象成一个迷你cpu,你可以在你的cpu上运行许多exe,每个exe都有一个静态变量还有一件事。。。假设我的应用程序是IIS上唯一的应用程序,工作进程是否可以同时运行我的应用程序的多个实例?是的,这是可能的,因为工作进程生成线程以启动应用程序域