在windows服务中托管asp.net.core

参考:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-3.1&tabs=visual-studio

背景:项目各个模块部署在不同位置,因此采用了微服务架构。由于安装部署环境的差异,部分模块只能部署在xp系统下,其他部署环境考虑使用net.core,在windows服务中托管webapi,或者在webapi中寄宿windows服务,总而言之就是在一个程序中将windows服务和webapi结合起来。

  项目中使用了两种将windows服务和webapi结合起来的方法、框架。一种是通过Topshelf,将控制台程序作为windows服务安装,同时将webapp启动的webapi寄宿到控制台程序中;第二种就是使用asp.net.core,托管到windows服务中。

  方法一:topshelf、控制台的方式。

  1.创建一个控制台应用程序,建议使用framework,据说某版本的topshelf不兼容netcore(未验证)。

  2.在main方法中使用以下代码。ServicesHost为自定义类,无其他父类。只需要实现其构造方法、服务开始方法、服务结束方法即可。如此即可将一个控制台程序作为windows服务来使用。关于服务的安装卸载,请自行查看topshelf,太简单不再赘述。

HostFactory.Run(x =>
            {
                x.Service<ServicesHost>(s =>
                {
                    s.ConstructUsing(name => new ServicesHost());
                    s.WhenStarted(tc => tc.Start());
                    s.WhenStopped(tc => tc.Stop());
                });
                x.RunAsLocalSystem();
                x.StartAutomaticallyDelayed();
                x.SetDescription(“服务描述”);
                x.SetDisplayName(“显示名称”);
                x.SetServiceName(“服务名称”);//注意不要使用特殊字符
            });

  3.在ServicesHost的适当位置使用WebApp,为webapi指定端口。

 WebApp.Start(string.Format("http://*:{0}", ConfigHelper.Instance.WebPort));

  4.自定义控制器,继承ApiController。在控制器上添加RoutePrefix属性或者Route来进行路径控制。系统部署后即可实现将webapi托管到windows服务中。

  方法二:在windows服务中托管asp.net.core。

  1.创建一个asp.net.core webapplication 项目。
  2.在program配置service。 注意:2、4中的代码应在CreateHostBuilder链式实现。

Host.ConfigureServices((host,services)=>{serices.AddHostedService<T where T:BackgroundService>()});

  3.自定义服务类T,继承BackgroundService,可以重写StartAsync、ExecuteAsync、StopAsync方法。在execute执行服务内容。

  4.配置host的默认配置,主要是指定端口号。

 Host.ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder
                    .UseUrls("http://*:5001", "http://*:5002")//配置监听端口
                    .UseStartup<Startup>()
                    .UseKestrel();//指定托管服务器,Kestrel 或者iis服务器都可以,推荐使用Kestrel,可以在无iis的环境使用。
                });

  5.路由的使用。微软的推荐方式是使用了Route属性,在属性内添加控制器的路由模板。如果想用rest风格,不妨在Route属性自定义模板,通俗点说就是每个控制器都自己有个模板,看起来比较麻烦点但也保证了控制器的灵活性。 eg:

[Route("[controller]")] // 访问路径: http://127.0.0.1:5002/WeatherForecast
public class WeatherForecastController : ControllerBase{}
[Route("api/[controller]")] 访问路径: http://127.0.0.1:5002/api/WeatherForecast
public class WeatherForecastController : ControllerBase{}

  总结:根据实际情况使用如果是考虑跨平台,就用第二种。如果系统环境限制可以考虑使用第一种,都各有优劣。

  

原文地址:https://www.cnblogs.com/cnDqf/p/12162850.html

时间: 2024-12-08 21:08:20

在windows服务中托管asp.net.core的相关文章

如何优雅的利用Windows服务来部署ASP.NET Core程序

上一篇文章中我给大家讲述了五种部署ASP.NET Core网站的方法,其中有一种方式是通过Windows服务来进行部署,这样既可以做到开启自启动,又不会因为iis的反向代理而损失部分性能.但是美中不足的是需要借助第三方软件nssm来进行,那么有没有更好并且优雅的方式来进行ASP.NET Core网站的Windows服务方式部署呢?答案是肯定的! 作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10380887.html 今天这篇文章我会利用番茄工作法来

在Linux和Windows的Docker容器中运行ASP.NET Core

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了.那么我就来翻译一下这篇文章,让更多的中文读者看到.当然Scott遇到的坑我也遇到了. 不过首先,对于不熟悉的朋友我还是来解释一下Linux容器和Windows容器的概念. 由于容器成为虚拟化和应用托管的一种不可避免的选项,Windows也开始为公众提供容器功能(其实微软具备和使用

Windows平台部署 Asp.Net Core 3.1.0,将 ASP.NET Core 应用发布到 IIS ,使用 IIS 在 Windows 上托管 ASP.NET Core

第一部分:本教程介绍如何在 IIS 服务器上托管 ASP.NET Core 应用. 官方文档地址:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/publish-to-iis?view=aspnetcore-3.1&tabs=visual-studio 本教程涵盖以下主题: 在 Windows Server 上安装.NET Core Hosting Bundle. 在 IIS 管理器中创建 IIS 站点. 部署 ASP.NET Cor

将WCF寄宿在托管的Windows服务中

在我之前的一篇博客中我介绍了如何发布WCF服务并将该服务寄宿于IIS上,今天我再来介绍一种方式,就是将WCF服务寄宿在Windows服务中,这样做有什么好处呢?当然可以省去部署IIS等一系列的问题,能够让部署更加简单,当然WCF的寄宿方式一般分为以下四种方式,针对每一种方式我来简单介绍以下: 具体的寄宿方式详细信息请参考MSDN:https://msdn.microsoft.com/zh-cn/library/ms733109(v=vs.100).aspx 一.WCF服务寄宿方式: 1):寄宿在

Docker容器中运行ASP.NET Core

在Linux和Windows的Docker容器中运行ASP.NET Core 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了.那么我就来翻译一下这篇文章,让更多的中文读者看到.当然Scott遇到的坑我也遇到了. 不过首先,对于不熟悉的朋友我还是来解释一下Linux容器和Windows容器的概念. 由于容器成为虚拟化和应用托管的一种不可避免的选项,Windows也开始为公众提供容器功能(其实微软具备和使用容器技术很久了).这

使用 Nginx 在 Ubuntu 16.04 上托管 ASP.NET Core

使用 Nginx 在 Ubuntu 16.04 上托管 ASP.NET Core 准备工作 服务器主机:腾讯云主机 Ubuntu 16.04 64位 客户端软件:putty.exe; WinSCP 5.13.2 在 Ubuntu 中安装 ASP.NET Core 微软在 .NET Core指南 提供了在不同操作系统中安装运行 ASP.NET Core 的帮助文档,请选择 linux-prerequisites 部分,并找到和自己服务器所安装操作系统相同的内容进行安装即可. 注册Microsoft

.NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

原文:.NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新 我们都知道在6月12日的时候微软发布了.NET Core 3.0的第6个预览版.针对.NET Core 3.0的发布我们国内的微软MVP-汪宇杰还发布的官翻版的博文进行了详细的介绍.具体的可以关注"汪宇杰博客"公众号,或者我的"DotNetCore实战"公众号然后在历史文章里面进行查阅.而我们这篇文章将会介绍本次更新中对ASP.NET Core和Blazor所做的更

docker中运行ASP.NET Core Web API

在docker中运行ASP.NET Core Web API应用程序 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Core以及docker的基本概念,网上已经有很多文章对其进行介绍了,因此本文不会再详细讲解这些内容.对.NET Core和docker不了解的朋友,建议首先查阅与这些技术相关的文档,然后再阅读本文. 先决条件 要完成本文所介绍的演练任

在docker中运行ASP.NET Core Web API应用程序

本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Core以及docker的基本概念,网上已经有很多文章对其进行介绍了,因此本文不会再详细讲解这些内容.对.NET Core和docker不了解的朋友,建议首先查阅与这些技术相关的文档,然后再阅读本文. 先决条件 要完成本文所介绍的演练任务,需要准备以下环境: Visual Studio 2015,或者Vi