WCF 调试的限制

可通过三种方法开始调试 WCF 服务:

  • 正在调试调用服务的客户端进程。 调试器将单步执行服务。 该服务不必与客户端应用程序位于同一解决方案中。

  • 正在调试向服务发出请求的客户端进程。 该服务必须是解决方案的一部分。

  • 使用 “附加到进程” 附加到当前正在运行的服务。 调试从服务内部开始。

本主题介绍这些方案的限制。

服务调试过程中的步入限制

要从客户端应用程序进入一个您正在调试的服务,必须满足以下条件:

  • 客户端必须使用同步客户端对象调用服务。

  • 合同操作不能是单向的。

  • 如果服务器是异步的,则无法在服务内执行代码时查看完整的调用堆栈。

  • 必须在 app.config 或 Web.config 文件中使用以下代码启用调试:

    <system.web>
      <compilation debug="true" />
    </system.web>
    

    此代码只需添加一次。 可以通过编辑 .config 文件或使用 “附加到进程”附加到服务来添加此代码。 在服务上使用 “附加到进程 ”时,调试代码会自动添加到 .config 文件中。 之后,您可以直接调试并逐步执行服务,而无需编辑 .config 文件。

退出服务的限制

从服务中退出并返回到客户端时,存在与进入服务相同的限制。 此外,必须将调试器附加到客户端。 如果您在调试客户端时进入一个服务,调试器将会一直附加在该服务上。 无论是通过使用 启动调试 启动客户端,还是通过使用 附加到进程 附加到客户端,都是如此。 如果通过附加到服务开始调试,调试器尚未附加到客户端。 在这种情况下,如果您要退出服务并返回客户端,您必须先使用 附加到进程 手动附加到客户端。

自动附加到服务的限制

自动附加到服务具有以下限制:

  • 该服务必须是正在调试的 Visual Studio 解决方案的一部分。

  • 必须托管该服务。 它可能是网站项目(文件系统和 HTTP)、Web 应用程序项目(文件系统和 HTTP)或 WCF 服务库项目的一部分。 WCF 服务库项目可以是服务库或工作流服务库。

  • 必须从 WCF 客户端调用该服务。

  • 必须在 app.config 或 Web.config 文件中使用以下代码启用调试:

    <system.web>
      <compilation debug="true" />
    <system.web>
    

自我托管

自承载服务是在 IIS、WCF 服务主机或 ASP.NET 开发服务器中不运行的 WCF 服务。 有关如何调试自托管服务的信息,请参阅 如何:调试自托管 WCF 服务

如果看到错误消息“无法自动单步进入服务器”,请重新修复 Visual Studio 的安装以尝试解决此问题。 如果在安装 ASP.NET 之前安装 Visual Studio,则可能会发生此情况。