调试本地IIS Web服务器上托管的ASP.NET MVC3应用程序

我已经设法使用本地IIS Web服务器来托管我的MVC3应用程序,我可以从托管它的机器调试它和所有东西 – 但是,当我从另一台机器(我的Mac,在Parallels VM中运行我的Windows)发送请求时,我得到了预期的结果,但是调试器不会停在我的断点处!

我尝试添加Debugger.Break(); 我的行动,并崩溃w3wp.exe ..

To,总结一下: 本地请求正在运行,可以调试。 外部请求正在运行,但无法进行调试。

在我的项目属性中,我设置了Use Local IIS Webserver未选中 Use IIS Express

我正在使用Visual Studio 2012 Professional。 该项目是基于Azure SDK的,附加的进程是WaIISHost.exe。

问题是,由于我已将IIS服务器设置为在端口83上提供服务,而本地我将在端口81上访问,因此调试器不会监视这些请求。

要解决此问题(或者,通常在Cassini Web服务器上进行远程调试),请下载名为rinetd的工具,该工具是一个非常简单的流量重定向器守护程序,并在您将其解压缩到的文件夹中创建config.cfg。 格式为 。 所以,在我的Mac上,我转到Safari中的这个地址:192.168.1.23:8080 / Controller / Action,然后将其重定向到localhost:81 / Controller / Action,就像它是本地请求一样! 这是config.cfg的示例:

 192.168.1.23 8080 127.0.0.1 81 

或者,您可以使用您的PC名称,以避免在DHCP为您提供新地址时分配静态IP或更改配置:

 Jeff-PC 8080 127.0.0.1 81 

然后,打开命令提示符,并cd到您的rinetd文件夹,然后运行rinetd.exe -c config.cfg

奇迹般有效。

我可以看到远程请求由IIS提供,但是本地的请求是通过“Cassini”服务器或visual studio的服务器提供的。

确保您使用IIS来调试代码,您可以将visual studio附加到w3wp.exe以通过IIS进行调试。 你应该以管理员身份启动visual studio。

将Visual Studio附加到w3wp.exe(IIS进程):从visual studio,从调试菜单中选择“Attach to process …”:

  • 选中“显示所有用户的进程”。

  • 选中“在所有会话中显示进程”。

  • 按选择按钮从(附加到。)中选择“托管(v ….)代码”。

  • 按“刷新”按钮

应该显示w3wp.exe!

在此处输入图像描述

当您启动Visual Studio时,以管理员身份启动它(右键单击并以“以管理员身份运行”),然后加载项目的解决方案。

然后从调试菜单中选择“附加到进程…”并确保选中“显示所有用户的进程”和“在所有会话中显示进程”复选框,在“可用进程”面板中,您应该能够滚动并且找到与您尝试调试的IIS应用程序池相关的进程(通常称为w3wp.exe)。

附加到此过程并在浏览器中刷新页面,这应该允许您进行调试。

非常感谢。

本杰明

您可能附加了错误的过程。

尝试执行以下操作以确认您正在调试错误的进程。

  • 从本地计算机以调试模式启动Web应用程序(按F5)。
  • 继续调试 – >附加过程

现在,如果向下滚动,您应该看到VS已经附加到调试应用程序的过程(它应该以不同的颜色显示 – 浅灰色)。 如果进程不是w3wp.exe则表示您没有使用IIS来托管应用程序,并且当您从另一台机器发出请求时,您可能正在调试错误的进程