超时期限连接池和会话不会在表单身份验证和&amp ;; ASP.NET成员资格

时间:2012-11-19 08:29:58

标签: c# asp.net asp.net-membership forms-authentication


我有一个与ASP.NET成员身份和表单身份验证相关的问题。我一直在寻找解决方案很长时间(包括StackOverflow.com),但无法找到与我的方案有关的解决方案。请帮我。

我在应用程序中使用ASP.NET成员身份和表单身份验证,问题是在测试应用程序的时间超过30分钟, 出现以下错误: -
1)从池中获得连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。
2)会话未过期,并且不会重定向到“登录”页面。
3)会话值几次变为空。


该应用程序也在生产中,但客户尚未报告上述任何此类问题。

请在下面找到Web.config设置: -

<sessionState timeout="30" mode="InProc">
</sessionState>

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
    <providers>
        <clear/>
        <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="DBSQLServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" passwordFormat="Hashed" applicationName="/ApplicationPortal"/>
    </providers>
</membership>       

<add name="DBSQLServer" connectionString="Data Source=SERVER-NAME\SQLEXPRESS2008;Initial Catalog=DB-Name;Max Pool Size=100;Trusted_Connection=True;" providerName="System.Data.SqlClient"/>

不要忘记这一部分: -

<authentication mode="Forms">
  <forms loginUrl="~/Login.aspx" defaultUrl="~/Login.aspx" protection="All" timeout="30">
  </forms>
</authentication>

虽然几乎没有关闭的连接,但现在所有的连接都被妥善处理掉了。 我找到了某个地方,通过关闭DataReaders,这将得到解决,但由于我已经解决了所有连接,所以如果DataReaders也会产生这种影响 在我的场景中没有关闭/处理?

我还想知道哪些可能的问题同时导致这两个错误,以及如何解决这两个问题。

在许多页面中也使用了内联查询。

1 个答案:

答案 0 :(得分:0)

这听起来像是一个糟糕的设计。

  1. 确保每个请求使用一个连接,并且无论如何都要处理它(最后阻止)
  2. 当你说会话没有过期时,你有没有等待超时期而没有提出任何要求?
  3. 当您的会话值被清除时,实际上意味着会话已过期或已清除,因为IIS工作进程已被回收。调整工作者回收策略或在数据库中设置会话状态。
  4. 当你说会话没有重定向到登录页面时 - 这是错误的。 Session与登录页面无关。如果您尝试访问需要登录的页面,您将被重定向到那里。