zoukankan      html  css  js  c++  java
  • Dotnet Core Windows Service

    在dotnet 中有topshelf 可以很方便的写windows 服务并且安装也是很方便的,命令行 运行.exe install 就直接把exe 程序安装成windows 服务。当然

    代码也要做相应的修改,具体的可以参照例子。

    在dotnet core 2.0 中 我们也有一个很方便的dll 来试用 

    https://github.com/PeterKottas/DotNetCore.WindowsService

    通过Nuget来安装 Using nuget: Install-Package PeterKottas.DotNetCore.WindowsService

    方便多个服务我们先定义一个接口

    public interface IBaseService
    {
    void Start();
    void Stop();
    }

    具体的实现呢 我举个例子,在例子中我们试用了个Timer,定时的完成某些任务,这样 我们就可以同时写好几个service 只要继续 IBaseService 就行,也比较方面安装

    public class SyncService : IBaseService
    {
    private readonly System.Timers.Timer _timer;
    private readonly ILogger logger;
    public SyncService( ILoggerFactory loggerFactory)
    {

    _timer = new System.Timers.Timer(10000);
    _timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

    _timer.Interval = 2000;

    _timer.AutoReset = true;
    _timer.Enabled = false;
    logger = loggerFactory.CreateLogger<SyncService>();
    }


    private void OnTimedEvent(object source, ElapsedEventArgs e)
    {
    Console.WriteLine(string.Format("SyncService:{0:yyyy-MM-dd HH:mm:sss}", DateTime.Now));
    _timer.Enabled = false;

    try
    {
    //do some job;
    }
    catch (Exception ex)
    {
    logger.LogError("SyncService Error {0}:", ex.Message);
    }
    Console.WriteLine(string.Format("SyncService:{0:yyyy-MM-dd HH:mm:sss}", DateTime.Now));

    Thread.Sleep(5 * 60 * 1000);

    _timer.Enabled = true;

    }
    private async Task<HttpResponseMessage> SyncData()
    {
    string url = configModel.DatabaseIncrementUrl;
    var httpClient = new HttpClient();
    return await httpClient.GetAsync(url);
    }


    public void Start()
    {
    _timer.Start();
    _timer.Enabled = true;
    }
    public void Stop()
    {
    _timer.Stop();
    _timer.Enabled = false;
    }
    }

    class Program
    {
    static void Main(string[] args)
    {

    IConfigurationRoot Configuration;
    // ILoggerFactory LoggerFactory;

    var builder = new ConfigurationBuilder()
    .SetBasePath(Path.Combine(AppContext.BaseDirectory))
    .AddJsonFile("appsettings.json")
    .AddEnvironmentVariables();

    Configuration = builder.Build();

    var services = new ServiceCollection();

    services.AddOptions();
    services.Configure<ConfigModel>(Configuration.GetSection("ConfigSetting"));
    services.AddSingleton<IConfiguration>(Configuration);

    services.AddTransient<ILoggerFactory, LoggerFactory>();

    services.AddTransient<IBaseService, SyncService>();
    services.AddTransient<IBaseService, CreateDBService>();
    services.AddTransient<IBaseService, OnLineOrderService>();

    var serviceProvider = services.BuildServiceProvider();

    ServiceRunner<ServiceFactory>.Run(config =>
    {
    var name = config.GetDefaultName();
    config.Service(serviceConfig =>
    {
    serviceConfig.ServiceFactory((extraArguments, controller) =>
    {
    return new ServiceFactory(serviceProvider.GetService<IEnumerable<IBaseService>>(), controller);
    });
    serviceConfig.OnStart((service, extraArguments) =>
    {
    Console.WriteLine("Service {0} started", name);
    service.Start();
    });

    serviceConfig.OnStop(service =>
    {
    Console.WriteLine("Service {0} stopped", name);
    service.Stop();
    });

    serviceConfig.OnError(e =>
    {
    Console.WriteLine("Service {0} errored with exception : {1}", name, e.Message);
    });
    });

    config.SetName("SAASService");
    config.SetDescription("SAAS Service For All Saas Client");
    config.SetDisplayName("SAAS Service");
    });
    }
    }

  • 相关阅读:
    navicat 连接 mysql 出现Client does not support authentication protocol requested by server解决方案
    oracle的concat、convert、listagg函数(字符串拼接和类型转换)
    oracle的decode、sign、nvl,case...then函数
    where、having区别
    Oracle的rollup、cube、grouping sets函数
    IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解,DNS域名设计
    springmvc 参数解析绑定原理
    eclipse运行mapreduce的wordcount
    linux命令帮助 man bash
    shell学习笔记3-后台执行命令
  • 原文地址:https://www.cnblogs.com/jfliuyun/p/8242945.html
Copyright © 2011-2022 走看看