gpt4 book ai didi

c# - ASP.NET Core 2.0 Web 应用部署和托管

转载 作者:行者123 更新时间:2023-12-02 13:35:34 26 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

3年前关闭。




Improve this question




环境

我的本地开发环境是使用 Visual Studio 2017 的 Windows 10 PC。

注意:目前我只能通过 cpanel 访问我的网络服务器。但是,如果托管提供商无法为 ASP.NET Core 2.0 应用程序提供足够的支持,那么我将考虑更改为专用服务器,在那里我可以完全访问服务器和 IIS。

我的需求/项目

我一直在开发面向 .NET Core 2.0 框架的 ASP.NET Web 应用程序,并且该应用程序在 localhost 和 IIS express 上运行良好。

现在应用程序已经完成,我需要部署和托管,这感觉像是一项艰巨的任务,会在几天和几周内使我的年龄增加几年。

我读过有关用户浏览大量文章、博客、MS 文档、stackoverflow 等尝试(通常不成功)在 Intranet 和 Internet 上进行部署的情况。现在我觉得用 .net core 发布和部署似乎是一大堆困惑。

我当前的网站是由第三方开发的 - 一个使用 PHP 的 Wordpress 网站。我想用我的 ASP.NET Core2.0 Web 应用程序替换这个站点。

我当前站点的根目录是“httpdocs”,其中有一些子文件夹,其中包含需要从其他应用程序中引用的图像文件。我不确定这些是否可以保持原样,或者我是否需要将它们迁移到 ASP.NET Web 应用程序所在的新文件夹。
我无法直接访问服务器,只能通过 cpanel 访问。

该应用程序需要 https,下面我已经包含了我的 Startup.cs 和 Program.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)
{
try
{
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
options.ExpireTimeSpan = new TimeSpan(90, 0, 0, 0);
options.LoginPath = new PathString("/Home/Index/");
options.AccessDeniedPath = new PathString("/Home/Index/");
options.LogoutPath = new PathString("/Home/Index/");
options.Validate();
});

services.AddMvc();
services.AddAntiforgery();
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});
}
catch (Exception ex)
{
gFunc.ProcessError(ex);
}
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline
// I've added a StaticFiles option that aims to make a directory called "SamadhiFiles" publically available
// so that I can use "http://mysite.net.au/samadhifiles/myPic.png
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
try
{
app.UseMvc();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "SamadhiFiles")),
RequestPath = "/SamadhiFiles"
});
app.UseAuthentication();

if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
app.UseStatusCodePages();
}
else
{
app.UseExceptionHandler("/Home/Error");
}

// this code is to enable redirection of http to https
var options = new RewriteOptions().AddRedirectToHttps();
app.UseRewriter(options);

app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
catch (Exception ex)
{
gFunc.ProcessError(ex);
}
}
}

程序.cs
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}

public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseIISIntegration()
.UseKestrel()
.Build();
}

UseIISIntegration() 告诉 ASP.NET IIS 将作为 Kestrel 前面的反向代理工作。这还指定了一些围绕 Kestrel 应该监听的端口、转发 header 和其他详细信息的设置。
UseKestrel() 将 Kestrel 的 IServer 接口(interface)注册为将用于托管应用程序的服务器。

我很确定我是否需要在这里更改任何内容,或者只使用默认选项。

我读过:Microsoft 建议将 IIS 与任何面向公众的站点一起用于 ASP.NET 核心托管。 IIS 提供了额外级别的可配置性、管理、安全性、日志记录和许多其他内容。
使用 IIS 的一大优势是进程管理。 IIS 将自动启动您的应用程序,并可能在发生崩溃时重新启动它。如果您将 ASP.NET Core 应用程序作为 Windows 服务或控制台应用程序运行,那么您将没有安全网来为您启动和监控进程。

launchSettings.json

我需要在发布前更改此文件的内容吗?还是在将应用程序发布到文件夹时会自动更改?
例如,我是否需要将 ENVIRONMENT 更改为“Production”,或者将 applicationUrl 更改为我的网站域?
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "https://localhost:44301/",
"sslPort": 44376
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"CanvasWeb": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:61900/"
}
}
}

web.config(用于 ASP.NET Core)

web.config 文件应该定义 IIS 如何启动我的 ASP.NET Core 进程。例如,我想通过设置 stdoutLogEnabled=true 来启用输出日志记录,并且我可能还想更改在 stdoutLogFile 中配置的日志输出位置。

IIS 配置受适用于反向代理配置的那些 IIS 功能的 web.config 部分的影响。

在我的 ASP.NET Core2 项目中,目前没有“web.config”文件。当我发布我的应用程序时,这个文件会出现吗?

发布到文件夹

从 Visual Studio 部署时,dotnet 发布步骤会在文件复制到部署目标之前自动发生。

发布文件夹包含应用程序的 .exe 和 .dll 文件、其依赖项以及 .NET 运行时(可选)。除了 .exe 和 .dll 文件,ASP.NET Core 应用程序的发布文件夹通常包含配置文件、静态 Assets 和 MVC View 。

.NET Core 应用程序可以发布为独立应用程序或依赖于框架的应用程序。如果应用程序是独立的,则包含 .NET 运行时的 .dll 文件包含在发布文件夹中。如果应用程序依赖于框架,则不包括 .NET 运行时文件,因为该应用程序引用了安装在服务器上的 .NET 版本。

当我在 Windows 服务器上安装 IIS 时,我相信我应该使用默认的部署模型,它依赖于框架。

流程经理

ASP.NET Core 应用程序是一个控制台应用程序,必须在服务器启动时启动,并在崩溃时重新启动。要自动启动和重新启动,需要进程管理器。
我知道我可以在 Linux 上使用 Apache,但在这种情况下,我需要使用 IIS,因为我当前的站点是 Windows 服务器。

设置反向代理

需要反向代理的场景是当您有多个应用程序共享相同的 IP 和端口在单个服务器上运行时。这不能直接与 Kestrel 一起使用,因为 Kestrel 不支持在多个进程之间共享相同的 IP 和端口。当您将 Kestrel 配置为监听端口时,它会处理该端口的所有流量,而不管主机 header 如何。然后,可以共享端口的反向代理必须通过唯一的 IP 和端口转发到 Kestrel。

根据 MS 的说法,使用反向代理服务器还有其他原因。例如,它简化了负载平衡和 SSL 设置。只有您的反向代理服务器需要 SSL 证书,并且该服务器可以使用普通 HTTP 与内部网络上的应用程序服务器进行通信。

安装 .NET Core Windows Server Hosting Bundle

在部署我的应用程序之前,我已经阅读过,我需要在主机上为 IIS 安装 .NET Core 托管包。这将为 IIS 安装 .NET Core 运行时、库和 ASP.NET Core 模块。
安装后,您可能需要执行“net stop was/y”和“net start w3svc”以确保为 IIS 获取所有更改。

我只能通过 cpanel 访问我的网络服务器,所以我认为我的托管服务提供商需要这样做。

SSL 证书

因为我使用的是 https,所以我相信我需要购买 SSL 证书并将其安装在 IIS 中。

IIS 设置 - 在 IIS 中创建应用程序

我只能通过 cpanel 访问我的 Web 服务器,所以我认为这也需要由我的托管服务提供商来完成。
  • 创建一个新的 IIS 应用程序池。您将需要在“无托管代码”的 .NET CLR 版本下创建一个。由于 IIS 仅用作反向代理,因此它实际上并不执行任何 .NET 代码。
  • 在现有 IIS 站点下创建新应用程序,或创建新的 IIS 站点。无论哪种方式,您都需要选择新的 IIS 应用程序池并将其指向您将 ASP.NET 发布输出文件复制到的文件夹。
  • 最佳答案

    我查看了 Nginx,但无法获得所需的支持,而且我的 Linux 经验为零。

    我最终将我的托管更改为新的提供商(在 VPS 上共享托管),但获得良好支持仍然是一场噩梦。

    事实证明,我不必对 做任何更改。 launchSettings.json 文件。

    我的 web.config 文件最终如下:

        <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <system.webServer>
    <handlers>
    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\MyApplication.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
    </configuration>
    <!--ProjectGuid: 4833e7c3-6fb8-4b3c-961f-f026b12af306-->

    我的 .csproj 文件如下:
        <Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
    <PackageReference Include="Aspose.Words" Version="18.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.3" />
    <PackageReference Include="System.ServiceModel.Duplex" Version="4.4.0" />
    <PackageReference Include="System.ServiceModel.Http" Version="4.4.0" />
    <PackageReference Include="System.ServiceModel.NetTcp" Version="4.4.0" />
    <PackageReference Include="System.ServiceModel.Security" Version="4.4.0" />
    </ItemGroup>

    <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.1" />
    </ItemGroup>

    <ItemGroup>
    <WCFMetadata Include="Connected Services" />
    </ItemGroup>

    <ItemGroup>
    <Folder Include="wwwroot\CVFiles\" />
    <Folder Include="wwwroot\icons\" />
    <Folder Include="wwwroot\PictureFiles\" />
    <Folder Include="wwwroot\resources\" />
    </ItemGroup>

    </Project>

    关于c# - ASP.NET Core 2.0 Web 应用部署和托管,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48738123/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com