Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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 web服务器是否为每个请求运行web应用程序的新实例?_C#_Asp.net - Fatal编程技术网

C# asp.net web服务器是否为每个请求运行web应用程序的新实例?

C# asp.net web服务器是否为每个请求运行web应用程序的新实例?,c#,asp.net,C#,Asp.net,我有一个带有私有/受保护方法或私有/受保护变量的web应用程序 首先,我想知道当一个web服务器已经为某个web应用程序建立了一个连接,然后收到一个新的连接时,它是否为这个新的连接运行一个web应用程序的新实例,从而像在计算机上一样重新初始化该web应用程序中的所有变量 我目不转睛地盯着互联网,我感到非常困惑 第二,我正在使用VisualStudioDevelopmentServer,我了解到它不接受来自其他计算机的连接,我通过使用端口转发软件解决了这个问题。所以问题是,通过这样做,VS2010

我有一个带有私有/受保护方法或私有/受保护变量的web应用程序

首先,我想知道当一个web服务器已经为某个web应用程序建立了一个连接,然后收到一个新的连接时,它是否为这个新的连接运行一个web应用程序的新实例,从而像在计算机上一样重新初始化该web应用程序中的所有变量

我目不转睛地盯着互联网,我感到非常困惑

第二,我正在使用VisualStudioDevelopmentServer,我了解到它不接受来自其他计算机的连接,我通过使用端口转发软件解决了这个问题。所以问题是,通过这样做,VS2010 web服务器是否将每个不同的请求视为一个新请求或相同的请求,因为我从本地计算机上的应用程序转发它们


最后,如果我在一个浏览器上打开一个web应用程序,然后决定在另一个浏览器上打开它,并保持当前浏览器处于打开状态,这是作为新请求还是回发处理?

应用程序域是恒定的(可以循环使用),并且仅在第一个请求时创建(也可以在此之前设置)

也就是说,所有静态变量只初始化一次 但是您的请求所依赖的所有非静态类都会根据每个请求进行初始化

因此,基本上,普通asp.net中的所有页面和asp.net MVC中的所有控制器都会根据每个请求进行初始化

在这里阅读更多关于它的信息


*注意-图片取自上面提到的文章

它比这稍微复杂一点。该流程针对多个连接进行了优化,并且是无状态的,但是可以使用兑现来提高可伸缩性:不需要重新处理的内容可以简单地重复使用:这是一个很好的起点,可以开始了解可以发生什么是有点枯燥的ms版本“iis asp页面生命周期”是一个好的google

web应用程序实例处理许多请求。共享状态(缓存等)在这些请求中被非常有效地使用,无论是对于单个会话还是多个并发会话

当发出请求时,将为该请求创建请求对象(以及任何“页面”/“控制器”对象)。这个对象的状态是新的,但是像“会话状态”、“视图状态”、cookie和请求值这样的系统可以用来重新填充它——有时很大程度上是自动化的


单个用户单独提出请求不是回发。它们是独立的会话,但即使单个会话打开同一页面两次(选项卡等),也不是回发。这主要取决于http动词和其他证据来确定回帖。

您必须阅读这篇伟大的文章:回答您的问题。虽然有点晚,但它可能会帮助其他人。

因此,假设我有一个webform1.aspx页面,其中包含一个webform1.aspx.cs类,其中包含受保护/私有静态变量。那么,webform1.aspx.cs类中的所有变量是否都会针对该页面/类的每个新请求重新初始化?常量不正确;应用程序域和应用程序池会定期回收。“在第一次请求时”也不正确-可以在此之前将其设置为初始化。@Fabio页面实例确实是每个请求的实例;任何实例变量都将重新初始化。但是,静态字段是每个应用程序域的,因此在所有用户的所有请求之间共享。在web中,静态字段通常是一个非常糟糕的主意application@ParvSharma好的,我理解你所说的静态变量是什么意思,但现在我有一个问题,我重命名了我的受保护静态变量,或者将其更改为仅受保护的变量,但是当我将它们添加到会话中并尝试在另一个页面上检索它们时,我得到了Null/empty变量,这不应该是案例,因为用户会在上一页填充它们。在我使用static之前,这并不是问题,现在我该怎么做呢。有没有其他方法可以在不使用会话和不丢失数据的情况下将变量传输到另一个页面?将它们保存在数据库中。。或者别的地方。。这是唯一的方法,你的第一个有点帮助,但第二个我以前通过过,我根本无法理解它在说什么…任何地方第一个链接只解释第一个请求发生了什么我想知道第二个、第三个或第四个请求发生了什么。到目前为止,图形的解决方案是我正在寻找的,基本上我做错的是在asp.net页面中声明静态变量,但是现在当我将变量添加到会话中并尝试在新页面上检索它们时,我会得到空变量/空变量?为什么以前是静态的,这不是问题。是的,微软的文章似乎是这样。当你理解主题时,它们是有意义的,否则它们是不透明的。下面的文章没有任何图表,但很好地讨论了维护状态的各种选项以及如何使用它们。因为有很多方法,默认情况下它们都不起作用,所以需要明确地保存和恢复会话状态。就我个人而言,我通常选择SQL选项。对不起,我比你先这么做了…我只是花了最后三个小时才弄明白,我必须使用Viewstate在同一页中保存往返的变量数据,否则它们将继续重新初始化,我必须使用会话存储数据以传递到下一页。。。无论如何,您输入的thx:)