Visual Studio 2017の発行画面からAzureを使用してasp.netコアWebアプリケーションを発行しました。デフォルトをすべて使用しましたが、アプリは移行を使用するため、発行プロファイルで実行するように指示する必要がありました。
サイトにアクセスしようとすると、次のようになります:
内部サーバーエラーが発生したため、ページを表示できません。
接続文字列とASPNETCORE_ENVIRONMENT変数を使用して必要なことがあるように感じます。
新しいasp.netコアWebアプリを作成するときに取得するデフォルトのappsettings.jsonとappsettings.Development.jsonがまだあります。 appsettings.jsonはローカル開発データベースを指し、appsettings.Development.jsonは発行プロファイルのAzure dbを指します。
または、パブリッシュプロファイルが接続文字列を自動的に処理し、上記のいずれも実行する必要はありませんか?
既定では、ASP.NET Core 2.2アプリは新しいインプロセスホスティングモデルを使用するように構成されています。これは、2018年12月のいずれかの時点まで、すべてのリージョンのAzureで利用できません。彼らはそれについて言及しています here 。
現時点での解決策は、Webアプリの.csprojファイルの先頭に次を追加することです。
<PropertyGroup>
<AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>
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
を指定する必要はまったくありません。
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>
AspNetCoreModuleV2をAspNetCoreModuleに変更すると、エラーがHTTP 502.3になりました。
その後、hostingModel = "InProcess"属性を削除すると、Webサイトが正常に機能し始めました。