调试 WCF 应用程序时未命中断点

Breakpoint not being hit while debugging WCF application

我有一个 WCF 应用程序和一个控制台应用程序。

我在单独的文件夹中发布了 WCF 应用程序。在 IIS 中添加了一个虚拟应用程序。

在控制台应用程序中,我为在 IIS 中添加的站点添加了服务引用。

有了这个,我无法调试 WCF 应用程序并且断点没有命中。

我打开了两个 VS 实例。在一个实例中,我执行了 WCF 应用程序,在另一个实例中,我执行了控制台应用程序。

为什么 WCF 断点没有命中?

出于 development/debugging 目的,无需手动将 WCF 应用程序发布到 IIS。托管部分已经 built-in 变为 Visual Studio。

如果要将客户端应用程序连接到 WCF 服务,我可以想到两种方法:

方法一:使用服务参考

这是最快的方法,在大多数情况下开箱即用(您已选择此方法)。

您需要一个包含与此类似的客户端和服务器项目的解决方案文件:

在 "Add Service Reference" 对话框中,单击 "Discover"。这将在您的解决方案中查找 WCF 服务(不需要启动此服务)。

旁注:如果单击 "Go",则只能找到已启动的服务。

您应该在 "Services" 部分看到您的服务,地址字段会自动为您填写地址 Visual Studio 将用于本地调试。

像往常一样继续添加服务...

Visual Studio 将自动更新客户端的 app.config 文件。

如果您只启动控制台应用程序,Visual Studio 也会在后台为您启动该服务。您可以通过按 F11 进入服务操作而无需显式设置断点。

方法二:不使用服务引用

单击 "Add service Reference" 将根据当前数据合同生成代码。如果您更改该定义(类型、操作等),则必须重新生成它。

如果您同时是客户端和服务的所有者,则可以使用 WCF Channelfactory 在运行时创建动态代理。

您只需将服务合同和数据合同提取到一个新程序集,并与客户端和服务器共享。 不需要代码生成,这样您在编译时将始终是安全的。 有关详细信息,请参阅 here

因为 VS 不知道任何服务引用,所以你必须自己启动这两个项目。只需在您的解决方案中设置多个启动项目,然后按 F5。 但在这种情况下,您必须在服务应用程序中设置断点。