我目前有一个dotnet5.0工作者服务项目,它托管一个后台服务,定期执行一个业务流程。我设法摸索着在一个房间里安排了一个主人
CreateHostBuilder
方法,并且作为docker容器中的可执行文件,这一切都运行良好。
ConfigureServices
方法绑定到在我指定的端口上的ASPNET razor项目中定义的类,但在多次尝试之后,我有点纠结于如何开始处理这个问题,更不用说让它实际工作了:-(。
我的工人.csproj
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="4.0.0-dev-00051" />
<PackageReference Include="Serilog.Formatting.Compact" Version="1.1.1-dev-00940" />
<PackageReference Include="Serilog.Sinks.Console" Version="4.0.0-dev-00839" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MyAppCode\MyAppCode.csproj" />
</ItemGroup>
</Project>
和一个
程序.cs
看起来是这样的:
public static void Main(string[] args)
{
Program.InitSerilog();
Program.CreateHostBuilder(args).Build().Run();
}
public static void InitSerilog()
{
... do stuff ...
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
return new HostBuilder()
// worker service config
.ConfigureLogging((context, builder) =>
{
builder.SetMinimumLevel(LogLevel.Trace);
})
.ConfigureServices(services =>
{
services.AddHostedService<MyAppService>();
services.AddSingleton<AppSettings>(
serviceProvider => { return Program.CreateAppSettings(); }
);
})
.UseSerilog();
}
private static AppSettings CreateAppSettings()
{
... bind to environment variables and return ...
}
}
public sealed class MyAppService: BackgroundService
{
public MyAppService(ILogger<MyAppService> logger, AppSettings appSettings)
: base()
{
... do stuff ...
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
... keep doing the main business process in a timed loop ...
}
#endregion
}
我找到了很多示例,说明如何将辅助服务添加到现有的ASPNET项目,或者如何将ASPNET项目作为Windows服务宿主,但没有找到任何关于如何将ASPNET站点侦听器添加到现有辅助服务的示例。
喜欢
我们要做的就是在一个新的c#项目中构建WebUI/api,并以某种方式将其插入现有的c#项目中程序.cs所以它在主后台服务运行时监听指定的端口,但也许我只是走错路了?
CreateHostBuilder
方法,所以请随时告诉我将其恢复为默认值,如果这是一个简单的答案:-)。
感谢您的帮助/指点。。。