.Net Core以windows服务方式部署

下面是关于".NET Core以Windows服务方式部署"的完整攻略,包含两个示例说明。

简介

.NET Core是一个跨平台的开源框架,可以在Windows、Linux和macOS等操作系统上运行。在Windows操作系统上,我们可以使用.NET Core以Windows服务方式部署应用程序。本文将详细讲解如何使用.NET Core以Windows服务方式部署应用程序,并提供两个示例说明。

部署应用程序

以下是使用.NET Core以Windows服务方式部署应用程序的步骤:

  1. 在Visual Studio中创建一个新的.NET Core控制台应用程序。

  2. 在"Program.cs"文件中添加以下代码:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace MyService
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            var isService = !(Debugger.IsAttached || args.Contains("--console"));

            var builder = new HostBuilder()
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<MyService>();
                })
                .ConfigureLogging((hostContext, configLogging) =>
                {
                    configLogging.AddEventLog(new EventLogSettings
                    {
                        SourceName = "MyService",
                        LogName = "Application"
                    });
                });

            if (isService)
            {
                await builder.RunAsServiceAsync();
            }
            else
            {
                await builder.RunConsoleAsync();
            }
        }
    }
}

在上面的代码中,我们创建了一个名为"MyService"的服务,并使用AddHostedService方法将该服务添加到.NET Core应用程序中。然后,我们使用AddEventLog方法将日志记录到Windows事件日志中。

  1. 在"MyService.cs"文件中添加以下代码:
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace MyService
{
    public class MyService : IHostedService, IDisposable
    {
        private readonly ILogger<MyService> _logger;
        private Timer _timer;

        public MyService(ILogger<MyService> logger)
        {
            _logger = logger;
        }

        public Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("MyService is starting.");

            _timer = new Timer(DoWork, null, TimeSpan.Zero,
                TimeSpan.FromSeconds(5));

            return Task.CompletedTask;
        }

        private void DoWork(object state)
        {
            _logger.LogInformation("MyService is working.");
        }

        public Task StopAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("MyService is stopping.");

            _timer?.Change(Timeout.Infinite, 0);

            return Task.CompletedTask;
        }

        public void Dispose()
        {
            _timer?.Dispose();
        }
    }
}

在上面的代码中,我们创建了一个名为"MyService"的服务,并实现了IHostedService接口。在StartAsync方法中,我们创建了一个定时器,并在定时器回调函数中记录日志。在StopAsync方法中,我们停止了定时器。

  1. 在项目文件(.csproj)中添加以下代码:
<PropertyGroup>
  <OutputType>Exe</OutputType>
  <TargetFramework>net6.0</TargetFramework>
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>
  <PublishSingleFile>true</PublishSingleFile>
  <PublishTrimmed>true</PublishTrimmed>
  <PublishReadyToRun>true</PublishReadyToRun>
  <PublishDir>bin\Release\net6.0\win-x64\publish\</PublishDir>
</PropertyGroup>

在上面的代码中,我们设置了输出类型为Exe,并指定了目标框架、运行时标识符和发布目录等信息。

  1. 在命令行中执行以下命令:
dotnet publish -c Release -r win-x64 --self-contained true

在上面的命令中,我们使用dotnet命令发布应用程序,并指定了发布配置、运行时标识符和是否包含运行时等信息。

  1. 在命令行中执行以下命令:
sc create MyService binPath= "C:\path\to\MyService.exe"

在上面的命令中,我们使用sc命令创建一个名为"MyService"的Windows服务,并指定了应用程序的路径。

  1. 在命令行中执行以下命令:
sc start MyService

在上面的命令中,我们使用sc命令启动"MyService"服务。

示例说明

以下是两个示例说明,演示如何使用.NET Core以Windows服务方式部署应用程序:

示例1:记录日志

在"MyService.cs"文件中添加以下代码:

private void DoWork(object state)
{
    _logger.LogInformation("MyService is working.");
}

在上面的代码中,我们在定时器回调函数中记录了日志。启动"MyService"服务,并在Windows事件日志中查看日志记录。

示例2:发送电子邮件

在"MyService.cs"文件中添加以下代码:

private void DoWork(object state)
{
    _logger.LogInformation("MyService is working.");

    var message = new MimeMessage();
    message.From.Add(new MailboxAddress("Sender", "sender@example.com"));
    message.To.Add(new MailboxAddress("Recipient", "recipient@example.com"));
    message.Subject = "Hello World";
    message.Body = new TextPart("plain")
    {
        Text = "This is a test email."
    };

    using (var client = new SmtpClient())
    {
        client.Connect("smtp.example.com", 587, false);
        client.Authenticate("username", "password");
        client.Send(message);
        client.Disconnect(true);
    }
}

在上面的代码中,我们在定时器回调函数中发送了一封电子邮件。启动"MyService"服务,并检查收件箱,可以看到电子邮件已经成功发送。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.Net Core以windows服务方式部署 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 本地计算机如何连接阿里云Mysql数据库

    以下方案仅针对Windows系统 第一种、监听地址配置错误解决方法: 检查mysql服务端口(默认为3306)是否正常监听在127.0.0.1上,如果监听在127.0.0.1上那只允许服务器本身访问的,其他地址是访问不了的.   默认的数据目录C:\ProgramData\MySQL\MySQL56下,有一个my.ini文件,将bind-address = …

    2023年4月10日
    00
  • 我们究竟如何考量云计算是否适合自己的业务?

    在高性能工作负载中使用云计算的情况正在上升。现在大多数云提供商提供的最先进的CPUs、GPUs、高性能存储和网络的HPC节点。尽管如此,决定是否使用云计算也突然变得棘手。在这篇短文,我们讨论五个关键考虑因素,来帮助你决定云计算是否适合你的业务。 (云计算) 1、计算真实成本 云计算比管理本地服务器便宜是公共认知。虽然经常是真的,这也不是一直在任何情况下都正确…

    云计算 2023年4月12日
    00
  • 分布式场景下,如何对外提供易变的服务,打造可靠的注册中心?

    摘要:本文讲了关于服务发现的很多干货内容,核心内容为服务发现组件的选择、网关的介绍、 客户端侧如何发给已发现的服务。 本文分享自华为云社区《分布式场景下,如何对外提供易变的服务,打造可靠的注册中心?》,作者:breakDawn。 随着云原生的概念越来越火,服务的架构应该如何发展和演进,成为很多程序员关心的话题。大名鼎鼎的《深入理解java虚拟机》一书作者于2…

    云计算 2023年5月6日
    00
  • 2020年最火的6种编程语言推荐

    2020年最火的6种编程语言推荐攻略 本篇文章将介绍2020年最火的6种编程语言,分别是Python、JavaScript、Java、Go、Swift和Kotlin。我们将从以下几个方面出发,让大家更全面地了解这些编程语言: 编程语言的优缺点 编程语言的适用场景 优秀的编程语言学习资源推荐 一、Python 1. 优缺点 优点: 语法简洁,易于学习 库丰富,…

    云计算 2023年5月18日
    00
  • 《伟大的计算原理》一云计算

    摘要: 本节书摘来华章计算机《伟大的计算原理》一书中的第2章 ,[美]彼得 J. 丹宁(Peter J. Denning) 克雷格 H. 马特尔(Craig H. Martell)著 罗英伟 高良才 张 伟 熊瑞勤 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 本节书摘来华章计算机《伟大的计算原理》一书中的第2章 ,[美]彼得 J. 丹宁(Pe…

    2023年4月10日
    00
  • 云计算之路:阿里云RDS是止痛药,不是解药

    RDS(Relational Database Service)是阿里云提供的关系型数据库服务,是将直接运行于物理服务器上的数据库实例租给用户,通过对硬件资源的独占分配避开了云服务器硬盘IO共享带来的性能问题。付出的代价是抛弃了云平台中的关键角色——虚拟化平台。 RDS(Relational Database Service)是阿里云提供的关系型数据库服务,…

    云计算 2023年4月13日
    00
  • iOS中设置网络超时时间+模拟的方法详解

    iOS中设置网络超时时间+模拟的方法详解 在iOS开发中,我们经常需要设置网络请求的超时时间,以确保应用程序的稳定性和可靠性。本文将提供一个完整的攻略,包括如何设置网络超时时间和如何模拟网络请求的过程。 设置网络超时时间 在iOS中,我们可以使用NSURLSession来设置网络请求的超时时间。以下是一个示例说明,演示如何设置网络超时时间: let sess…

    云计算 2023年5月16日
    00
  • 浅谈:Hadoop、spark、SaaS、PaaS、IaaS、云计算

    Hadoop & Spark首先二者均不是属于产品类别,理解为生态系统或者也有人将其称为“大数据通用处理平台”也是可以的,这种称呼也更为准确Hadoop是由Apache基金会所开发的分布式系统基础架构Hadoop主要包括:Hadoop分布式文件系统:一个分布式的、面向块的、不可更新的、高度伸缩性的、可运行在集群中普通硬盘上的文件系统MapReduce…

    云计算 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部