1


我有一个与 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 在我的场景中没有关闭/处理,这会产生影响吗?

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

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

4

1 回答 1

0

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

  1. 确保每个请求使用一个连接,并且在任何情况下都将其丢弃(最终阻止)
  2. 当您说会话未过期时,您是否等待超时时间而没有确定提出任何请求?
  3. 当您的会话值被清除时,实际上意味着会话已过期或被清除,因为 IIS 工作进程已被回收。调整工作人员回收策略或在数据库中设置会话状态。
  4. 当您说会话未重定向到登录页面时-这是错误的。会话与登录页面无关。如果您尝试访问需要您登录的页面,您将被重定向到那里。
于 2012-11-19T08:41:46.943 回答