【.NET】Windows 上快速部署.NET Core Web 项目

news/2024/12/12 8:08:04/文章来源:https://www.cnblogs.com/o-O-oO/p/18601355
一、为什么在 Windows 上部署二、Kestrel 服务器的高性能三、将.NET Core 项目作为 Windows 服务四、使用 WinSW 将.NET Core 项目作为 Windows 服务五、案例

一、为什么在 Windows 上部署

在企业环境中,可能已经存在大量基于 Windows 的服务器和服务。如果你的.NET Core 项目需要与这些现有基础设施进行紧密集成,例如与 Active Directory 进行身份验证、使用 Windows 特定的文件共享或数据库连接,那么在 Windows 上部署可以更加方便地实现这些集成。另外有些特定软件的依赖只有Windows版本,比如某些工业软件服务,很多只有Windows版本。

二、Kestrel 服务器的高性能

Kestrel 是.NET Core 自带的跨平台 Web 服务器,它具有以下高性能特性:

2.1 轻量级和高效

Kestrel 是一个轻量级的服务器,它的内存占用和启动时间都非常小。这使得它非常适合在资源受限的环境中运行,同时也能够快速启动和响应请求。

与传统的 Web 服务器相比,Kestrel 不需要大量的配置和依赖项,因此可以更快地部署和启动。

2.2 异步和非阻塞

Kestrel 采用异步和非阻塞的编程模型,能够有效地处理大量的并发请求。它可以在不阻塞线程的情况下处理多个请求,从而提高服务器的吞吐量和响应速度。
这种异步编程模型还可以减少服务器的资源消耗,因为它不需要为每个请求创建一个新的线程。

2.3 支持 HTTP/2

Kestrel 支持 HTTP/2 协议,这是一种新一代的 Web 协议,具有更高的性能和更好的安全性。HTTP/2 可以在单个连接上同时处理多个请求和响应,减少了延迟和网络开销。

启用 HTTP/2 可以提高网站的加载速度和用户体验,特别是对于需要加载大量资源的网站。

2.4 易于配置和扩展

Kestrel 可以通过配置文件进行轻松配置,并且可以与其他.NET Core 中间件和组件进行集成。这使得开发人员可以根据自己的需求定制服务器的行为,并添加额外的功能和安全性。
例如,可以使用中间件来实现日志记录、身份验证、授权和缓存等功能。

三、将.NET Core 项目作为 Windows 服务

可以直接使用windows的sc命令来创建服务,但是会经常出现问题,目前常见的工具有WinSW和NSSM工具。

3.1 WinSW 的优势

1、简单易用

WinSW 的配置相对简单,只需要一个 XML 配置文件即可完成服务的配置。对于不熟悉复杂工具的用户来说,WinSW 更容易上手。
配置文件的格式清晰明了,易于理解和修改。用户可以快速根据自己的需求进行配置,而不需要花费大量时间学习复杂的工具界面和参数。

2、轻量级

WinSW 本身是一个轻量级的工具,不会占用过多的系统资源。这对于资源有限的服务器环境来说非常重要,可以确保服务的稳定运行,同时不会对系统性能造成过大的影响。

3、开源免费

WinSW 是开源软件,用户可以免费使用。这对于个人开发者和小型团队来说是一个很大的优势,可以降低项目的成本。

3.2 NSSM 的特点

1、功能丰富

NSSM 提供了更多的功能选项,例如可以设置服务的依赖关系、启动参数、环境变量等。对于需要更复杂配置的用户来说,NSSM 可能更适合。

NSSM 还支持图形用户界面,用户可以通过直观的界面进行配置,而不需要手动编辑配置文件。

2、 广泛的社区支持

NSSM 拥有广泛的社区支持,用户可以在网上找到大量的教程和解决方案。如果在使用过程中遇到问题,更容易获得帮助。

3.3 选择 WinSW 的原因

1、 满足需求
对于大多数将.NET Core 项目作为 Windows 服务的场景,WinSW 的简单易用和轻量级特性已经能够满足需求。如果没有特殊的复杂配置要求,WinSW 是一个更快速、高效的选择。
2、 降低复杂性

在一些情况下,过于复杂的工具可能会引入不必要的复杂性和风险。WinSW 的简洁性可以减少配置错误的可能性,提高服务的稳定性和可靠性。
3、 成本考虑

对于个人开发者和小型团队来说,开源免费的 WinSW 可以降低项目的成本。而对于大型企业或有特殊需求的用户,可以根据实际情况选择 NSSM 或其他更复杂的工具。

四、使用 WinSW 将.NET Core 项目作为 Windows 服务

4.1 下载 WinSW

从 https://github.com/winsw/winsw/releases下载最新版本的 WinSW。WinSW 提供了多种版本,包括 32 位和 64 位版本。选择适合你的系统和需求的版本进行下载。

1、 配置 WinSW
将下载的 WinSW 可执行文件重命名为与你的.NET Core 项目名称相关的名称,例如“MyAppService.exe”。
创建一个 XML 配置文件,文件名一定要和上一步的WinSW名称相同,用于配置 WinSW。以下是一个示例配置文件:

<service>  
--设置服务id
<id>myapp</id>
--设置服务名称 一般和id一样
<name>MyApp Service (powered by WinSW)</name>
--类似于服务说明、备注>
<description>This service is a service created from a sample configuration</description>
--这里输入软件的路径
<executable>%BASE%\myExecutable.exe</executable>
--设置优先事项
<priority></priority>
--stoptimeout:停止超时时间,默认“15 sec”  
<stoptimeout>15 sec</stoptimeout>
--是否在停止子进程之前终止父进程,默认true  
<stopparentprocessfirst>true</stopparentprocessfirst>
--Boot:设备驱动程序由操作系统加载程序启动。此值仅对驱动程序服务有效。
--System:设备驱动程序由操作系统初始化过程启动。此值仅对驱动程序服务有效。
--Automatic:自动,服务控制管理器将在系统启动期间自动启动服务。
--Manual:手动,当进程调用StartService方法时,由服务控制管理器启动的服务。
--Disabled:禁用,无法再启动的服务。
--默认值为Automatic  
<startmode>Automatic</startmode>
--指定多长时间内服务应该对SetServiceStatus函数进行下一次调用,否则会被标记为无响应,默认“15 sec”  
<waithint>15 sec</waithint>
--服务两次调用SetServiceStatus函数的间隔时间,默认“1 sec”  
<sleeptime>1 sec</sleeptime>
<logmode=""></log>
</service>

在这个配置文件中,你需要将“id”、“name”和“description”替换为你的服务的唯一标识符、名称和描述。“executable”指定了用于启动服务的可执行文件,“logmode”指定了日志记录模式,可以是“roll”(滚动日志)或“append”(追加日志)。

2、安装和启动服务
将配置文件和 WinSW 可执行文件放在同一目录下。

打开以管理员启动命令提示符,并切换到包含配置文件和 WinSW 可执行文件的目录。
运行以下命令安装服务:

MyAppService.exe install

这将安装服务,并将其注册到 Windows 服务控制管理器中。

运行以下命令启动服务:

MyAppService.exe start

这将启动服务,并在后台运行你的.NET Core 项目。
3、 管理服务

可以使用 Windows 服务控制管理器来管理你的服务。打开“服务”窗口(可以在“控制面板”->“管理工具”->“服务”中找到),找到你的服务,并可以进行启动、停止、暂停、恢复等操作。
还可以使用命令提示符来管理服务。例如,运行以下命令停止服务:

MyAppService.exe stop

常用命令如下:

五、案例

  1. 创建一个简单的最小API项目,编译。

public class Program
{
public static void Main(string[] args)
{
var builder =WebApplication.CreateBuilder(args);
//配置使用Kestrel监听端口为6642builder.WebHost.ConfigureKestrel(options =>{options.ListenLocalhost(6642);});
var app = builder.Build();app.MapGet("/hello",()=>"hello world~~~~");app.Run();
}}

生成如下文件

  1. 将WinSW.exe拷贝到项目目录,并且新建一个xml文件,文件名必须与之相同,xml文件配置如下:
<service><id>netcoreTest</id><name>netcoreTest</name><description>测试.net部署</description><executable>%BASE%\WebApplication2.exe</executable>
</service>

最终的目录文件列表如下:

以管理员cmd运行WinSW.exe start,此时在任务管理器中可以看到服务已经运行:

在浏览器访问http://localhost:6642/hello,出现如下页面

个人观点,仅供参考

原创 步步为营Dotnet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/851180.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux运维】利用categraf的exec插件实现对Linux主机系统用户及密码有效期进行监控及告警

需求描述 Categraf作为夜莺监控平台的数据采集工具,为了保障Linux主机的安全,需要实现对系统用户密码有效期的监控,并在密码即将到期时及时告警,以提醒运维人员更改密码。本章将详细介绍如何利用Categraf的exec插件来实现这一功能,并确保告警信息能够通过企业微信、飞书等…

【Tomcat安全】Tomcat版本信息泄露漏洞修复办法

默认首页 如果Tomcat安装后没有部署任何Web应用程序,访问时会看到一个默认的欢迎页面,该页面会泄露Tomcat的版本信息,如下:解决办法就是禁用默认首页。 方法1:删除或修改默认首页文件 删除或修改Tomcat安装目录下的webapps/ROOT文件夹中的默认首页index.jsp文件,这里演示…

LeetCode题集-6 - Z 字形变换

分享Z字形排列字符串的解法,包括二维矩阵模拟、行模拟(压缩矩阵、代码精简)、伪直接构建和真直接构建,真直接构建需处理周期和行字符数,直接拼接结果字符串。题目:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。这一题作为中等难度…

SqlSugar:一个针对.NET平台设计的ORM框架

以下文章来源于全栈程序员园地 ,作者小袁同学 项目介绍 SqlSugar是一个针对.NET平台设计的ORM框架,以其快速、简单、易用著称,并支持多种数据库,包括国内外主流数据库和国产数据库。 开箱即用,MIT License开源免费。 开源地址:https://gitee.com/dotnetchina/SqlSugar 在…

【spring编程】Spring中Filter与Interceptor的区别及正确用法

自从我们开始使用 Spring,我们经常听到过滤器(Filter)和拦截器(Interceptor)。然而,当真正需要使用它们时,可能会对它们的区别和相似点感到困惑。产生这种困惑的主要原因是它们的用途相似(例如,授权检查、日志处理、数据压缩/解压等)。 使用过滤器可以实现的场景同样…

读数据保护:工作负载的可恢复性11传统数据源中的数据

传统数据源中的数据1. 传统数据源中的数据 1.1. 需要备份的数据分散在各种地方1.1.1. 有些数据源是大家都能意识到的1.1.1.1. 即便在大家都能想到的这些数据源里,仍然会有一些容易忽视的问题1.1.2. 有一些不那么明显2. 实体服务器 2.1. 以前,我们把实体服务器直接叫作服务器,…

GoAccess :一款出色的开源网络日志分析工具

GoAccess 是一款出色的开源网络日志分析工具。它支持多种主流软件日志格式,如 Apache、Nginx 等。基于 C 语言构建,具备实时分析能力,能快速处理日志数据并生成可视化报告,无论是终端展示还是 HTML、JSON、CSV 格式输出,都为网络运维与业务优化提供有力支持。官网地址:ht…

canvas生成图片有没有跨域问题?如果有如何解决?

Canvas 生成图片本身不会直接导致跨域问题,但是如果 Canvas 使用的图片资源来自不同的域,就会出现跨域问题。 这是因为浏览器出于安全考虑,限制了从一个域加载的脚本访问另一个域的资源。 具体来说,如果你的 Canvas 画布绘制了来自其他域的图片,然后你试图使用 toDataURL…

如何垂直居中`img`?

有多种方法可以垂直居中 <img> 元素,选择哪种方法取决于 <img> 元素的上下文以及你想要达到的具体效果。以下是一些常用的技巧: 1. Flexbox: 这是现代布局中最推荐的方法,因为它简洁且灵活。 <div style="display: flex; align-items: center; justify…

ubuntu20.04.6配置虚拟VCAN

开启vcan设备的命令: sudo ip link add dev vcan0 type vcan 如果没有vcan模块,则先用modprobe命令生成vcan模块: sudo modprobe vcan 如果模块/lib/modules/linux-headers-$(uname -r)下没有vcan.ko,则无法创建vcan模块,需安装linux-headers-$(uname -r): sudo apt inst…

ubuntu20.04.6虚拟机workstation网络配置

步骤1: 设置VMware workstation的虚拟网络编辑器,添加NAT网络:步骤2: 在本地真实主机上设置设置虚拟网络共享,允许其他机器通过本机访问网络。步骤3: 将在创建的虚拟机上配置网络,如下图:图中位置鼠标右键选择设置,将网络改为custom自定义-nat模式

新型知识付费生态系统

新型知识付费生态系统作为教育与软件行业的融合产物,已经成为推动知识传递与商业成功的核心驱动力之一。该生态系统通过一系列前沿科技应用来提升学习体验并实现资源的最佳匹配,从而重塑了在线教育行业的面貌。下面对知识付费在线教育系统的背景、现状和未来趋势进行全面分析…