wordpress上传错误500站长工具seo综合查询
wordpress上传错误500,站长工具seo综合查询,网页版微信会留下记录吗,wordpress 图片弹出创建Service应用#xff0c;是一个服务端开发的必会技能。前言说到服务端应用#xff0c;最常见的就是API服务。除此之外#xff0c;还有一类应用#xff0c;比方一个Socket的服务器。这类型的应用#xff0c;本身没有Web层#xff0c;当然也不属于API服务。通常大家会怎… 创建Service应用是一个服务端开发的必会技能。 前言说到服务端应用最常见的就是API服务。除此之外还有一类应用比方一个Socket的服务器。这类型的应用本身没有Web层当然也不属于API服务。通常大家会怎么做不讲究的做法就是做一个Console应用加载到后台一直跑着。其实还有另外一种做法就是把应用加载到Services里使应用以一个Service来做响应。这样可以依托操作系统的Services管理器来进行统一管理自动运行和故障处理。 Dotnet做Window Service的内容网上有很多。我今天写一个在Linux下做Service的方法。创建Linux下的Service应用创建一个LInux下的Service应用其实很简单就分这么几步1. 用 Worker 模板创建工程如果习惯用VS上创建就找一下Worker Service模板。我是习惯从命令行创建就一条命令% dotnet new worker -o projectname
Dotnet会自动造成工程并自动引用Microsoft.Extensions.Hosting包因为这本身是一个Self-Hosting应用。2. 加入Linux Service扩展包其实这就是一个包Microsoft.Extensions.Hosting.Systemd。这个包为应用提供了在Linux下使用Systemd守护进程的基础配置。还是命令行% dotnet add package Microsoft.Extensions.Hosting.Systemd
3. 修改Program.cs其实就是一行代码把第二步引入的包加入应用。修改Program.cspublic static IHostBuilder CreateHostBuilder(string[] args) Host.CreateDefaultBuilder(args).UseSystemd() // 加入的就是这一行。.ConfigureServices((hostContext, services) {services.AddHostedServiceWorker();});到这儿套路性的工作已经完成。简单吧 我们来看一下现在的工程├── Program.cs
├── Properties
│ └── launchSettings.json
├── Worker.cs
├── appsettings.Development.json
├── appsettings.json
└── workerdemo.csproj
大家会注意到里面多了一个Worker.cs的类文件。看一下这个文件public class Worker : BackgroundService
{private readonly ILoggerWorker _logger;public Worker(ILoggerWorker logger){_logger logger;}protected override async Task ExecuteAsync(CancellationToken stoppingToken){while (!stoppingToken.IsCancellationRequested){_logger.LogInformation(Worker running at: {time}, DateTimeOffset.Now);await Task.Delay(1000, stoppingToken);}}
}
这其实就是加载到Systemd里的服务的模板。我们需要的服务代码需要加到ExecuteAsync(CancellationToken stoppingToken)方法中。 我简单做个例子在里面加入UDP服务看代码public class Worker : BackgroundService
{private readonly ILoggerWorker _logger;private readonly IConfiguration _configuration;public Worker(ILoggerWorker logger, IConfiguration configuration){_logger logger;_configuration configuration;}protected override async Task ExecuteAsync(CancellationToken stoppingToken){_logger.LogInformation(Worker running at: {time}, DateTimeOffset.Now);UdpClient udpClient new UdpClient(new IPEndPoint(IPAddress.Parse(127.0.0.1), 8000));while (!stoppingToken.IsCancellationRequested){UdpReceiveResult udpReceiveResult await udpClient.ReceiveAsync();string message Encoding.UTF8.GetString(udpReceiveResult.Buffer);Console.WriteLine(${udpReceiveResult.RemoteEndPoint.ToString()} - {message});await udpClient.SendAsync(Encoding.Default.GetBytes(Got), 3, udpReceiveResult.RemoteEndPoint);}}
}
这个代码中有两件事需要注意在前边Program.cs中加入UseSystemd()时已经注入了IConfiguration。因此可以在这个方法中直接引入并使用。换句话说就是可以直接读取例如appsetting.json的内容是上边提到的真正的服务响应在ExecuteAsync(CancellationToken stoppingToken)中。这儿没什么特别的就是正常的写法。 上面这个是服务端的程序是响应。下面我简单做个客户端的请求供测试用。就不解释了只列出步骤创建一个工程% dotnet new console -o democlient
修改Program.csstatic async Task Main(string[] args)
{UdpClient udpClient new UdpClient();for (int i 0; i 10000; i){byte[] buffer new byte[8 * 1024];await Task.Run(() {udpClient.SendAsync(buffer, buffer.Length, new IPEndPoint(IPAddress.Parse(127.0.0.1), 8000));});}while (true){UdpReceiveResult udpReceiveResult await udpClient.ReceiveAsync();string message Encoding.UTF8.GetString(udpReceiveResult.Buffer);Console.WriteLine(${udpReceiveResult.RemoteEndPoint.ToString()} - {message});}Console.ReadKey();
}
运行一下看看效果。 到这里Service应用开发的工作已经完成。下面是部署。部署Service应用Linux下面部署一个Service应用只有两个步骤1. 创建Service定义Linux下的每个Service都会有个定义文件。这个文件存在于/etc/systemd/system目录下。下面我给出一个简单的Service模板[Unit]
DescriptionDemoProject[Service]
Typenotify
ExecStartdotnet /yourfolder/yourproject.dll[Install]
WantedBymulti-user.target
把这个内容保存为一个文件例如叫demo.service。然后把这个文件复制到/etc/systemd/system下并改为可执行。简单说一下这个文件的一些项Description是服务的名字。不重要启动时你用到的是文件名demo.serviceType服务类型使用Dotnet加载时只能是这种类型。如果把程序编译为自包含程序这个类型可以是simpleExecStart启动程序的命令是全路径的要确保能找得到这个程序。上面例子中dotnet /yourfolder/yourproject.dll是因为dotnet命令是有PATH变量支持的。这个文件的配置项有很多包括定义是否需要自动重启、重启间隔等。如果需要可以去这里查询。2. 启动Service有两种方法。第一种是刷新Service守护% systemctl daemon-reload
刷新守护时守护进程会去/etc/systemd/system目录下寻找新加入的Service文件并启动。第二种是单独启动有一系列命令启动% systemctl start demo.service
停止% systemctl stop demo.service
重启% systemctl restart demo.service
查询状态% systemctl status demo.service
嗯。这就是服务加载和停止了。 注意这种方式加载的Service是完全系统的服务会没有任何输出。如果需要调试一种方式是加文件日志另一种方式是用另一个命令启动% journalctl -u dnsserver.service
当然这种方式只用于调试。正式运行时还应该是上面的方式。 这就是今天的内容希望能帮到大家。感觉有用的话给个三连呗喜欢就来个三连让更多人因你而受益
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89739.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!