【问题标题】:ASP.NET LDAP Forms authentication sometimes very slow - troubleshooting ideas?ASP.NET LDAP Forms 身份验证有时非常慢 - 故障排除思路?
【发布时间】:2011-06-20 16:40:34
【问题描述】:

我们的(相当繁忙的)Intranet 网站最近有时需要 2-3 分钟才能在生产服务器上登录用户,但我们无法找到原因。

该网站是一个“顶级”网站(映射到一个 IP 地址),其中包含额外的 10 个虚拟目录。该网站包含经典的 ASP 和 ASP.NET 页面,并运行 .NET 4.0(版本 4.0.30319.235;我相信是最新的),整个网站都是 HTTPS (SSL)。它使用 ASP.NET Forms 身份验证和 LDAP 提供程序(同一域中的公司 LDAP)。这是一个非常简单的身份验证,在根 web.config 中使用 LDAP 连接字符串和提供程序配置,以及在登录页面上使用定义的 LDAP 提供程序的“asp:login”控件。该网站在 IIS 中配置了通配符映射,以允许使用相同的 ASP.NET 登录过程对经典 ASP 页面进行身份验证。会话是默认的“Inproc”,不使用 SQLServer 或状态服务。

间歇性地,从大约 3 周前开始,用户登录网站需要 2-3 分钟。站点中有些页面不需要身份验证,并且仍然可以正常运行,登录后,经过身份验证的页面也可以正常运行,没有任何延迟。只是登录过程本身很慢。

在开发服务器和工作站上运行的完全相同的网站配置和代码永远不会遇到相同的身份验证延迟。

登录代码已经一年多没有改变了,该站点已经运行了 .NET 4.0 大概一年了;这些服务器在 2010 年 10 月更新到最新的 .NET 版本。通配符映射也是在一年前建立的。登录缓慢仅在大约 3 周前开始。 Web 服务器部门不知道当时对 Web 服务器和/或网络所做的任何更改。

虽然登录页面出现了长时间的延迟,但我认为延迟实际上并不是在身份验证过程中;在此之前它似乎处于某种设置中。我已将当前日期/时间的 Session 变量设置添加到登录代码的开头(在 LogginIn 事件中)和结尾,并且这些时间之间通常不到一秒;但是,单击登录页面上的“登录”按钮和设置这些会话变量中的第一个之间的时钟时间是几分钟(始终在 2 分 14 秒左右)。我已经尝试过启用和禁用页面缓冲,时间没有差异。

在这些不同的环境中设置相同的配置和代码:

  • (OK) 开发服务器:Windows Server 2003 SP2 64 位(32 位 IIS),SSL 模式

  • (OK) 开发服务器:Windows Server 2008 R2 64 位(32 位 IIS),SSL 模式

  • (确定)开发。工作站:Windows 7 64 位(32 位 IIS),不运行 SSL

  • (有时很慢)暂存 Web 服务器:Windows Server 2003 SP2 32 位 SSL 模式

  • (有时很慢)生产网络集群:Windows Server 2003 SP2 32 位 SSL 模式

也就是说,在开发服务器和工作站中,无论我尝试什么,似乎都不会导致同样的缓慢 - 重置 IIS、回收应用程序池、更新 web.config 等。

开发服务器正在使用 SSL 的自签名证书;登台和生产服务器使用“官方”(威瑞信)证书。生产 Web 服务器也用于其他网站(并且其他网站都仍使用 .NET 2.0),但这些其他网站都没有使用 LDAP 身份验证。所有机器(生产和开发)都是最新的 Windows 更新。

我可以通过强制重新启动应用程序(例如通过更新 web.config)或要求 IIS 重置,或者(在临时服务器上)等待超过 20 分钟而没有活动(我认为,应用程序池默认生命周期结束)。

我们检查了以下内容:

  • 整个站点的每个 web.config 中的“machineKey”部分都是相同的

  • 站点的应用程序池设置为 .NET 4.0,没有其他站点使用相同的应用程序池

  • 应用程序池标识为“NETWORK SERVICE”

我们在生产中尝试了以下方法,但偶尔的登录延迟没有改变:

  • 将 connectionProtection="None" 添加到 LPAP 提供程序配置

  • 将“applicationName”添加到 LDAP 提供程序配置

  • 将端口号(SSL/安全端口号)添加到 LDAP 连接字符串

我们查看了暂存服务器和生产服务器上的 Windows 事件日志和 IIS 日志,但没有发现与问题的明显联系。有时确实发生的唯一可能相关的错误是以下错误(有时在登录成功前大约一秒钟记录,而不是在单击“登录”按钮时),但是,这也可能是因为以前 -登录会话已超时:

事件代码:4006

事件消息:成员身份验证失败。

申请信息:

Application domain: /LM/W3SVC/ [...]

Trust level: Full 

Application Virtual Path: / 

进程信息:

Process name: w3wp.exe 

Account name: NT AUTHORITY\NETWORK SERVICE

任何人都可以提出任何其他的故障排除想法或应该检查或更改的潜在配置问题吗?

【问题讨论】:

    标签: asp.net authentication ldap


    【解决方案1】:

    你可以在问题发生时进行内存转储,然后使用windbg进行分析。

    如何进行内存转储: http://support.microsoft.com/kb/286350 这个博客有很多关于如何分析内存转储的信息 http://blogs.msdn.com/b/tess/

    【讨论】:

    • 谢谢,但第一个链接讨论了使用 ADPlus 解决“挂起”和“崩溃”问题;这似乎与这种情况无关。 IIS 和 ASP.NET 没有崩溃,我认为没有任何问题;它只是响应缓慢或等待几分钟。
    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多