ASP.Net应用程序超时

时间:2010-05-15 07:42:53

标签: .net asp.net vb.net timeout web-config

我有一个我刚刚部署的应用程序,由于复杂的原因,在第一次需要来自特定表的任何数据时(即当客户请求查看产品时),将数据库中的所有数据存储在模块中第一次,所有产品数据都存储在ProductManager类中(其实例存储在SiteContent类的共享属性中,使得可以从任何页面轻松访问ProductManager。)

现在忘记你现在可能正在瞪着我使用这种方法。我确信它效率低下但我现在只研究.Net一年左右,所以我还在学习。

我注意到的一件事是我可以在网站上访问一次,然后在5分钟后重新访问它,它会再次将所有数据加载到ProductManager类中。这似乎是.Net应用程序超时的事情 - 因为会话超时设置为30分钟,当我登录管理前端时,它会在5分钟后(#h)将我退出。

有谁知道如何改变这个?有没有办法在代码中更改此内容而无需联系托管公司?如果没有在代码中有任何方法可以在web.config中更改它吗?

提前致谢。

此致

理查德

更多详情:

模块(SiteContent)存储每个“Manager”类的实例 - 页面可以调用Manager.Create,Manager.Update,Manager.Remove等,并使用Manager.Items访问存储在管理器中的项目列表(例如,SiteContent.ProductManager.Items返回存储在数据库中的所有产品,SiteContent.UserManager.Items返回存储在数据库中的所有用户的列表。看起来,因为它是一个模块,它在用户和页面加载之间共享。

我已经尝试回到页面并在3-4分钟后重新加载它并且加载正常,但是大约5分钟之后再次加载页面需要几秒钟(不长 - 但我宁愿它没有添加几分钟到第一页每5分钟加载一次。)

这对于我的爸爸(业务所有者)来说特别烦人,因为他进入的产品需要花费超过5分钟才能进入,或者当他们进入产品时,他会休息2分钟,然后要求他点击提交再次登录,同时丢失所有数据。我使用web.config的身份验证部分中指定的方法登录 - 我使用带有登录按钮的表单,然后单击它将输入的用户名和密码与每个用户的密码进行比较user(通过SiteContent.UserManager.Items)。

除此之外,我不知道你想知道什么......你可以扩展你需要知道的任何细节吗?

在做一些谷歌搜索时,我发现有一个executionTimeout和一个shutdownTimeout,我将继续改变..

更多详情:

嗯,好像我刚刚解决了页面加载时问题..我注意到测试数据库超过13MB,实时数据库只有3MB。我对此进行了一些调查。

基本上,如果在目录页面中请求了错误记录器,则每次都会记录错误记录器并且无法找到图像。测试网站没有与图像保持同步,因为它不需要,因此丢失的图像表已经达到> 10MB ..必须在测试时禁用图像记录。我删除了该表中的所有内容,现在一切都很快加载。

至于超时的事情,我现在要把它留到以后的日期 - 我花了太多时间在这个时候我有更重要的事情要优先考虑 - 这个网站实际上是我的最后一年项目在大学,星期五我有一个关于它的演示文稿..将在这篇文章中添加更多细节,说明我将来如何处理这个问题,所以请不时回来查看..

感谢你花了这么多时间......

此致

理查德

4 个答案:

答案 0 :(得分:1)

ASP.NET有各种不同的超时,如果你使用FormsAuthentication然后FormsAuthentication有自己的超时与Session Timeout不同,你可以检查Form.Web的表单身份验证的配置部分,你会知道在哪里增加你的超时。 / p>

另外,您必须编写IHttpModule,因为在执行身份验证后,您可以通过在http模块提供的事件处理程序中初始化正确的会话值来改进您的设计。

答案 1 :(得分:0)

我不认为这些超时都是相关的。

如果我读了你,第一页加载会触发数据加载。该页面获取对数据的引用,将其存储在全局范围内,并从那里使用它。

如果这是正确的,听起来几分钟后就会释放Page数据(这是合理的)。由于这会释放对模块的最后一个引用,因此模块会被垃圾收集。

您是否尝试在Session对象中存储对数据的引用?这持续了很长时间。

听起来你正在尝试进行数据缓存,也许这就是你应该用谷歌搜索。

编辑由于您正在做的事情(数据录入)非常简单,您的一个基本假设可能是错误的,所以让我们看一下您的一些评论。

  1. 如果您的网络服务器位于某个远程位置,那么您的本地连接速度可能与数据库的读取速度无关,但如果您的确意味着“几秒钟”,那么这很可能是该页面占用的原因加载时间。

  2. 您想要保留多少数据?千字节?兆?千兆字节?如果它是千字节,你能把它保存在页面上吗?

  3. 将任何内容放在Application_End()中是没有意义的。只有当应用程序本身长时间(例如,20分钟)未使用IIS时,IIS才会调用它。你所做的一切都没有任何区别。

  4. 管理员不会过期,页面过期,您可能不应该更改。

  5. 当您尝试缓存时,您是否还有“数据库数据消失,用户注销,数据输入丢失”问题?或者只是变得“表现缓慢”?

答案 2 :(得分:0)

你混合2次超时:

  1. 会话超时 - 服务器清除会话映射内存的频率
  2. Auth-cookie超时 - 客户端浏览器清除Cookie的频率。
  3. 有关5分钟的信息存储在客户端的cookie中,要更改此时间,请查看web.config中的以下行:

        <authentication mode="Forms">
            <forms name=".ASPXFORMAUTH" 
                  protection="All" 
                  loginUrl="Login.aspx" 
                  timeout="20"                 
                  defaultUrl="Default.aspx"/>
        </authentication>
    

答案 3 :(得分:0)

关于你的5分钟观察,我发现应用程序池的空闲超时默认为5分钟(尽管IIS 7.0中的默认值应为20分钟)。

查看应用程序池的“高级设置” - &gt;过程模型 - &gt;空闲超时(分钟)。您可以通过输入值0来完全禁用超时。