如何调试与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();
}
}
}
根据您对同一解决方案中的两个项目的评论以及WCF未托管的情况,您需要配置解决方案以拥有多个启动项目。
在解决方案资源管理器中,选择解决方案,右键单击并选择属性。在弹出窗口中展开Common Properties选项,然后点击Startup Project。点击多个启动项目并选择您的项目并构建操作。设置适当的顺序(在这种情况下WCF首先)
另外不要忘记更改您的控制台应用程序的端点地址,以指向您的wcf项目在运行时运行的相应IIS端口,它可能位于你最好的兴趣来设置配置转换调试,并刺激,所以你不会经常在你的配置中切换这些。
如果您创建控制台项目的唯一原因是与您的WCF服务进行交互以进行测试,那么我会敦促您改用WCF Test CLient。它应该默认安装在任何VS实例上。
感谢特拉维斯,这将做的伎俩。另一个问题是为什么正常的附加过程不适用于这种项目设置? –
@JasonTang如果您的代码部署到本地IIS,但正常连接应该工作得很好,但您必须将构建路径更改为您的IIS bin目录重建,然后运行,以便一切都完美地保持最新。我一直发现这样做更灵活/不那么敏感,特别是当你在一个项目中进行开发时。 –
也许这个回答是一样的这个话题。
-
您需要调试器附加到您的WCF服务中运行的进程。
如果在IIS你需要连接到相应的w3p.exe过程。
如果在独立的应用程序或Windows服务中,请附上您的exe名称。
在Visual Studio中,在调试器菜单上有一个“attach to process”。打开相关的代码,设置一个断点,然后调用导致该代码路径执行的服务。
在调试之外,使用可切换级别的.net跟踪是了解发生了什么的好方法。我通常将sys内部的debugview设置为颜色突出显示错误和警告,并在运行代码或测试时不断运行它。在工作中,我的周围视觉中出现彩色线条,这些线条会发现问题
尝试使用系统管理员运行Visual Studio。也许你提到了错误的进程,或者运行的版本不是调试版本。
备选
您可以在两个项目中右键单击,然后单击“调试” - >“启动新实例”。 Visual Studio在Debug模式下启动两个项目。
我试图附加'w3wp.exe'过程,但没有运气。 –
尝试使用系统管理员运行Visual Studio。也许你提到了错误的进程,或者运行的版本不是调试版本。 您可以在两个项目中点击右键,然后点击“Debug” - >“Start New Instance”。 Visual Studio在Debug模式下启动两个项目。 –
项目是否包含在同一个解决方案中? WCF服务是通过IIS运行还是自托管? –
@TravisActon他们在同一个解决方案中。它通过IIS10运行。 –