如何在与 ASP.NET 并排托管 WCF 时调试服务

How to debug a service in hosting WCF side-by-side with ASP.NET

我有一个与 ASP.NET 并行的简单托管 WCF 服务,很难 debug/step-in 到该服务。以下是文件。提前致谢!

Web.config

  <system.web>
    <compilation debug="true" targetFramework="4.5.2"/>
    <httpRuntime targetFramework="4.5.2"/>
  </system.web>

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mexBehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

    <services>
      <service name="WCF_TestService.TestService" behaviorConfiguration="mexBehavior">
        <endpoint address="" binding="basicHttpBinding" contract="WCF_TestService.ITestService"></endpoint>

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/" />
          </baseAddresses>
        </host>
      </service>
    </services>

  </system.serviceModel>

ITestService.cs

namespace WCF_TestService
{
    [ServiceContract]
    public interface ITestService
    {
        [OperationContract]
        string GetMessage(string name);
    }
}

TestService.svc.cs

断点设置在return,提示信息为The breakpoint will not currently be hit. No symbols have been loaded for this document

namespace WCF_TestService
{
    public class TestService : ITestService
    {
        public string GetMessage(string name)
        {
            return $"Hello {name}";
        }
    }
}

客户端

客户端是控制台应用程序。

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            ServiceProxy.TestServiceClient client = new ServiceProxy.TestServiceClient();
            Console.WriteLine(client.GetMessage("John Smith"));
            Console.ReadLine();
        }
    }
}

也许这个回复和这个话题一样。

How to debug WCF programs

  1. 您需要将调试器附加到您的 wcf 服务所在的进程 运行。

    • 如果在iis中需要附加相应的w3p.exe进程

    • 如果在独立应用程序或 windows 服务中,请附加到您的 exe 文件的名称。

  2. 在Visual Studio中,在调试器菜单上,有一个"attach to process"。打开相关代码,设置断点,调用导致该代码路径执行的服务。

在调试之外,使用具有可切换级别的 .net 跟踪是了解正在发生的事情的好方法。我通常将 sys internals debugview 设置为用颜色突出显示错误和警告,并在 运行ning 代码或测试时不断使用它 运行ning。工作时我周边视野中的彩色线条发现问题。

尝试 运行 Visual Studio 与系统管理员联系。也许你附加了错误的进程,或者版本 运行ning 不是调试版本。

备选方案

您可以在两个项目中单击鼠标右键,然后单击"Debug" -> "Start New Instance"。 Visual Studio 在调试模式下启动两个项目。

根据您对同一解决方案中的两个项目和 WCF 不是自托管的评论,您需要将您的解决方案配置为具有多个启动项目。

在解决方案资源管理器中,select 解决方案,右键单击 select 属性。在弹出窗口中展开 Common Properties selection,然后单击 Startup Project。单击多个启动项目和 select 您的项目和构建操作。也设置适当的顺序(在这种情况下首先是 WCF)

另外不要忘记更改您的控制台应用程序的端点地址,以指向您的 wcf 项目 运行 在 运行 上的适当 IIS 端口,这可能最符合您的利益为调试和生产设置配置转换,这样您就不会经常在配置中切换它们。

如果您创建控制台项目的唯一原因是与您的 WCF 服务进行交互以进行测试,那么我建议您改用 WCF Test CLient。它应该默认安装在任何 VS 实例上。