【问题标题】:Deploying a plain ASP.NET Core 2.2 Web App in Azure using Web Deploy is throwing an error使用 Web Deploy 在 Azure 中部署普通的 ASP.NET Core 2.2 Web 应用程序会引发错误
【发布时间】:2019-05-12 18:58:30
【问题描述】:

我通过 Visual Studio 2017 中的 Publish 屏幕使用 Azure 发布了一个 ASP.NET Core Web 应用程序。我使用了所有默认值,尽管我的应用程序使用迁移,所以我不得不告诉它在发布配置文件中运行它们。

但是,当我尝试访问该站点时,我得到:

由于发生内部服务器错误,页面无法显示。

我觉得我需要处理连接字符串和ASPNETCORE_ENVIRONMENT 变量。

我仍然拥有您在创建新的 ASP.NET Core Web 应用程序时获得的默认 appsettings.jsonappsettings.Development.jsonappsettings.json 指向我的本地开发数据库,​​appsettings.Development.json 指向发布配置文件中的 Azure 数据库。

或者发布配置文件会自动处理连接字符串,而我不必执行上述任何操作?

【问题讨论】:

    标签: c# azure asp.net-core azure-web-app-service azure-deployment


    【解决方案1】:

    默认情况下,ASP.NET Core 2.2 应用配置为使用新的进程内托管模型。直到 2018 年 12 月的某个时候,它才会在所有区域的 Azure 上提供。他们提到它here

    目前的解决方案是在 Web 应用的 .csproj 文件顶部添加以下内容:

      <PropertyGroup>
        <AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
        <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
      </PropertyGroup>
    

    【讨论】:

    • 谢谢,这个答案对我有帮助。
    【解决方案2】:

    您可以在服务的Application settings 部分检查和设置您的应用设置和连接字符串:

    【讨论】:

    • 我注意到了这一点。我想知道这可能是我错误的原因。但是在这个docs.microsoft.com/en-us/aspnet/core/tutorials/… 中,他们不对环境变量做任何事情,所以我假设发布配置文件会处理它。知道如何解决错误吗?现在还有日志吗?创建数据库是如此奇怪,架构也是如此,但我在 program.cs 中的种子函数不能运行或出错,因为没有数据。
    • 有一个log stream 可以读取应用程序日志,但应先启用它。您也可以尝试在Application Settings 中启用Remote Debugging 并使用您的VS 进行调试。
    • 启用日志:docs.microsoft.com/en-us/azure/app-service/… 您还可以在文档的下一部分找到位置。
    • 通过日志记录我发现了我的错误:处理程序“aspNetCore”的模块列表中有一个错误的模块“AspNetCoreModuleV2”。我认为它与: InProcess in .net core 2.2 有关
    【解决方案3】:

    一个简单的解决方案是将 azure-db 连接字符串放入 appsettings.json 而不是 appsettings.Development.json

    在 VS2017 中运行默认生成的 asp.net 核心应用程序时,您可以在 Properties 文件夹中找到 launchSettings.Json 文件,其中包含将在本地运行的配置文件。 在配置文件部分下,您可以看到 ASPNETCORE_ENVIRONMENT 属性设置为 Development

    "WebApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
    

    这意味着如果您在 appsettings.Development.json 中定义本地数据库连接字符串,它将在本地运行时使用其连接字符串。

    如果您未定义 ASPNETCORE_ENVIRONMENT 属性,则运行时将仅使用 appsettings.json 值(运行时会将 ASPNETCORE_ENVIRONMENT 设置为 Production 作为默认值,但如果您没有定义了任何appsettings.Production.json,那么只会使用appSettings.json 中的值)。

    因此,在运行 Azure Web App 时,如果将 azure-db 连接字符串放在 appsettings.json 中,则根本不需要指定 ASPNETCORE_ENVIRONMENT

    【讨论】:

    • 好的,我试试这个。但是,我有点好奇为什么在简单的教程中:docs.microsoft.com/en-us/aspnet/core/tutorials/… 他们根本不使用连接字符串。实际上,我只是一步一步地按照教程使用了一个全新的应用程序,唯一不同的是更改 DefaultConnection 以指向我的本地 sql server 实例,而不是默认的 LocalDb。我发布到 Azure 仍然是同样的错误。
    • 我按照你说的做了,并从发布配置文件中取出了天蓝色的连接字符串,并将其放入 appsettings.json 并重新部署。仍然出现:由于发生内部服务器错误,无法显示页面。
    • 启用日志记录后,我发现我的错误:处理程序“aspNetCore”的模块列表中有一个错误模块“AspNetCoreModuleV2”。我认为这与 .net core 2.2 中的 InProcess 有关
    • @BlakeRivell 看起来像个bug github.com/aspnet/Templating/issues/837,你有最新的asp.net core sdk 吗?升级VS并尝试重做步骤
    • @BlakeRivell 如果您检查 .net core 2.2 版本,“Azure 应用服务中的可用性”部分blogs.msdn.microsoft.com/webdev/2018/12/04/…。看起来您可以从 web.config 中删除 AspNetCoreHostingModel 标记。您可以通过编辑荣誉来手动完成。输入 yoursite.scm.azurewebsites.net 进入,然后进入根目录并编辑 web 配置文件
    【解决方案4】:

    我将 AspNet Core 3.0 网站部署到 Azure 并收到 HTTP 500 服务器错误。

    这是在 web.config 中:

    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\BedtimeWeb.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
    </system.webServer>
    

    我将 AspNetCoreModuleV2 更改为 AspNetCoreModule,然后错误变为 HTTP 502.3。

    然后我删除了 hostingModel="InProcess" 属性,然后网站开始正常运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多