【问题标题】:Is it possible to debug both a Silverlight and WCF project at the same time?是否可以同时调试 Silverlight 和 WCF 项目?
【发布时间】:2009-09-11 21:38:35
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: .net wcf silverlight debugging breakpoints


    【解决方案1】:

    您是否检查了“调试|附加进程”对话框以查看 VS 已附加到哪些进程?

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

    【讨论】:

    • 是否可以设置解决方案以自动执行此操作?
    【解决方案2】:

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

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

    【讨论】:

    • 有趣的一点是,将一套完整的单元测试添加到尚未构建为支持单元测试的现有代码中会有多容易?
    • ASP.NET 组件的可测试性最低。如果在 Silverlight 中使用了 MVVM,它可以一直测试到 UI 胶合板。 WCF 组件是完全可测试的。
    • 如果我设置断点来隔离问题,我很少设置多个,而且我当然不会像描述的那样在系统范围内设置它们。一次看太多了。
    • @Robert:听起来很棒!将所有这些添加到问题中已准备好进行调试的现有代码堆中有多容易?
    • 它不必是一个完整的单元测试套件。与其尝试同时对多个区域进行断点,不如采用一些有针对性的单元测试。
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

      System.Diagnostics.Debugger.Break();
      

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

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

      【讨论】:

      • -1 这不正确,您绝对可以通过 1 个 VS 调试会话附加到多个进程。
      • 这显然是真的;我以前从来没有做过。我会更新我的答案。
      【解决方案5】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-10-14
        • 1970-01-01
        • 2011-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-28
        相关资源
        最近更新 更多