如何在与ASP.NET并行托管WCF的情况下调试服务

时间:2017-08-23 19:27:52

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

我有一个与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();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

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

在解决方案资源管理器中,选择解决方案,右键单击并选择属性。在弹出窗口中展开Common Properties选项,然后单击Startup Project。单击Multiple Startup Projects并选择您的项目和构建操作。设置适当的顺序(在本例中为WCF)

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

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

答案 1 :(得分:0)

也许这个回答与此主题相同。

How to debug WCF programs

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

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

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

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

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

    尝试与系统管理员一起运行Visual Studio。也许你发现了错误的进程,或者运行的版本不是调试版本。

    <强> ALTERNATIVE

    您可以在两个项目中单击右键,然后单击“调试” - &gt; “开始新实例”。 Visual Studio以调试模式启动两个项目。