如何在与 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
您需要将调试器附加到您的 wcf 服务所在的进程 运行。
如果在iis中需要附加相应的w3p.exe进程
如果在独立应用程序或 windows 服务中,请附加到您的 exe 文件的名称。
在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 实例上。
我有一个与 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
您需要将调试器附加到您的 wcf 服务所在的进程 运行。
如果在iis中需要附加相应的w3p.exe进程
如果在独立应用程序或 windows 服务中,请附加到您的 exe 文件的名称。
在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 实例上。