使用Windows服务运行Hangfire,并添加网站作为控制面板(下)

  |   0 评论   |   441 浏览

在Visual Studio中调试Windows Service

由于服务不能在VS中启动,所以必须安装成服务才能运行。等服务启动之后,才能在VS中使用进程注入的方式进行调试。

调试 ——> 附加到进程 ——> 选择服务进程 ——> 附加

但是这有一个问题,等附加进程这一套操作搞完,怎么着也是半分钟之后了,程序跑到哪了都不知道,如果我们想从 Main 方法就开始打断点调试,这种方式就行不通。

所以,有另外一种调试服务的方法。

在希望中断程序,开始调试的地方加入代码 System.Diagnostics.Debugger.Launch(); ,这个方法会主动申请启动调试器。

static void Main()
{
    //在希望开始调试的地方加入这一行代码
    System.Diagnostics.Debugger.Launch();

    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[]
    {
        new Service1()
    };
    ServiceBase.Run(ServicesToRun);
}

可但是,又有一个新的问题,服务安装好,执行启动的时候,就会进Main方法,紧接着执行Service的OnStart方法,OnStart如果在30秒内没有跑完,操作系统就会判定服务启动失败,服务进程就被关闭了。

由于 System.Diagnostics.Debugger.Launch(); 方法是自己主动申请启动调试器进行调试,那么点了确定之后会启动一个新的VS实例,然后VS启动完,自动附加到进程,可能20秒就过去了,剩下10秒内要调试到OnStart执行完毕,非常仓促。

这里有一个办法,可以缓解这个问题。

首先,以管理员身份启动VS,打开要调试的解决方案,打好断点。
这时候再启动服务,在选择调试器的时候,调试器列表中会多出一个VS实例的可选项,也就是使用我们已经打开的这个VS实例进行调试,而不是启动一个新的VS示例,这样一来,留给OnStart的时间可以增加到25秒以上。

使用ASP.NET网站作为Hangfire的操控面板

首先,在现有或新建的网站中添加名为 Hangfire 的NuGet引用。
然后在网站中添加一个Startup类:

在类中指定好数据库连接(需要手动在配置文件中添加ConnectionStirng)并添加一个Hangfire的控制面板就全部搞定了。

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        GlobalConfiguration.Configuration.UseSqlServerStorage("conn");
        app.UseHangfireDashboard();
    }
}

启动网站,手动输入路径跳转到 http://localhost:0001/hangfire 页就可以看到Hangfire的各种日志和服务状态了。



都看到这里了  如果不发表评论以示支持  你的良心不会痛么?

评论

发表评论

validate