ASP.NET Core Web程序托管到Windows 服务
前言
在 .NET Core 3.1和WorkerServices构建Windows服务 我们也看到了,如何将workerservices构建成服务,那么本篇文章我们再来看看如何将web应用程序托管到我们的服务中.
将WEB应用作为服务运行
我们需要将我们的WEB应用程序编译成exe文件,在ASP.NETCore中其实这是一个很简单的过程,我们只需要修改.csproj即可。正如下面代码片段
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<OutputType>Exe</OutputType>
</PropertyGroup>
</Project>
我们只需要添加OutputType即可.
接着来我们需要安装Microsoft.Extensions.Hosting.WindowsServices到我们的WEB应用程序中,如下所示:
Install-Package Microsoft.Extensions.Hosting.WindowsServices
现在我们需要在Program.cs中的CreateDefaultBuilder方法中进行扩展UseWindowsService
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseWindowsService();
}
上述代码中我们已经操作完了....
部署服务
我们还需要做的是部署到我们的服务中.
以管理员身份打开命令提示符,然后在项目文件夹中运行以下命令以发布项目:
dotnet publish -c Release
接下来,我们可以使用标准Windows服务命令将exe作为服务安装。因此,将命令提示符移动到输出文件夹(可能沿着myproject\bin\Release\netcoreapp3.1\publish)。并运行类似的内容以作为服务安装:
sc create ASPNETCoreWindowsService binPath=ASPNETCoreWindowsService.exe
当然我们也可以停止和删除该服务
sc.exe stop ASPNETCoreWindowsService
sc.exe delete ASPNETCoreWindowsService
独立部署
将Web App作为Windows服务运行的全部原因是,我们不必在计算机上安装其他工具。但这只有在我们进行所谓的独立部署时才有效。这意味着我们将应用程序所需的一切部署在发布文件夹中,而不必在目标计算机上安装.NET Core运行时。
我们需要做的就是运行我们的dotnet release命令,其中包含一些额外的标志:
dotnet publish -c Release -r win-x64 --self-contained
这告诉.NET Core SDK我们要以独立形式发布,并且适用于Windows。
您的输出路径将从bin\Release\netcoreapp3.0\publish 更改为\bin\Release\ netcoreapp3.0\win-x64\publish
您还将注意到此新输出目录中的大量文件以及该文件夹的一般大小。但是,考虑到这一点,是的,我们正在部署整个运行时,因此它应该很大。
Content Root
我快速浏览了UseWindowsService的调用在此处的实际源代码。我注意到的是,它专门为在Windows Service下运行的内容设置了根目录。我想知道如果以Windows服务运行时从应用程序内的磁盘读取本地文件怎么办?通常我只会写类似:
File.ReadAllText("myfile.json");
但是……显然,在WindowsService上下文中运行时有一些特殊之处。所以我尝试了一下,我的程序异常了。我不得不检查机器上的事件查看器,发现:
Exception Info: System.IO.FileNotFoundException: Could not find file 'C:\WINDOWS\system32\myfile.json'.
因此,当作为Windows服务运行时,我的应用程序的"根"认为它位于System32内。再次查看Microsoft的源代码可以找到解决方案。我可以简单地使用它们设置内容根目录的相同方法,以从正确的位置加载我的文件:
File.ReadAllText(Path.Combine(AppContext.BaseDirectory, "myfile.json"));
Reference
https://github.com/hueifeng/BlogSample/tree/master/src/ASPNETCoreWindowsService
ASP.NET Core Web程序托管到Windows 服务的更多相关文章
- [03-2]VS2017 创建 ASP.NET Core Web 程序
VS2017 创建 ASP.NET Core Web 程序 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自<从零开始学 ...
- [03]使用 VS2019 创建 ASP.NET Core Web 程序
使用 VS2019 创建 ASP.NET Core Web 程序 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自<从零开 ...
- 在ASP.NET Core Web API中为RESTful服务增加对HAL的支持
HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务 ...
- 【Azure DevOps系列】使ASP.NET Core应用程序托管到Azure Web App Service
使用Azure DevOps Project设置ASP.NET项目 我们需要先在Azure面板中创建一个Azure WebApp服务,此处步骤我将省略,然后点击部署中心如下图所示: 此处我选择的是Az ...
- 第三节:Windows平台部署Asp.Net Core应用(基于IIS和Windows服务两种模式)
一. 简介 二. 文件系统发布至IIS 三. Web部署发布至IIS 四. FTP发布至IIS 五. Windows服务的形式发布 ! 作 者 : Yaopengfei(姚鹏飞) 博客地址 ...
- 使用docker部署Asp.net core web应用程序
拉取aspnetcore最新docker镜像 aspnetcore的docker镜像在docker官网是有的,是由微软提供的.它的依赖镜像是microsoft/dotnet.通过访问网址:https: ...
- Docker容器环境下ASP.NET Core Web API应用程序的调试
本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...
- 在docker中运行ASP.NET Core Web API应用程序
本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...
- Linux使用Jexus托管Asp.Net Core应用程序
第一步 安装.Net Core环境 安装 dotnet 环境参见官方网站 https://www.microsoft.com/net/core. 选择对应的系统版本进行安装.安装完成过后 输入命令查看 ...
随机推荐
- Pytorch Bi-LSTM + CRF 代码详解
久闻LSTM + CRF的效果强大,最近在看Pytorch官网文档的时候,看到了这段代码,前前后后查了很多资料,终于把代码弄懂了.我希望在后来人看这段代码的时候,直接就看我的博客就能完全弄懂这段代码. ...
- Python--day63---出版社增删查改开发流程回顾
1,第一步:对应url 2,第二步:views.py 3,第三步:views.py中的函数中利用ORM去数据库中操纵数据 4,第四步:Django模板语言实现字符串替换 5,第五步:取出publish ...
- java 利用TCP上传文件
从客户端上传到服务器端,其实本质上也就是复制! package july76net; //上传文件(文本) import java.io.BufferedReader; import java.io. ...
- UVa 1354 Mobile Computing[暴力枚举]
**1354 Mobile Computing** There is a mysterious planet called Yaen, whose space is 2-dimensional. Th ...
- P1044 最大值最小化
题目描述 在印刷术发明之前,复制一本书是一个很困难的工作,工作量很大,而且需要大家的积极配合来抄写一本书,团队合作能力很重要.当时都是通过招募抄写员来进行书本的录入和复制工作的, 假设现在要抄写 \( ...
- HDU 1087 Super Jumping....(动态规划之最大递增子序列和)
Super Jumping! Jumping! Jumping! Problem Description Nowadays, a kind of chess game called “Super Ju ...
- maven仓库总结,maven私服搭建,批量mvn eclipse:eclipse
配置pom.xml依赖包时在这里找包的描述: http://search.maven.org/#browse 以java为根目录. mvn archtype:generate -DgroupId=zt ...
- ZR普转提2
ZR普转提2 A 谢谢刁神教我A题 刚开始读错题了,以为是一个不可做的数位DP,然后就暴力滚粗 直到问了问刁神,发现自己题意是错的 然后成了比较简单的题目 直接暴力枚举每一位填什么,剩下的位数的数字都 ...
- Xamarin 的一些资源汇总
https://github.com/xamarin/xamarin-forms-sampleshttps://github.com/EgorBo/CrossChat-Xamarin.Formshtt ...
- Servlet学习笔记(一)
使用Servlet所需要导入的包: java.io.*; javax.servlet.*; ...