Übergabe von Argumenten an einen Worker-Dienst aus einer anderen AnwendungC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Übergabe von Argumenten an einen Worker-Dienst aus einer anderen Anwendung

Post by Anonymous »

Ich habe derzeit einen Arbeitsdienst eingerichtet, der vorerst nur protokolliert. Ich habe eine andere Anwendung, bei der ich den Worker-Dienst starten und stoppen möchte, während diese Anwendung gestartet und gestoppt wird. Ich glaube also, dass ich in der ersten Anwendung die Worker-Service-Anwendung mit den hier gezeigten Argumenten aufrufen kann:

Code: Select all

 using (ServiceController servcontol = new ServiceController("Worker Service"))
{
string[] args = new string[2];
args[0] = "info1";
args[1] = "info2";
servcontol.Start(args);
}
Diese Anwendung würde also sicher verschlüsselte Daten entgegennehmen, entschlüsseln und als Argumente an den Worker-Dienst übergeben. Was ich nicht herausfinden kann, ist, wo und wie ich im Worker-Service auf diese Argumente zugreife. Ich weiß, dass ich der Datei appsetting.json Daten hinzufügen könnte, aber idealerweise möchte ich, dass dynamische Daten von der ersten Anwendung übergeben werden, damit die übergebenen Informationen sicherer bleiben.
Mein Worker-Dienst enthält die Dateien program.cs und worker.cs, wie hier gezeigt – program.cs:

Code: Select all

using Microsoft.Extensions.Logging.Configuration;
using Microsoft.Extensions.Logging.EventLog;
using Serilog;
using System.ServiceProcess;

var builder = Host.CreateApplicationBuilder(args);

builder.Services.AddWindowsService(options =>
{
options.ServiceName = "My Worker Service";
});

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft",   Serilog.Events.LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.File(@"C:\Temp\Workerservice\Logfile.txt")
.CreateLogger();

try
{
Log.Information("Starting Service");
builder.Services.AddHostedService();

var host = builder.Build();
host.Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Issue starting service");
return;
}
finally
{
Log.CloseAndFlush();  // log anything in buffer before closing.
}

Code: Select all

worker.cs
sieht so aus:

Code: Select all

 using Serilog;

namespace My_WorkerService_V1
{
public class Worker : BackgroundService
{
private readonly ILogger _logger;

public Worker(ILogger logger)
{
_logger = logger;
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
if (_logger.IsEnabled(LogLevel.Information))
{
_logger.LogInformation("WS running at: {time}", DateTimeOffset.Now);
}

// 20/10/25 basically SFTP code in here..

await Task.Delay(1000, stoppingToken);
}
}

public override Task StartAsync(CancellationToken cancellationToken)
{
return base.StartAsync(cancellationToken);
}

public override Task StopAsync(CancellationToken cancellationToken)
{
return base.StopAsync(cancellationToken);
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post