Iis 7 .Net 4.0和IIS7下的应用程序状态不工作

Iis 7 .Net 4.0和IIS7下的应用程序状态不工作,iis-7,state,Iis 7,State,我一直在开发一个ASP.NET4.0Web应用程序,并使用HttpApplicationState类及其内容属性在全局asax文件的应用程序启动事件中设置一些变量 当应用程序在我的开发机器上按预期运行时,当它部署在运行IIS7的生产服务器上时,为应用程序状态变量返回的值为null。我尝试过各种代码技术,比如使用HttpContext、Runtime.Cache、Application[“key”]和Application.Contents.Add[“key”,Value],但都没有成功。我现在想

我一直在开发一个ASP.NET4.0Web应用程序,并使用HttpApplicationState类及其内容属性在全局asax文件的应用程序启动事件中设置一些变量

当应用程序在我的开发机器上按预期运行时,当它部署在运行IIS7的生产服务器上时,为应用程序状态变量返回的值为null。我尝试过各种代码技术,比如使用HttpContext、Runtime.Cache、Application[“key”]和Application.Contents.Add[“key”,Value],但都没有成功。我现在想知道是否应该有一个特殊的配置IIS7在这方面;在研究这个主题时,我看到有人说,执行应用程序的应用程序池必须只由一个工作进程提供服务;我不是IIS7专家,但在选择应用程序池并查看其高级属性时,我可以看到该池被配置为最多有1个工作进程,因此我认为这应该涵盖它。我花了两天的时间在这上面,所以如果有人知道这个问题,请帮助我

谢谢


chris

可能是您没有正确的应用程序池模式


IIS 7应用程序池有两种模式,经典模式和集成模式。看

可能是您没有正确的应用程序池模式

IIS 7应用程序池有两种模式,经典模式和集成模式。看

  • HttpContext.Current.Application在IIS 6和7、集成模式或经典模式下都可用

  • global.asax中的应用程序启动事件也在所有环境中调用

  • 在集成模式下运行IIS 7+时,global.asax中的事件处理程序仅应用于映射到ASP.NET处理程序(从Page类派生的对象)的请求。自定义HttpModules应用于所有请求

  • 应用程序状态或任何其他静态变量不会从IIS的一个实例共享到另一个实例,因此一个应用程序池或工作进程中的设置在其他应用程序池或工作进程中不可见

  • 应用程序状态和post init静态变量设置在AppPool重置过程中丢失(尽管您还将获得一个新的应用程序启动事件)。无论重置是由于工人闲置还是日常重置,都是如此

  • 与其使用HttpApplicationState,不如创建自己的静态类,为应用程序范围的设置提供静态属性。这样,您的访问是强类型的,具有Intellisense,并且不容易拼写错误的键字符串

  • 无论是使用您自己的静态类还是HttpApplicationState,当您也可能更改设置时,请确保在读取设置之前设置锁。如果决定继续使用这种方法,可以使用HttpApplicationState.Lock()

  • 您可以尝试在IIS Express本地甚至IIS 7(Vista)或7.5(W7)下运行应用程序,以帮助调试您的问题。卡西尼号在现阶段被弃用;我会尽量避免使用它

  • HttpContext.Current.Application在IIS 6和7、集成模式或经典模式下都可用

  • global.asax中的应用程序启动事件也在所有环境中调用

  • 在集成模式下运行IIS 7+时,global.asax中的事件处理程序仅应用于映射到ASP.NET处理程序(从Page类派生的对象)的请求。自定义HttpModules应用于所有请求

  • 应用程序状态或任何其他静态变量不会从IIS的一个实例共享到另一个实例,因此一个应用程序池或工作进程中的设置在其他应用程序池或工作进程中不可见

  • 应用程序状态和post init静态变量设置在AppPool重置过程中丢失(尽管您还将获得一个新的应用程序启动事件)。无论重置是由于工人闲置还是日常重置,都是如此

  • 与其使用HttpApplicationState,不如创建自己的静态类,为应用程序范围的设置提供静态属性。这样,您的访问是强类型的,具有Intellisense,并且不容易拼写错误的键字符串

  • 无论是使用您自己的静态类还是HttpApplicationState,当您也可能更改设置时,请确保在读取设置之前设置锁。如果决定继续使用这种方法,可以使用HttpApplicationState.Lock()


  • 您可以尝试在IIS Express本地甚至IIS 7(Vista)或7.5(W7)下运行应用程序,以帮助调试您的问题。卡西尼号在现阶段被弃用;我会尽量避免使用它。

    谢谢,我把模式切换到经典;变量现在似乎有了值;但是,该页面没有样式信息!使用经典模式是否可以正常地为应用程序服务?我以前从未见过在经典模式和集成模式之间切换的效果。您可以检查部署是否包含所有文件。另请参见模式之间的差异;您的提示让我了解了应用程序池模式和应用程序状态的使用之间可能存在的相关性;集成模式似乎无法访问应用程序启动事件;但是,尝试在经典模式应用程序池下运行网站导致未正确发送年龄(未发送样式信息)。所以我恐怕回到原点;由于时间不够,我不得不改用会话状态(如果你问我的话,这是相当浪费的);如果有人对如何处理这件事有任何想法,请让我知道。谢谢,我切换到经典模式;变量现在似乎有了值;但是,该页面没有样式信息!使用经典模式是否可以正常地为应用程序服务?我以前从未见过在经典模式和集成模式之间切换的效果。你可以查一下