如何调试与ASP.NET并列托管WCF服务

问题描述:

我有一个简单的托管WCF服务与ASP.NET并排,并有困难的时间调试/步入到服务。以下是这些文件。提前致谢!如何调试与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(); 
     } 
    } 
} 
+0

项目是否包含在同一个解决方案中? WCF服务是通过IIS运行还是自托管? –

+0

@TravisActon他们在同一个解决方案中。它通过IIS10运行。 –

根据您对同一解决方案中的两个项目的评论以及WCF未托管的情况,您需要配置解决方案以拥有多个启动项目。

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

另外不要忘记更改您的控制台应用程序的端点地址,以指向您的wcf项目在运行时运行的相应IIS端口,它可能位于你最好的兴趣来设置配置转换调试,并刺激,所以你不会经常在你的配置中切换这些。

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

+0

感谢特拉维斯,这将做的伎俩。另一个问题是为什么正常的附加过程不适用于这种项目设置? –

+0

@JasonTang如果您的代码部署到本地IIS,但正常连接应该工作得很好,但您必须将构建路径更改为您的IIS bin目录重建,然后运行,以便一切都完美地保持最新。我一直发现这样做更灵活/不那么敏感,特别是当你在一个项目中进行开发时。 –

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

How to debug WCF programs

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

    • 如果在IIS你需要连接到相应的w3p.exe过程。

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

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

在调试之外,使用可切换级别的.net跟踪是了解发生了什么的好方法。我通常将sys内部的debugview设置为颜色突出显示错误和警告,并在运行代码或测试时不断运行它。在工作中,我的周围视觉中出现彩色线条,这些线条会发现问题

尝试使用系统管理员运行Visual Studio。也许你提到了错误的进程,或者运行的版本不是调试版本。

备选

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

+0

我试图附加'w3wp.exe'过程,但没有运气。 –

+0

尝试使用系统管理员运行Visual Studio。也许你提到了错误的进程,或者运行的版本不是调试版本。 您可以在两个项目中点击右键,然后点击“Debug” - >“Start New Instance”。 Visual Studio在Debug模式下启动两个项目。 –