在IIS中调试.NET应用程序【VS2010】

在IIS中调试.NET应用程序【VS2010】

本文介绍如何调试托管在IIS的web应用程序。 此外,还介绍了如何选择正确的进程在VS中运行。


前言

一般来说,我们从VisualStudio中调试ASP.NET Web应用程序。 Visual Studio有自己的ASP.NET引擎,这是有足够的能力运行和调试在Visual Studio中的网站。 但是,如果您的网站托管在IIS中,你要直接调试该网站,你会如何调试呢? 在服务器中的进程(w3wp.exe)是用来运行Web应用程序的。 我们需要连接到这个特定的进程,从Visual Studio中调试Web应用程序。 本文介绍了使用这种方法来调试应用程序的总体思路。 这也说明了工作进程应用程序池 ,然后选择一个特定的进程中。 我希望你能喜欢这篇文章,并提供宝贵的建议和反馈。

与IIS调试ASP.NET调试

Visual Studio有其自身的集成调试引擎,调试我们的代码,当我们在Visual Studio中运行的应用程序。 如果我们开发一个网站需要调试的代码,我们只是设置断点和,做调试( :在这篇文章中,我描述了如何设置调试模式)。

当我们运行应用程序时,一定到达断点时中断执行。 这是非常简单的,因为当一个ASP.NET应用程序运行在VisualStudio中,它是与Visual Studio集成的ASP.NET引擎的控制下。如果你要检查哪个进程正在运行调试,从Visual Studio中运行Web应用程序,你会得到一个如下图所示的弹出通知。

图。 1:任务栏弹出时,开始从Visual Studio调试

这表明一个进程开始运行的ASP.NET应用程序。 双击图标,会弹出显示详细信息
的窗口。

图。 2:开发服务器的过程细节

正在运行的进程的背后,是WebDev.WebServer.exe。 当我们按下F5运行该应用程序,这个过程开始执行。 如果你想从命令提示符下运行该应用程序,您必须执行以下步骤。在命令提示符下运行Web应用程序的步骤:

  1. 开始--运行--输入 cmd 回车
  2. C:\Program Files (x86)\Common Files\microsoftshared\DevServer\10.0\WebDev.WebServer40
  3. 下面的屏幕会出现。 “示例”部分。

图。 3:WebDev.WebServer使用示例

*:参数说明:
/port: 指定Asp.net Development Server 提供服务的端口号 ,范围在1-65535之间任意一个未使用的端口。
/path:存放Web程序的物理路径。
/vpath:虚拟路径 (可选)默认路径就是"/"。

现在回到IIS调试讲解中。 在我们部署或托管网站后,如果我们要调试的网站上的程序时,我们是不能直接在Visual Studio中做的。 IIS都有自己的工作进程负责所有部署的Web应用程序的执行和维护。 我会在后面的章节中详细描述了工作进程。 因此,如果我们在IIS中运行的进程,我们需要调试应用程序,首先我们必须从Visual Studio连接到正确的进程。 现在就解释工作进程应用程序池是如何工作。

工作进程是什么?

工作进程(w3wp.exe)的运行在IIS中的ASP.NET应用程序。 规定的范围内的工作进程中运行的所有ASP.NET功能。 当一个请求到达服务器从客户端,工作进程负责生成请求和响应。 它也保持了InProc会话数据。 如果我们回收的工作进程中,我们将失去它的状态。
*:w3wp.exe是在IIS(因特网信息服务器)与应用程序池相关联的一个进程,如果你有多个应用程序池,就会有对应的多个w3wp.exe的进程实例运行。这个进程用来分配大量的统资。这个进程对于系统的稳定和安全具有重要的意义,不能轻易的结束掉这个进程。

w3wp.exe的启动用户是系统内置安全帐户network service

w3wp.exe的正常路径是%windir%\system32\inetsrv,一般在C:\WINDOWS\system32\inetsrv

应用程序池”

这是一个最重要的事情,你应该创建自己的应用程序在生产环境中。 应用程序池是用来两套独立的IIS工作进程,共享相同的配置。 “应用程序池”,使我们能够更好的安全性,可靠性和可用性。因为应用程序池中的应用程序与其他应用程序被工作进程边界分隔,所以某个应用程序池中的应用程序不会受到其他应用程序池中应用程序所产生的问题的影响。

【参考:http://www.cnblogs.com/qqflying/archive/2010/08/18/1802644.html】

图。 4:在IIS应用程序池,工作进程之间的关系

认应用程序池

IIS 6.0的默认应用程序的名称是“DefaultAppPool“。 在IIS托管的网站后,如果我们检查的虚拟目录的属性,我们可以查看该信息如下。

  1. 开始菜单→ 运行“命令→C:\Windows\System32\inetsrv\inetmgr.exe
  2. 展开SampleWebSites其他网站 ,在这里你已经创建了虚拟目录
  3. 右键点击站点的“详细设定

以下虚拟目录的详细设定,屏幕会出现显示了应用程序池名称是分配给选定的站点。

图。 5:虚拟目录的详细设定,应用程序池名称

如果你想检查列表中的所有应用程序池在IIS,就必须点击展开在IIS服务器上的所有应用程序池节点。


图。 6:“应用程序池”列表

现在,每应用程序池应至少有一个工作进程,负责操作的应用程序池相关的网站。 右键单击应用程序池→“详细设定”选项卡,选项卡底部的附近,有一个Web园“一节中,默认情况下,工作进程数为1。 一个应用程序池包含一个以上的工作进程被称为Web源。

图。 7:应用程序池属性显示Web源

用程序池的创建和分配

  • 打开IIS控制台,右键单击“ 应用程序池”文件夹,选择“ 新建”


图。 8-1

  • 创建应用程序池ID,选择Framework版本,然后点击“OK”。

图。 8-2

  • 现在,右键单击网站的详细设定,并选择新创建的应用程序池为默认池。

图。 8-3

现在SampleWebSite这个网站将独立运行,将不会影响到其他应用程序有关的任何站点或应用程序。 这是创建一个单独的应用程序池的主要优势。

如何开始?

通过调试一个IIS服务器上的网站托管为示范,来进入我们的调试旅程吧。

我已经创建了一个Web称为SampleWebSite的网站,它在我的本地IIS托管中。 下面是默认的页面输出。

图。 9:演示示例

调试时要附加哪个进程?

现在,我已经解释过,进程名称是w3wp.exe的 ,所以我们从任务管理器可以查看它是否正在运行。

图。 10:任务管理器显示正在运行的IIS进程

现在,我们要附加到进程。 在Visual Studio中调试附加到进程

图。 11:打开“ 附加到进程”窗口

单击“ 附加到进程后,弹出附加进程的窗口,如下:

图。 12: 附加到进程“窗口中,显示一个单一的工作运行的进程

现在,我们能够看到,工作进程正在运行,我们需要重视这个进程。 选择进程并点击“ 连接 ”按钮后,就会出现如下现象:

图。 13-1:进程附加连接成功

图。 13-2:没有附加进程的过程

你有没有注意到断点符号? 如果工作进程连接成功后,在代码中,,断点符号应该是一个实心圆。 否则,将有一个警告图标,如图【13-1】。 对于单个工作进程,这种情况是不常见的。 然而,当我们有多个工作进程运行在IIS,那么就会有一些混乱。 在下面的的内容中会讲解道。

现在,如果我们成功地附加到进程后,单击“ 调试 ”按钮,执行会在断点处停止。

接下来,让我们来看看我们在做什么,如果有多个工作进程运行。

如何连接到许多正在运行的工作流程

当我们IIS上有多个托管的网站,而这些网站都有自己的应用程序池。 现在,多个应用程序池对应着多个工作进程运行。(pid)

在这里,列出IIS的所有应用程序池。如图:

现在我想附加SampleWebSite进程到我的SampleWebSite站点中 。 按照前面介绍的步骤。 打开过程将窗口:

图。 14:列出多个工作进程

取正在运行的工作流程的列表

首先打开windows任务管理器--点击查看---选择列--把PID给钩上,就可以在进程里面看到PID的选项

图。 15:运行的工作进程PID和应用程序池名称列表

选择正确的进程进行附加调试

从图【15】里面你可以很容易地识别出正确的应用程序池的名称和它的进程ID。 现在,返回到VisualStudio“→”附加过程。 现在你知道SampleWebSite应用程序池的进程ID是4080,然后附加PID 4064到附加进程中。【参考12,13步】

图。 16:将正确的进程进行调试

现在,马上去进行调试。

图。 17:断点调试已准备就绪

总结

我希望这篇文章能对初学者在调试IIS上托管的应用程序有所帮助。如果你有什么好的意见或者好的调试方法可以告诉我,以此提高文章。

谢谢。

原创并参考翻译 【http://www.codeproject.com/Articles/37182/Debug-your-ASP-NET-Application-while-Hosted-on-IIS】

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值