使用 Web 部署将 ASP.NET Core MVC 发布到 IIS 失败

问题描述

我是第一次将 Web 应用程序发布到 Windows 2019 服务器 (AWS EC2),当我发布一个空项目时它工作正常,但在发布实际项目时失败。它显示“HTTP 错误 503。服务不可用”。错误

我为服务器所做的设置:

  1. 已安装 IIS
  2. 网络部署 3
  3. asp.net 核心托管包 3.1.3
  4. 打开需要的端口,例如:3389、80、443 和 8172

尝试比较两个项目的 startup.cs 文件,但无法找出导致此类错误的原因。

Startup.cs:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();
        services.ConfigureApplicationCookie(options =>
        {
            options.Cookie.Name = ".ExpirationCookie";
            options.Cookie.IsEssential = true;
            options.Cookie.HttpOnly = true;
            options.AccessDeniedpath = "/Identity/Pages/Account/AccessDenied"; 
            options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
            options.SlidingExpiration = true;
            options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
            options.Events = new CookieAuthenticationEvents
            {
                OnValidatePrincipal = ValidateAsync.ValidatingAsync
            };
        })
        .Configure<SecurityStampValidatorOptions>(options =>
        {
            options.ValidationInterval = TimeSpan.FromMinutes(0);
        });
        services.AddDbContext<ApplicationDbContext>(options =>
          options.UsesqlServer(
              Configuration.GetConnectionString("DefaultConnection")));
        services.AddIdentity<IdentityUser,IdentityRole>(options => {
            options.SignIn.RequireConfirmedAccount = false;
        })
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders(); 
        services.AddIdentityCore<ApplicationUser>()
            .AddRoles<IdentityRole>()
            .AddClaimsPrincipalFactory<UserClaimsPrincipalFactory<ApplicationUser,IdentityRole>>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultUI();
        services.AddSingleton<IEmailSender,EmailSender>();
        services.Configure<EmailOptions>(Configuration);
        services.AddHangfire(config => config.UsesqlServerStorage(Configuration.GetConnectionString("DefaultConnection")));
        services.AddHangfireServer();
        services.AddControllersWithViews(); 
        services.AddRazorPages().AddRazorRuntimeCompilation();
        services.AddScoped<IDbInitializer,DbInitializer>();
        services.AddScoped<IExpirationJob,ExpirationJob>();
        services.AddScoped<IReminderJob,EmailReminder>();
        services.AddSingleton<IActionContextAccessor,ActionContextAccessor>();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app,IWebHostEnvironment env,IRecurringJobManager recurringJobManager,IServiceProvider serviceProvider,IDbInitializer dbInitializer)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios,see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }
        dbInitializer.Initialize();
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseHangfireDashboard();
        app.UseHangfireDashboard("/hangfire",new DashboardOptions()
        {
            Authorization = new[] { new CustomAuthorizefilter() }
        });

        app.UseRouting();
        app.UseAuthentication();
        app.UseAuthorization();
        app.UseCookiePolicy();

        recurringJobManager.AddOrUpdate(
           "End Users Subscription",() => serviceProvider.GetService<IExpirationJob>().SetExpired(),Cron.Daily
           );

        recurringJobManager.AddOrUpdate(
           "Send End of Subscription Reminder",() => serviceProvider.GetService<IReminderJob>().SendReminder(),Cron.Daily
           );

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)