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

时间:2012-11-29 10:15:38

标签: c# asp.net asp.net-mvc iis azure

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

我尝试在我的操作中添加Debugger.Break();,这会导致w3wp.exe崩溃。

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

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

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

4 个答案:

答案 0 :(得分:10)

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

要解决此问题(或者,通常在Cassini Web服务器上远程调试),请下载名为rinetd的工具,这是一个非常简单的流量重定向器守护程序,并在文件夹中创建config.cfg你把它提取出来了。格式为<source ip> <source port> <dest. ip> <dest port>。所以,在我的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

像魅力一样。

答案 1 :(得分:7)

我可以看到远程请求是由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!

enter image description here

答案 2 :(得分:2)

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

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

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

非常感谢。

本杰明

答案 3 :(得分:2)

你可能附上了错误的过程。

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

  • 从本地计算机以调试模式启动Web应用程序(按F5)。
  • 继续调试 - &gt;附加流程

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