【发布时间】:2020-01-24 06:41:57
【问题描述】:
我创建了一个工作服务并作为 Windows 服务托管在服务器中,但这 Windows 服务无法读取服务注入。 如果我直接执行exe,那么这很好用。我尝试从本地服务帐户和管理员帐户运行服务 - 找不到任何差异
这就是我的 Program.cs 的样子
public class Program
{
public static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
builder.Build();
CreateHostBuilder(args).Build().Run();
}
private static void ConfigureLog(IConfiguration configuration)
{
const string loggerTemplate = @"{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u4}]<{ThreadId}> [{SourceContext:l}] {Message:lj}{NewLine}{Exception}";
var baseDir = AppDomain.CurrentDomain.BaseDirectory;
var logfile = Path.Combine(baseDir, "App_Data", "logs", "EmployeePositionsFeed.log");
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.Enrich.With(new ThreadIdEnricher())
.Enrich.FromLogContext()
.WriteTo.File(logfile, LogEventLevel.Information, loggerTemplate,
rollingInterval: RollingInterval.Day, retainedFileCountLimit: 90)
.CreateLogger();
Log.Information("App starting");
}
public static IConfiguration LoadConfiguration()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true,
reloadOnChange: true);
return builder.Build();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((services) =>
{
IConfiguration configuration = LoadConfiguration();
ConfigureLog(configuration);
services.AddSingleton(configuration);
var winScpSettings = new WinScpSettings();
configuration.GetSection("WinScpSettings").Bind(winScpSettings);
services.AddSingleton(winScpSettings);
services.AddHostedService<Worker>();
});
}
public class Worker : BackgroundService
{
private readonly IConfiguration _configuration;
private readonly WinScpSettings _winScpSettings;
public Worker(IConfiguration conf, WinScpSettings wscpSettings)
{
_configuration = conf;
_winScpSettings = wscpSettings;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
Log.Information("TransferWorkerService heart beat running at: {time}", DateTimeOffset.Now);
Log.Information("TransferWorkerService starting at: {time}", DateTimeOffset.Now);
Log.Information(_winScpSettings.HostName); //this will come as blank from windows service
Log.Information(_winScpSettings.SshHostKeyFingerprint);//this will come as blank from windows service
await new App(_configuration, _winScpSettings).Run();
Log.Information("TransferWorkerService ended execution at: {time}", DateTimeOffset.Now);
await Task.Delay(TimeSpan.FromDays(1), stoppingToken);
}
}
【问题讨论】:
标签: .net-core