3

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

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

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

在我的项目属性中,我设置了Use Local IIS Webserver, Use IIS Expressis unchecked

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

4

4 回答 4

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​​.

奇迹般有效。

于 2012-11-29T11:59:35.130 回答
7

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

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

要将 Visual Studio 附加到 w3wp.exe(IIS 进程):在 Visual Studio 中,从调试菜单中选择“附加到进程...”:

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

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

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

  • 按“刷新”按钮

应该显示 w3wp.exe!

在此处输入图像描述

于 2012-11-29T10:27:12.440 回答
2

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

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

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

非常感谢。

本杰明

于 2012-11-29T10:21:38.800 回答
2

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

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

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

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

于 2012-11-29T10:32:04.247 回答