如何运行ASP NET 6.0 C#程序(带Angular )作为服务?(Windows 10)

ikfrs5lh  于 2023-02-10  发布在  .NET
关注(0)|答案(1)|浏览(157)

所以我在网上找到了很多将C#程序作为服务运行的教程,但是我一直找不到一个专门面向web gui和后端服务器组件的asp net框架。在我的例子中,前端是有Angular 的,尽管这可能并不重要。我的程序有一个从asp net C#编译的. exe,当运行时,启动后端服务器。它等待来自端口5000和5001上的前端web gui的调用。但是,我无法将此. exe转换为工作的服务(通过powershell命令,如sc.exe中的命令)。我可以创建该服务,但我永远无法启动它。我相信我的program.cs中缺少一些关于服务的内容:

IHost host = Host.CreateDefaultBuilder(args)
    .UseWindowsService(options =>
    {
        options.ServiceName = "DebugGui";
    })
    .Build();

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();

var app = builder.Build();

if (!app.Environment.IsDevelopment()) {
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();

app.Urls.Add("http://0.0.0.0:5000");
app.Urls.Add("http://0.0.0.0:5001");

app.MapControllerRoute(
    name: "default",
    pattern: "{controller}/{action=Index}/{id?}");

app.MapFallbackToFile("index.html"); ;

app.Run();
    • 正如你所看到的,我从一个服务教程中引入的host对象没有被使用,因为我不知道如何使用它**。另外,我觉得使用app.run()不是正确的方法,因为它强制弹出一个命令行界面并通过那里运行程序,而服务不会有这样的东西(至少对用户不可见)。

我已经看过/试过的教程;它们很有帮助,但对我的情况来说不够具体,因为它们没有包含Web部分(var builder = WebApplication.CreateBuilder(args););我基本上是想弄清楚如何添加web部分。https://learn.microsoft.com/en-us/dotnet/core/extensions/windows-servicehttps://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-7.0&tabs=visual-studiohttps://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-7.0&tabs=visual-studio(这个确实有web部分,但当我按照教程操作时,我在尝试启动服务时收到一个错误,说它未能及时启动。我在兔子洞里研究这个问题,但没有找到解决方案)。
任何帮助都将不胜感激。

k97glaaz

k97glaaz1#

所以我知道回答你自己的问题很奇怪,但我找到了解决方案,并想把它写下来,以防其他人有这个问题,并发现这篇文章。
原来我的代码已经基本正确了,而我遇到的问题是别的(虽然仍然不确定是什么)。

using Microsoft.Extensions.Hosting.WindowsServices;

var options = new WebApplicationOptions
{
    Args = args,
    ContentRootPath = WindowsServiceHelpers.IsWindowsService() ? AppContext.BaseDirectory : default
};

var builder = WebApplication.CreateBuilder(options);

builder.Host.UseWindowsService(options => { options.ServiceName = "DebugGui"; });

builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();

app.Urls.Add("http://0.0.0.0:5000");
app.Urls.Add("http://0.0.0.0:5001");

app.MapControllerRoute(
    name: "default",
    pattern: "{controller}/{action=Index}/{id?}");

app.MapFallbackToFile("index.html"); ;

app.Run();

我必须做的另一件事是在visual studio 2022而不是2019中重新创建asp net 6.0模板项目.这似乎解决了服务启动然后立即停止或超时的问题.我仍然不知道所有细节,尽管从非代码的Angular 来看,为什么事情最初不能正常工作(我对服务本身有很多问题),但我只是想发布适合我的东西。

相关问题