下面是关于".NET Core以Windows服务方式部署"的完整攻略,包含两个示例说明。
简介
.NET Core是一个跨平台的开源框架,可以在Windows、Linux和macOS等操作系统上运行。在Windows操作系统上,我们可以使用.NET Core以Windows服务方式部署应用程序。本文将详细讲解如何使用.NET Core以Windows服务方式部署应用程序,并提供两个示例说明。
部署应用程序
以下是使用.NET Core以Windows服务方式部署应用程序的步骤:
-
在Visual Studio中创建一个新的.NET Core控制台应用程序。
-
在"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事件日志中。
- 在"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方法中,我们停止了定时器。
- 在项目文件(.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,并指定了目标框架、运行时标识符和发布目录等信息。
- 在命令行中执行以下命令:
dotnet publish -c Release -r win-x64 --self-contained true
在上面的命令中,我们使用dotnet命令发布应用程序,并指定了发布配置、运行时标识符和是否包含运行时等信息。
- 在命令行中执行以下命令:
sc create MyService binPath= "C:\path\to\MyService.exe"
在上面的命令中,我们使用sc命令创建一个名为"MyService"的Windows服务,并指定了应用程序的路径。
- 在命令行中执行以下命令:
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技术站