.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日

相关文章

  • 华工软院IBM LinuxONE Community Cloud云计算实验文档

    此博文介绍华南理工大学软件学院“云计算开发与应用”实验课。本人在大二期间选修了这门课,实验课内容是把已有的app部署到云服务器上运行。虽然实验内容很简单(作者大概一个小时就做完了两天的实验内容),但觉得这次实验是我在华工期间做过的为数不多有意义的实验之一,故作此博客记录实验详细过程。此博客以linux环境为准。 实验所需材料与环境配置: 本地环境:Manja…

    云计算 2023年4月11日
    00
  • Java获取用户访问IP及地理位置的方法详解

    下面是关于“Java获取用户访问IP及地理位置的方法详解”的完整攻略,包含两个示例说明。 简介 在Java Web应用程序中,获取用户访问IP及地理位置是一种常见的需求。在本攻略中,我们将介绍如何使用Java获取用户访问IP及地理位置,并提供一些最佳实践。 步骤 在Java Web应用程序中获取用户访问IP及地理位置时,我们可以通过以下步骤来实现: 获取用户…

    云计算 2023年5月16日
    00
  • DTSE Tech Talk 第13期:Serverless凭什么被誉为未来云计算范式?

    摘要:在未来,云上交付模式会逐步从Serverful为主转向Serverless为主。 本文分享自华为云社区《DTSE Tech Talk 第13期:Serverless凭什么被誉为未来云计算范式?》,作者: 华为云社区精选。 DTSE Tech Talk(华为云开发者联盟推出的技术公开课)解读云上前沿技术,畅聊开发应用实践。专家团队授课,答疑解惑,助力开发…

    2023年4月10日
    00
  • python适合做数据挖掘吗

    当然可以。Python是一种流行的编程语言,尤其在数据科学和机器学习领域得到了广泛的应用。以下是Python适合做数据挖掘的完整攻略。 1. Python是数据科学的首选语言 Python是一种易于学习且高度可扩展的编程语言,它在数据科学和机器学习领域非常流行。它的生态系统非常丰富,包括数据可视化、统计分析、机器学习、人工智能等库和框架。使用Python进行…

    云计算 2023年5月18日
    00
  • ASP.NET MVC3关于生成纯静态后如何不再走路由直接访问静态页面

    在ASP.NET MVC3中,通过路由映射匹配的方式来处理请求,并且默认情况下会在运行时动态生成响应结果。如果希望访问纯静态的页面后不再走路由,则可以选择对应的操作方法前添加OutputCache特性,同时设置Duration为足够长的时间,即可实现。 下面是具体的步骤: 在Controller中创建一个操作方法,如下所示: public ActionRes…

    云计算 2023年5月17日
    00
  • 阅读【现代网络技术 SDN/NFV/QOE 物联网和云计算】 第一章

    本人打算阅读这本书来了解物联网和云计算的基础架构和设计原理。特作笔记如下: 作者: William  Stallings 本书解决的主要问题: 由单一厂商例如IBM向企业或者个人提供IT产品和服务,包括计算机软件,硬件,通信和网络设备服务。 这个时代已经一去不复返 目前用户和企业面对是复杂,异构,多样的环境,要求复杂,先进,更详细的解决方案。而云计算,大数据…

    云计算 2023年4月11日
    00
  • 开源:云寻觅中文分词 (Yunxunmi Chinese Word Segmentation) ,词汇440万,10万字文章分词并计算频率不超过1秒

    开源:云寻觅中文分词 (Yunxunmi Chinese Word Segmentation) ,词汇440万,10万字文章分词并计算频率不超过1秒 云寻觅中文分词 (Yunxunmi Chinese Word Segmentation) 指的是将一个汉字序列切成一个一个单独的词。云寻觅中文分词就是将连续的字序列按照一定的规范重新组合成词序列的 过程。中文分…

    2023年4月10日
    00
  • 马哥Linux 高端运维云计算就业班

    马哥Linux 高端运维云计算就业班视频教程 马哥Linux 高端运维云计算就业班视频教程 马哥Linux 高端运维云计算就业班视频教程 马哥Linux 高端运维云计算就业班视频教程 链接: https://pan.baidu.com/s/1YXJbzetJV6-0IUbZIrKZBA提取码: 796f  『课程目录』: │  01、马哥亲讲Linux运维发…

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