如何优雅的利用Windows服务来部署ASP.NET Core程序
上一篇文章中我给大家讲述了五种部署ASP.NET Core网站的方法,其中有一种方式是通过Windows服务来进行部署,这样既可以做到开启自启动,又不会因为iis的反向代理而损失部分性能。但是美中不足的是需要借助第三方软件nssm来进行,那么有没有更好并且优雅的方式来进行ASP.NET Core网站的Windows服务方式部署呢?答案是肯定的!
作者:依乐祝
原文链接:https://www.cnblogs.com/yilezhu/p/10380887.html
今天这篇文章我会利用番茄工作法来进行写作,预计用时四十分钟。所以,话不多说,开撸吧!
新建一个asp.net core网站项目,如下图所示我将其命名为TestAgent

如下所示需要添加两个Nuget包,这就是大名鼎鼎的NewLife.Core以及NewLife.Agent了
Install-Package NewLife.Core
Install-Package NewLife.Agent
安装后如下所示:

这时候我们稍微修改Program 在其中添加一个服务类并继承自 AgentServiceBase,如下所示:
namespace TestAgent
{
public class Program
{
protected static string[] _args;
public static void Main(string[] args)
{
_args = args;
TestAgentServices.ServiceMain();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:8008")
.UseStartup<Startup>();
public class TestAgentServices : AgentServiceBase<TestAgentServices>
{
#region 属性
/// <summary>显示名</summary>
public override string DisplayName => "Agent测试服务";
/// <summary>描述</summary>
public override string Description => "Agent测试服务的描述信息!";
#endregion
#region 构造函数
/// <summary>实例化一个代理服务</summary>
public TestAgentServices()
{
// 一般在构造函数里面指定服务名
ServiceName = "TestAgent";
}
#endregion
#region 执行任务
protected override void StartWork(string reason)
{
CreateWebHostBuilder(_args).Build().Run();
WriteLog("当前时间{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
base.StartWork(reason);
}
#endregion
}
}
}
如上所示:我们重写下显示的名字以及描述信息,并把` CreateWebHostBuilder(_args).Build().Run();` 移到这个服务的`StartWork` 方法中.
4. Mian方法中调用` TestAgentServices.ServiceMain();` 来引导进入我们上面新建的服务类。
5. 以管理员身份打开PowerShell,并利用`dotnet run` 命令如下图所示运行我们的程序,看到如下界面:

如上所示:显示了当前服务的名称,描述以及状态,黄色字体部分列出了对应的操作命令,我们只需要输入对应的数据即可进行操作
6. 我们这里直接输入数字`2` 来进行安装服务,如下所示:

这时候显示服务已经安装,但是还未启动,这时候我们可以打开windows服务窗口找到我们的`Agent测试服务` ,并右键属性看到如下所示:

这时候启动下即可!
7. 我们访问下我们配置的端口来访问下网站,如下所示:

至此我们windows服务方式部署成功!
8. 最后说明一下NewLife.Agent是XAgent的netcore版本,nfx版本集成在NewLife.Core中,也就是说,nfx下只需要引用NewLife.Core即可,对Windows兼容性更好。
NewLife.Agent独立是为了准备支持Linux
## 总结
今天利用NewLife.Agent来演示如何优雅的进行ASP.NET Core程序的部署,当然对于控制台程序也是支持的!大伙也可以抽空试一下!最后,我只想说一句.NET Core的生态真的越来越好了,好用的东西太多太多了!同时这篇文章总共花费了三十八分钟,看来番茄工作法还是很高效的!如果你有兴趣的话可以加入.NET Core实战项目千人群637326624 跟更多的.NETCorer一起交流!
如何优雅的利用Windows服务来部署ASP.NET Core程序的更多相关文章
- [转帖]以Windows服务方式运行ASP.NET Core程序
以Windows服务方式运行ASP.NET Core程序 原作者blog: https://www.cnblogs.com/guogangj/p/9198031.htmlaspnet的blog 需要持 ...
- 以Windows服务方式运行ASP.NET Core程序
我们对ASP.NET Core的使用已经进行了相当一段时间了,大多数时候,我们的Web程序都是发布到Linux主机上的,当然了,偶尔也有需求要发布到Windows主机上,这样问题就来了,难道直接以控制 ...
- 以Windows服务方式运行ASP.NET Core程序【转载】
我们对ASP.NET Core的使用已经进行了相当一段时间了,大多数时候,我们的Web程序都是发布到Linux主机上的,当然了,偶尔也有需求要发布到Windows主机上,这样问题就来了,难道直接以控制 ...
- windows 服务中托管asp.net core
在windows 服务中托管asp.net core SDK 2.1.300 官方示例 1.添加运行标识符 xml <PropertyGroup> <TargetFramework& ...
- Windows + IIS 环境部署Asp.Net Core App
环境:Windows Server 2012, IIS 8, Asp.Net Core 1.1. 不少人第一次在IIS中部署Asp.Net Core App的人都会遇到问题,会发现原来的部署方式无法运 ...
- 在 Windows 服务中托管 ASP.NET Core
众所周知,ASP.NET Core采用了和传统ASP.NET不同的托管和HTTP处理方式,即把服务器和托管环境完全解耦.ASP.NET Core内置了两个HTTP服务器实现,一个是基于libuv实现的 ...
- 在Windows服务中托管 ASP.NET Core的坑
按照官网教程 https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/windows-service?view=aspnetcore- ...
- PowerShell自动部署ASP.NET Core程序到 IIS
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能.有关于更多PowerShell的信息,可参阅百度词条 接 ...
- 不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序
一般我们写好了应用程序想要部署发布它,要么发布到物理机,要么发布到虚拟机,要么发布到容器来运行它.现在有了Azure应用服务,我们可以完全不用管这些东西,只管写好自己的代码,然后使用VisualStu ...
随机推荐
- 大数据学习之Linux进阶02
大数据学习之Linux进阶 1-> 配置IP 1)修改配置文件 vi /sysconfig/network-scripts/ifcfg-eno16777736 2)注释掉dhcp #BOOTPR ...
- 20175305张天钰《java程序设计》第九周学习总结
<java程序设计>第九周学习总结
- selenium操作浏览器的前进和后退
前进关键字:driver.forward() 后退关键字:driver.back() 测试对象:1.https://www.baidu.com/ 2.https://www.sogou.com/ 实例 ...
- PCB差分线学习
问:何为差分信号? 答:通俗地说,就是驱动端发送两个等值.反相的信号,接收端通过比较这两个电压的差值来判断逻辑状态“0”还是“1”. 问:差分线的优势在哪? 答:差分信号和普通的单端信号走线相比,最明 ...
- NOIP2006普及组 Jam的计数法
普及组重要的模拟题.附上题目链接 https://www.luogu.org/problem/show?pid=1061 (写水题题解算是巩固提醒自己细心吧qwq) 样例输入: bdfij 样例输出: ...
- python 迭代器,生成器
在 python 中我们常用 for in 来遍历 list, set, dict, str 等. for in 的本质就干了两件事: 调用 __iter__() 获取迭代器; 调用 next() 直 ...
- 洛谷p3801:红色的幻想乡
初见完全没有思路.....感觉像是线段树 但二维感觉完全不可做嘛 于是只能去看了看题解 然而还是疯狂爆零+WA.. 和yycc神犇调了两三个小时才调出来... ——————以下个人理解 考虑到每次的修 ...
- 201771010126 王燕《面向对象程序设计(java)》第十一周学习总结
实验十一 集合 实验时间 2018-11-8 1.实验目的与要求 (1) 掌握Vetor.Stack.Hashtable三个类的用途及常用API: Vector类实现了长度可变的数组. Vecto ...
- 马昕璐 201771010118《面向对象程序设计(java)》第十八周学习总结
实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...
- 请问浏览器访问www.baidu.com经历了怎样的过程?
1.查找浏览器缓存 首先会查找浏览器缓存,浏览器会保存一段时间你之前访问过的网址的DNS信息,不同的浏览器保存的时长不等. 2.查找系统缓存 如果上面的步骤没有找到对应的DNS信息,这个时候浏览器会尝 ...