web-dev-qa-db-ja.com

Web Deployを使用してAzureにプレーンなASP.NET Core 2.2 Webアプリをデプロイするとエラーがスローされます

Visual Studio 2017の発行画面からAzureを使用してasp.netコアWebアプリケーションを発行しました。デフォルトをすべて使用しましたが、アプリは移行を使用するため、発行プロファイルで実行するように指示する必要がありました。

サイトにアクセスしようとすると、次のようになります:
内部サーバーエラーが発生したため、ページを表示できません。

接続文字列とASPNETCORE_ENVIRONMENT変数を使用して必要なことがあるように感じます。

新しいasp.netコアWebアプリを作成するときに取得するデフォルトのappsettings.jsonとappsettings.Development.jsonがまだあります。 appsettings.jsonはローカル開発データベースを指し、appsettings.Development.jsonは発行プロファイルのAzure dbを指します。

または、パブリッシュプロファイルが接続文字列を自動的に処理し、上記のいずれも実行する必要はありませんか?

9
Blake Rivell

既定では、ASP.NET Core 2.2アプリは新しいインプロセスホスティングモデルを使用するように構成されています。これは、2018年12月のいずれかの時点まで、すべてのリージョンのAzureで利用できません。彼らはそれについて言及しています here

現時点での解決策は、Webアプリの.csprojファイルの先頭に次を追加することです。

  <PropertyGroup>
    <AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
    <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
  </PropertyGroup>
22
Blake Rivell

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でローカルdb接続文字列を定義すると、ローカルで実行するときにその接続文字列を使用することを意味します。

ASPNETCORE_ENVIRONMENTプロパティを定義しない場合、ランタイムはappsettings.jsonの値のみを使用します(ランタイムはASPNETCORE_ENVIRONMENTをデフォルトとしてProductionに設定しますが、そうしない場合) appsettings.Production.jsonが定義されている場合、appSettings.jsonの値のみが使用されます)。

したがって、Azure Webアプリを実行するときに、Azure-db接続文字列をASPNETCORE_ENVIRONMENTに配置する場合、appsettings.jsonを指定する必要はまったくありません。

1
Marcus Höglund

アプリの設定と接続文字列を確認して設定するには、Application settingsサービスのセクション:

enter image description here

1
Michael

AspNet Core 3.0 Webサイトを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>

AspNetCoreModuleV2AspNetCoreModuleに変更すると、エラーがHTTP 502.3になりました。

その後、hostingModel = "InProcess"属性を削除すると、Webサイトが正常に機能し始めました。

0
GarDavis