3

我的解决方案中有 3 个项目:1) Silverlight 应用程序项目 2) ASP.Net Web 应用程序项目 3) WCF 服务应用程序。项目 1 和 2 具有对项目 3 的服务引用。绑定类型是 basicHTTPbinding。

如果我将项目 2 设置为启动项目,我会在项目 1 和 2 中设置断点,但不会在项目 3 中设置断点。

如果我将项目 3 设置为启动项目,我仍然可以使用我的客户端应用程序,并且会命中项目 3 中的断点,但不会命中项目 1 和 2 中的断点。

我希望能够在我的解决方案的所有项目中设置断点,并且无论选择的启动项目是什么都可以命中它们。我已经尝试在 WCF 项目上启用跟踪并在异常中包含详细信息;都没有工作。有什么建议吗?

4

5 回答 5

1

您是否检查过 Debug|Attach Processes 对话框以查看 VS 已附加到哪些进程?

我怀疑它没有附加到运行 WCF 服务的开发 Web 服务器。如果是从 ASP.NET 应用程序开始,请尝试将附件添加到其他开发 Web 服务。

于 2009-09-11T21:53:17.223 回答
0

您绝对可以附加到所有 3 个进程,但是我不确定所有 3 个进程的透明步骤是否会发生。

使用您当前的设置,然后选择 Debug->Attach to Process 以添加您的 WCF 项目。此时,您可以尝试从 ASP 或 Silverlight 端进入 WCF 服务主机,看看它是否会无缝转换。我认为这个工作可能有 2 个进程的限制,所以如果它失败了,你可以在 WCF 项目的接口处设置一个断点,当你在 ASP 或 SL 项目中单步执行时,你的断点将被命中。

每当在任何进程中遇到断点时,调试器都会同时停止所有进程。您可以使用 Debug-> Windows -> Processes 迁移每个进程的位置,并且 Debug -> Windows -> Threads 将允许您在每个进程中切换线程。

于 2009-09-11T22:35:52.023 回答
0

您没有提到单元测试,但是如果每个单独的项目都包含一套单元测试,您可以对每个项目的个人行为更有信心,因此您的集成测试会更简单。

您所描述的断点修复测试在具有如此多移动部件的应用程序中非常困难,并且不可重复。

于 2009-09-11T21:42:17.440 回答
0

根据您的描述(我可能错了),听起来您至少有两个不同的应用程序,即进程。虽然显然可以在 Visual Studio 的单个实例中调试多个进程(请参阅此处),但这并不是我曾经做过的事情(甚至没有为此考虑过)。

我通常为要调试的每个进程运行一个调试器实例。一个简单的方法是将以下代码行放在每个应用程序的主启动函数中:

System.Diagnostics.Debugger.Break();

当您从 Windows 资源管理器运行应用程序时,系统会提示您选择所需的调试器。只需为您要调试的每个应用程序创建一个新的调试器实例,您就可以从那里设置断点。

感谢 Peter Oehlert 纠正我原来的评论。

于 2009-09-11T22:02:40.527 回答
0

有几种方法可以做到这一点。

1) 同时打开两个 Visual Studio 实例。在单独的解决方案中拥有 Web 服务和数据访问还有其他几个优点。如果您这样做,您甚至可以在另一个运行时编辑其中一个,这在某些情况下会有所帮助。

2) 如果您有充分的理由将所有这些都集中在一个解决方案中,您可以通过右键单击 Web 服务并转到调试 -> 启动新实例来启动单独的调试会话。然后您可以对 Web 应用程序项目执行相同的操作。两者现在都将在单个 Visual Studio 解决方案中运行和调试。

但是,如果两者都在 IIS 中运行,则在尝试将两个调试会话附加到 IIS 时会发生冲突。尝试在本地开发服务器中运行其中一个(或两个)。如果需要保留服务引用,可以修复开发服务器的 IP#。

于 2009-09-14T00:15:56.583 回答