65.9K
CodeProject 正在变化。 阅读更多。
Home

远程 IIS 调试:调试托管在“远程 IIS 服务器”上的 ASP.NET 应用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (89投票s)

2009 年 7 月 14 日

CPOL

11分钟阅读

viewsIcon

552166

本文介绍了如何设置调试以及调试托管在远程 IIS 服务器上的 ASP.NET Web 应用程序。详细介绍了 msvsmon.exe 及其配置。

目录

背景

上个月,我发表了一篇关于“使用进程附加器调试托管在 IIS 服务器上的 ASP.NET 应用程序”的文章。我收到了所有读者的良好反馈,特别是 Yankee Imperialist Dog!、Pete O'Hanlon、Dr.Luiji、Manas Bhardwaj 以及许多其他人。他们建议我写一篇关于 IIS 远程调试的后续文章。感谢所有人的反馈,并给我另一个写作机会。我相信这对大家都有帮助。请提出宝贵的建议和反馈,以改进我的文章。

引言  

在开始本文之前,我建议您阅读我之前的文章“调试托管在 IIS 上的 ASP.NET 应用程序:进程附加和确定要附加的进程”。这篇文章将为您提供在本地服务器上调试 ASP.NET 应用程序以及在多个进程中选择进程的基本了解。并且文章主要讲的是如果您在本地服务器上安装了 IIS,这意味着您已经在本地开发环境或已安装 Visual Studio 的 Web 服务器/生产服务器上托管了您的站点。但这并非实际情况。

现在回到本文,本文主要讲述 IIS 远程调试。您正在本地系统上开发应用程序,该应用程序托管在远程 Web 服务器上,现在您需要调试它。您将如何做到这一点?本文将介绍所有必要的步骤,例如*如何配置远程调试*,*从远程服务器附加进程*,*开始调试*等。这是 ASP.NET 中最具挑战性的任务之一。希望我已清楚解释。

适用于 ASP.NET 的 Visual Studio 调试功能 

我们可以通过三种不同的方式从 Visual Studio 调试我们的应用程序。它们是:

  • Visual Studio 内部调试器
  • 本地 IIS 调试 
  • 远程 IIS 调试

Visual Studio 内部调试器: 

我们都知道 Visual Studio 拥有自己的内部ASP.NET 调试引擎,用于在开发 ASP.NET Web 应用程序时进行调试。用于在 Visual Studio 中调试应用程序的进程是WebDev.WebServer.Exe。ASP.NET 引擎使用WebDev.WebServer.exe来调试应用程序。现在,如果您想了解更多详细信息,请阅读这里

remote4.jpg

图:Visual Studio 内部调试器的框图

本地 IIS 调试

这都是我上一篇文章的内容。我将使用以下图表来解释整个场景,以便您能有所了解。(虽然不是必需的,因为我已经在上一篇文章中解释过,但我仍然使用它来与远程调试进行关联。)

remote5.jpg

图:从本地 IIS 服务器调试 ASP.NET 站点的框图

在本地 IIS 调试中,IIS 必须安装在安装了 Visual Studio 的本地系统上。要从 Visual Studio 调试托管在 IIS 上的应用程序,我们需要将工作进程 (w3wp.exe) 附加到 Visual Studio 中。之后,我们将能够开始 Web 应用程序的调试。

远程 IIS 调试

这是我们应该在本篇文章中介绍的主要主题。这是最好的功能之一,当*我们在本地系统上没有安装 IIS 服务器*时,或者当我们需要将应用程序存储在集中位置时,它非常有用。这种情况发生在您在本地系统上有应用程序代码,而构建版本已部署到不同的 IIS 服务器上。下图显示了远程调试的整体图。

remote6.jpg

图:ASP.NET 应用程序远程调试的框图

设置 Visual Studio 和远程 IIS 的远程调试非常容易。用于设置和配置进程的工具称为“msvsmon.exe”。我已描述了启动、配置 msvsmon 工具和调试应用程序的每一步。但在此之前,让我们先看看为什么我们需要远程调试。

为什么需要远程调试

在深入了解细节之前,我们需要知道何时使用远程调试,

  • 本地开发服务器未安装 IIS。

  • 开发服务器和构建/发布/托管服务器不同

  • 应用程序位于集中位置。

远程调试工具 

用于 ASP.Net 应用程序远程调试的工具称为“Msvsmon.exe”。远程调试工具 (Msvsmon.exe) 是 Visual Studio 2005 用于远程调试的一个小型 Windows 应用程序。它具有非常简单的用户界面,使其在设置和配置过程中非常简单。在远程调试期间,Visual Studio 2005 运行在一台计算机上,远程调试工具运行在远程计算机上,以及您正在调试的应用程序。

remote7.jpg

图:使用 msvsmon 进行 ASP.NET 应用程序远程调试的框图

如果我们想调试托管在远程 IIS 上的应用程序,我们必须在远程服务器上启动 msvsmon.exe,而我们的开发系统是调试器主机,我们将在那里调试我们的代码。

启动 msvsmon.exe

Msvsmon.exe 安装在以下路径:
  • Install path\Microsoft Visual Studio 8\Common7\IDE\Remote Debugger\x86 

首先,我们需要从位置运行应用程序,然后将看到以下屏幕:

remote8.jpg

 图:msvsmon.exe 的初始启动

在应用程序启动时,窗口将显示状态消息“Msvsmon started a new server named '<ServerName>'. Waiting for new connection”。这意味着调试监视器工具已准备好与某个远程服务器建立连接。现在我可以连接到此远程服务器并获取服务器上运行的所有进程列表。

配置身份验证模式 

msvsmon 工具的配置非常简单。主要配置涉及身份验证模式。Msvsmon 支持两种身份验证类型:

  • Windows 身份验证 
  • 无身份验证 

 Windows 身份验证 

Msvsmon 通过 Windows 身份验证模式提供高级别安全性。想要远程调试应用程序的用户应经过身份验证,这意味着他们应该有足够的权限从远程系统访问调试功能。要设置 Windows 身份验证模式,我们需要转到“工具” > “选项”。将出现以下窗口:

remote9.JPG


图:设置和配置安全设置

现在,除了 Windows 身份验证单选按钮之外,我们还有一个权限按钮。使用该按钮,我们可以授予属于该 Windows 组的任何用户的权限。如果单击“权限”按钮,将出现以下屏幕:

remote10.JPG
 

  图:添加 Windows 身份验证用户

默认情况下,管理员应具有远程调试权限。我们可以使用“添加”按钮添加新用户,并为任何用户授予调试访问权限或拒绝调试权限。例如,我通过单击“添加”按钮来添加自己,并获得了访问控制。

Remote11.JPG

  图:添加 Windows 身份验证用户
 

 

现在,我已经授予了从远程(从调试器主机)进行调试的权限。

remote12.JPG

  图:所选用户的调试权限
 

同样,我们可以从 Active Directory 中选择任何用户,并拒绝远程调试的请求,即使该用户是经过 Windows 身份验证的用户。

在进程附加部分,我已讨论了如何使用 Windows 身份验证模式进行远程调试。

无身份验证 

此身份验证模式不涉及任何安全性。如果身份验证模式设置为“无身份验证”,任何人都可以远程调试。由于此调试模式根本不安全,因此只能在安全网络上使用。

remote13.JPG
 

   图:无身份验证模式配置

无身份验证模式仅支持本机调试。您也可以从警告消息中猜测其行为。我们有一个“允许任何用户调试”复选框。如果选中它,任何用户都可以进行调试。

在下一节中,我将描述如何为 Windows 和无身份验证模式附加进程以进行远程调试。

从远程系统附加进程

现在,远程调试器已准备好接受新连接以开始远程调试。我们已经了解了如何为 Windows 和无身份验证模式配置 msvsmon。现在我们将检查如何连接它们并开始调试。

在开始之前,我们需要创建一个 Web 应用程序并将其托管在运行 msvsmon 的 IIS 上。我们需要从本地系统(其中包含我们的代码)连接到它。现在,让我们看看 Windows 身份验证模式的情况。

进程附加 - Windows 身份验证模式   

首先,我们需要在开发系统中的 Visual Studio 中打开应用程序。现在,我们需要从远程服务器附加进程。转到工具 > 附加进程

remote15.jpg

  图:从 Visual Studio 附加进程

当我们单击“附加到进程”时,将出现以下屏幕。

remote16.jpg

  图:默认进程列表

现在,它显示了当前在该系统上运行的所有进程。现在我们需要连接到远程系统。我现在已经启动了一个名为“abhijit.jana”的 msvsmon,它正在等待新连接。

remote8.jpg

  图:msvsmon 在远程主机上运行

现在,我将从本地 Visual Studio IDE 连接到远程系统。那么,我们需要做什么。我们必须在附加进程窗口的“限定符”部分提供远程服务器名称。

remote17.jpg

  图:连接到远程主机并获取进程列表

现在,在进程列表中,所有进程都与工作进程 ((w3wp.exe) 一起从远程服务器列出。现在,这就是我们需要附加到代码的正确工作进程。还有一件事,当我们从它获取进程列表时,意味着远程服务器已连接。现在,如果我们检查 msvsmon 窗口,它将显示另一条消息,表明用户已连接。请看截图。

remote18.jpg

   图:调试监视器显示连接消息

现在,我们的应用程序已准备好进行调试。只需在代码中设置断点即可享受调试。这是我们的网站(托管在远程 IIS 服务器上),它有一个服务器端按钮,我希望在单击按钮时调试该应用程序。

remote19.jpg

  图:从主机 URL 访问站点

现在进程已附加到我们的 Visual Studio,并且我在按钮单击方法中设置了断点。这是结果。

remote20.jpg

  图:调试器在断点处

所以,让我们享受从远程服务器进行调试的乐趣。现在让我们看看如何在无身份验证模式下进行远程调试。

进程附加 - 无身份验证模式

这与 Windows 身份验证进程附加过程非常相似。我已经讨论过如何配置远程调试器的无身份验证模式。我们需要以我讨论过的方式附加进程。有一些小改动。传输模式应选择为 -远程(仅限本机,无身份验证)[查看截图]。并且我们需要提供限定符“abhijit.jana: 4015”。请看截图。

remote21.jpg

  图:无身份验证模式的进程附加

因此,现在我们需要附加工作进程并开始调试,我已经对此进行了讨论。在无身份验证模式下进行远程调试时,连接方式略有不同。调试监视器将在窗口中显示一条消息,表明调试正在无身份验证模式下运行。

remote22.jpg

   图:无身份验证模式的状态消息

因此,这就是如何在 Windows 和无身份验证模式下从远程 IIS 服务器调试您的应用程序。

多人调试

这是 Msvsmon 工具最出色的功能之一。Msvsmon 调试监视器工具允许多个用户同时进行调试。每个远程调试器实例都有一个唯一的服务器名称。正如我已经显示的,服务器名称是可配置的,因此我们可以为远程调试器的任何实例命名。现在多个用户可以访问相同的

Remote25.JPG

  图:多调试器实例的通用框图

 

远程调试期间的一些重要提示

  • Visual Studio 2005 远程调试组件必须安装在远程计算机上。
  • 我们必须使用计算机名称而不是 IP 地址来引用远程计算机。
  • ASP.NET 应用程序的 Web.config 文件不得包含任何错误,并且编译元素必须将 debug 属性设置为 True。
  • 确保防火墙没有阻止远程调试。
  • 站点的安全设置必须允许集成 Windows 身份验证。
  • 确保远程服务器上正在运行远程调试监视器。如果 Msvsmon.exe 未运行,您将收到以下错误消息。

总结 

现在,为了总结一下,我们来快速回顾一下。msvsmon 是一个实用程序,它提供了调试托管在远程 IIS 服务器上的应用程序的功能。它提供两种身份验证模式:Windows 和无身份验证模式。在 Windows 身份验证模式下,用户需要权限才能访问远程调试器的实例,而在无身份验证模式下,则不需要安全权限。

Remote26.JPG

  图:整体总结

希望本文能帮助您学习远程调试。请不要忘记提供您的建议和反馈以供改进。

参考

© . All rights reserved.