使用Web Deploy在Azure中部署普通的ASP.NET Core 2.2 Web App会引发错误

时间:2018-12-11 18:11:26

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

我去通过Visual Studio 2017中的“发布”屏幕使用Azure发布asp.net核心Web应用程序。我使用了所有默认值,但是我的应用程序使用迁移功能,因此我不得不告诉它在发布配置文件中运行它们

当我尝试访问该网站时,我得到:
由于发生内部服务器错误,因此无法显示该页面。

我觉得我需要对连接字符串和ASPNETCORE_ENVIRONMENT变量进行一些操作。

我仍然拥有在创建新的asp.net核心Web应用程序时获得的默认appsettings.json和appsettings.Development.json。 appsettings.json指向我的本地开发数据库,​​而appsettings.Development.json则指向发布配置文件中的azure数据库。

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

4 个答案:

答案 0 :(得分:21)

默认情况下,ASP.NET Core 2.2应用程序配置为使用新的In Process托管模型。直到2018年12月某个时候,该功能才在所有地区的Azure上提供。他们提到了here

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

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

答案 1 :(得分:1)

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

enter image description here

答案 2 :(得分:1)

一种简单的解决方案是将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连接字符串放在ASPNETCORE_ENVIRONMENT中,则根本不需要指定appsettings.json

答案 3 :(得分:0)

我将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” 属性,然后该网站开始正常运行。