我通过Windows服务托管托管我的WCF服务... 现在,当我调用我的服务时,我无法调试它!我可以调试我的服务吗?
答案 0 :(得分:7)
此外,请考虑在开发期间不在Windows SERVICE中托管它。每当我有服务时,我都有一个替代代码路径来启动它作为命令行程序(如果可能带有/交互式命令行参数等),这样我就不用处理服务调试的具体细节了(需要停止更换组件等。)。
我只需转向“服务”进行部署等。调试始终在非服务模式下完成。
答案 1 :(得分:3)
答案 2 :(得分:0)
Debugger.Launch()一直为我工作。
答案 3 :(得分:0)
我找到了一个演练here。 它建议将两个方法OnDebugMode_Start和OnDebugMode_Stop添加到服务(实际上暴露OnStart和OnStop受保护的方法),因此Service1类将是这样的:
public partial class Service1 : ServiceBase
{
ServiceHost _host;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
Type serviceType = typeof(MyWcfService.Service1);
_host = new ServiceHost(serviceType);
_host.Open();
}
protected override void OnStop()
{
_host.Close();
}
public void OnDebugMode_Start()
{
OnStart(null);
}
public void OnDebugMode_Stop()
{
OnStop();
}
}
并在这样的程序中启动它:
static void Main()
{
try
{
#if DEBUG
// Run as interactive exe in debug mode to allow easy debugging.
var service = new Service1();
service.OnDebugMode_Start();
// Sleep the main thread indefinitely while the service code runs in OnStart()
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
service.OnDebugMode_Stop();
#else
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
#endif
}
catch (Exception ex)
{
throw ex;
}
}
在app.config中配置服务:
<configuration>
<system.serviceModel>
<services>
<service name="MyWcfService.Service1">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration=""
contract="MyWcfService.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/MyWcfService/Service1/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="True" policyVersion="Policy15"/>
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
你们已经准备好了。