调试脚本和 Web:错误和疑难解答
当试图对运行在 Web 服务器上的应用程序进行调试时,有时可能会得到具有以下错误信息的消息:
Unable to start debugging on the Web server
如果遇到这些错误,则需要考虑以下几个问题:
要检查的内容
远程服务器上的 Web 应用程序
存储在 Visual SourceSafe 中并使用 FrontPage 服务器扩展的 Web 应用程序
手动附加
要检查的内容
如果得到“无法在 Web 服务器上启动调试”错误,请尝试检查下列内容:
您是否正在运行一个允许 Visual Studio 调试器自动附加到 Web 应用程序的 Windows 版本?如果不是,则需要启动应用程序而不调试,然后手动附加到它。(有关更多信息,请参见手动附加和 ASP.NET 调试:系统要求。)
您的 Web 应用程序是否具有 Web.config 文件?
Web.config 文件是否通过将 debug 属性设置为 true 而启用了调试模式?有关更多信息,请参见 ASP.NET 应用程序中的调试模式。
Web.config 文件是否包含任何语法错误?您可以通过运行 Web 应用程序而不调试来检查是否存在语法错误。(从“调试”菜单中,选择“开始执行(不调试)”。)如果在 Web.config 中存在语法错误,则会显示详细信息。
如果 ASP.NET 辅助进程在您自己的帐户下运行,则您必须是“Debugger Users”(调试器用户)组的成员或管理员。
如果 ASP.NET 辅助进程在任何其他用户的帐户下运行,则您必须是“Administrators”(管理员)组的成员。
您是否是通过指定特定的 IP 地址(如 100.20.300.400)而创建了项目?调试 Web 服务器要求 NTLM 身份验证。默认情况下,IP 地址被假定为 Internet 的一部分,而在 Internet 上不进行 NTLM 身份验证。若要更正这一问题:
创建项目时,指定 Intranet 上计算机的名称。
- 或 -
将 IP 地址 http://100.20.300.400) 添加到您的计算机上的受信任站点列表中。(从 Internet Explorer 的“工具”菜单中,选择“Internet 选项”,然后选择“安全”选项卡)。
运行 IIS 服务器的计算机是否安装了 Visual Studio .NET 远程组件?
IIS 是否是在安装了 Visual Studio .NET 之后才被安装在本地计算机(即运行 Visual Studio .NET 的计算机)上的?IIS 应在安装 Visual Studio .NET 之前安装。如果它是后来安装的,则可能需要修复 .NET Framework。
修复 .NET Framework
请插入 Visual Studio .NET 光盘并在命令行处输入下面的一行命令:
<DVD Drive>:/wcu/dotNetFramework/dotnetfx.exe /t:c:/temp
/c:"msiexec.exe /fvecms c:/temp/netfx.msi"
- 或 -
请插入 Visual Studio .NET Requirements 光盘并在命令行处输入下面的一行命令:
<CD Drive>:/dotNetFramework/dotnetfx.exe /t:c:/temp
/c:"msiexec.exe /fvecms c:/temp/netfx.msi"
是否正确地指定了项目起始页的 URL?扩展名和项目目录是否正确?
是否正确地设置了 IIS 安全设置?若要验证这一点,请检查“默认 Web 站点”设置。
检查“默认 Web 站点”的 IIS 安全设置
从“开始”菜单中,依次选择“程序”和“管理工具”,然后单击“Internet 服务管理器”(Windows 2000) 或“Internet 信息服务”(Windows XP)。
在“Internet 服务管理器”或“Internet 信息服务”对话框中,单击您的计算机的树控件 (Tree Control)。在“Web 站点”文件夹中,找到“默认 Web 站点”。
右击“默认 Web 站点”并选择“属性”。
在“默认 Web 站点属性”窗口中,选择“目录安全性”选项卡并单击“编辑”。
在“身份验证方法”对话框中,选择“匿名访问”和“集成的 Windows 身份验证”(如果尚未选择的话)。
单击“确定”关闭“Internet 服务管理器”或“Internet 信息服务”对话框。
单击“确定”。
对于 ATL Server 应用程序,请验证 DEBUG 谓词是否与您的 ISAPI 扩展相关联。
对于 ASP.NET 应用程序,请确保应用程序的虚拟文件夹具有在“Internet 服务管理器”或“Internet 信息服务”中设置的“应用程序名称”。
为 Web 应用程序指定虚拟文件夹
从“开始”菜单中,依次选择“程序”和“管理工具”,然后单击“Internet 服务管理器”(Windows 2000) 或“Internet 信息服务”(Windows XP)。
在“Internet 服务管理器”或“Internet 信息服务”对话框中,单击您的计算机的树控件 (Tree Control)。在“Web 站点”文件夹中,找到此 Web 应用程序。
右击 Web 应用程序并选择“属性”。
在 Web 应用程序的“属性”窗口中,选择“目录”选项卡。
在“应用程序设置”下,单击“创建”。
应用程序名称即出现在此框中。
单击“确定”关闭“属性”对话框。
单击“确定”关闭“Internet 服务管理器”或“Internet 信息服务”对话框。
远程服务器上的 Web 应用程序
如果 Web 应用程序位于远程服务器上,请检查以下问题:
是否运行了正确的安装程序以便在服务器上安装 ASP.NET 或 ATL Server 和远程调试器组件?
您是否具有调试在系统帐户下运行的进程所必需的访问特权?如果 ASP.NET 辅助进程在您自己的帐户下运行,则您必须是“Debugger Users”(调试器用户)组的成员或管理员。如果 ASP.NET 辅助进程在任何其他用户的帐户下运行,则您必须是“Administrators”(管理员)组的成员。(有关具体的操作,请参见添加调试器用户和配置 DCOM。)
默认情况下,ASP.NET 应用程序作为 ASPNET 运行。若要调试在 aspnet_wp.exe 下运行的应用程序,您需要具有管理员特权或为 aspnet_wp.exe 编辑 machine.config 文件,以便 aspnet_wp.exe 在用户帐户下运行。(在 Windows Server 2003 上,辅助进程的名称是 w3wp.exe 而不是 aspnet_wp.exe,您可以使用 IIS 更改运行它的帐户。)若要调试在 inetinfo.exe 下运行的应用程序,您必须是运行 inetinfo.exe 的计算机上的管理员。
根据安全设置的不同,ATL Server 应用程序可能在 inetinfo.exe 下运行,也可能在 ATL 辅助进程 dllhost.exe 下运行。若要调试在 inetinfo.exe 下运行的应用程序,您必须是运行 inetinfo.exe 的计算机上的管理员,或者可以使用公共语言运行库应用程序设置将 dllhost 配置为作为特定用户运行。
您是否正在使用“终端服务器”尝试调试远程计算机上的 Web 应用程序?在 Windows XP 下,支持使用“终端服务器”对本机 Web 应用程序进行远程调试。而在 Windows 2000 或 Windows NT 下则不支持。
Windows Server 2003 上的 IIS
在 Windows Server 2003 上安装 Visual Studio .NET 时,默认情况下不启用 ASP.NET。要开发 Web 项目,必须在完成 Visual Studio .NET 安装程序后运行“安全防范向导”。
如果在完成 Visual Studio .NET 安装程序之前运行“安全防范向导”,可能不会启用正确的 ASP.NET 版本。Visual Studio .NET 安装程序会安装新的 ASP.NET 版本。要想确保启用最新的 ASP.NET 版本,必须在完成安装之后再运行“安全防范向导”。
在 Windows Server 2003 上运行安装程序后配置 IIS
从“开始”菜单中,选择“所有程序”。
选择“管理工具”,然后选择“Internet 信息服务”。
在左窗格中右击计算机的名称,然后选择“安全性”。
在“安全防范向导”的第一屏上,单击“下一步”。
验证“HTTP”是否设置为“自动”,然后单击“下一步”。
在“请求处理程序”列表中,检查 ASP.NET 以及 n:/WINDOWS/Microsoft.NET/Framework/<version number>/aspnet_isapi.dll 的每个实例。
单击“下一步”。
单击“完成”完成向导。
存储在 Visual SourceSafe 中并使用 FrontPage 服务器扩展的 Web 应用程序
如果 Web 应用程序存储在 Visual SourceSafe 中并且使用 FrontPage 服务器扩展作为它的 Web 访问模式,请检查以下问题:
Visual SourceSafe 是否与 FrontPage 服务器/Web 服务器位于同一台计算机上?如果是,则可以使用“集成身份验证”进行调试。(若要检查“集成身份验证”设置,请参见此过程以检查前面的“默认 Web 站点”的 IIS 安全设置。)
手动附加
如果按照这些疑难解答步骤执行了相应操作,而在开始调试时仍然收到错误信息,则可能需要尝试通过手动附加来调试应用程序。
手动附加
启动应用程序而不调试。(从“调试”菜单中,选择“开始执行(不调试)”。)
附加到适当的 IIS 进程或辅助进程。默认情况下,对于 ATL Server 应用程序为 inetinfo.exe,对于 ASP.NET 应用程序为 aspnet_wp.exe(对于 Windows Server 2003 下的 ASP.NET 应用程序为 w3wp_wp.exe)。
使用下面的过程来确定 ASP.NET 或 ATL Server 应用程序在哪个进程下运行。
检查 ASP.NET 应用程序在哪个进程下运行
使用 Visual Studio .NET 或其他文本编辑器打开应用程序的 machine.config 文件。
找到下面的进程模型属性:
enable
如果 enable 设置为 TRUE,则应用程序在 aspnet_wp.exe 或 w3wp.exe 下运行。(这也是默认设置。)
如果 enable 设置为 FALSE,则应用程序在 inetinfo.exe 下运行。
检查 ATL Server 应用程序在哪个进程下运行
在解决方案资源管理器中,右击项目名称,然后从快捷菜单中选择“属性”。
在“<项目> 属性页”对话框中,打开“Web 部署”文件夹,然后选择“常规”。
查看“应用程序保护”设置。
如果此设置为“低(IIS 进程)”,则应用程序在 inetinfo.exe 下运行。
如果此设置为“中等(池)”,则应用程序在 dllhost.exe 进程下运行(与其他放入池中的 ATL Server 应用程序相同)。
如果此设置为“高(独立)”,则应用程序在 dllhost.exe 进程下运行(与其他 ATL Server 应用程序不同)。
单击“确定”关闭“<项目> 属性页”对话框。