【问题标题】:How to debug a service in hosting WCF side-by-side with ASP.NET如何调试与 ASP.NET 并排托管 WCF 的服务
【发布时间】:2018-02-01 12:38:54
【问题描述】:

我有一个与 ASP.NET 并行的简单托管 WCF 服务,并且很难调试/单步执行该服务。以下是文件。提前致谢!

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();
        }
    }
}

【问题讨论】:

  • 项目是否包含在同一个解决方案中? WCF 服务是通过 IIS 运行还是自托管?
  • @TravisActon 他们在同一个解决方案中。它通过 IIS10 运行。

标签: c# asp.net .net wcf iis-10


【解决方案1】:

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

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

另外,不要忘记更改控制台应用程序的端点地址,以指向您的 wcf 项目在运行时运行的相应 IIS 端口,设置用于调试的配置转换可能符合您的最佳利益,因此你不会经常在你的配置中切换这些。

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

【讨论】:

  • 谢谢特拉维斯,这会成功的。另一个问题是为什么正常的附加过程不适用于这种项目设置?
  • @JasonTang 如果您的代码部署到本地 IIS,则正常附加应该可以正常工作,但您必须将构建路径更改为您的 IIS bin 目录重建,然后运行以使一切都是最新的。我一直发现这样做更加灵活/不那么敏感,尤其是当您处于项目的中期开发阶段时。
【解决方案2】:

也许这个回应和这个话题是一样的。

How to debug WCF programs

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

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

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

  2. 在 Visual Studio 的调试器菜单上,有一个“附加到进程”。打开相关代码,设置断点,然后调用导致该代码路径执行的服务。

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

尝试由系统管理员运行 Visual Studio。可能是你附加了错误的进程,或者运行的版本不是调试版本。

替代

您可以在两个项目中单击右键,然后单击“调试”->“启动新实例”。 Visual Studio 在调试模式下启动这两个项目。

【讨论】:

  • 我尝试附加w3wp.exe 进程但没有成功。
  • 尝试由系统管理员运行 Visual Studio。也许你连接了错误的进程,或者运行的版本不是调试版本。您可以在两个项目中单击右键,然后单击“调试”->“启动新实例”。 Visual Studio 在调试模式下启动这两个项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多