分类 标签 存档 黑客派 订阅 搜索

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

784 浏览

在 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 的各种日志和服务状态了。

评论  
留下你的脚步
推荐阅读