Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Note
For ASP.NET in .NET Framework, see Configure an ASP.NET app for Azure App Service. If your ASP.NET Core app runs in a custom Windows or Linux container, see Configure a custom container for Azure App Service.
Приложения ASP.NET Core должны быть опубликованы в Azure App Service в виде скомпилированных бинарных файлов. Средство публикации Visual Studio создает решение, а затем развертывает скомпилированные двоичные файлы напрямую. Модуль развертывания Службы приложений развертывает репозиторий кода сначала, а затем компилирует двоичные файлы.
This guide provides key concepts and instructions for ASP.NET Core developers. Если вы впервые используете службу приложений Azure, сначала следуйте краткому руководству ASP.NET Core и ASP.NET Core с базой данных SQL.
Показать поддерживаемые версии среды выполнения .NET Core
В App Service в Windows экземпляры уже установлены все поддерживаемые версии .NET Core. Чтобы просмотреть доступные для вас версии среды выполнения и пакета SDK для .NET Core, перейдите https://<app-name>.scm.azurewebsites.net/DebugConsole
и выполните следующую команду в консоли на основе браузера:
dotnet --info
Показать версию .NET Core
Чтобы отобразить текущую версию .NET Core, выполните следующую команду в Azure Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Чтобы отобразить все поддерживаемые версии .NET Core, выполните следующую команду в Cloud Shell:
az webapp list-runtimes --os linux | grep DOTNET
Set .NET Core version
Установите целевую платформу в файл проекта для вашего проекта ASP.NET Core. Дополнительные сведения см. в разделе "Выбор используемой версии .NET Core".
Чтобы задать версию .NET Core 8.0, выполните следующую команду в Cloud Shell:
az webapp config set --name <app-name> --resource-group <resource-group-name> --linux-fx-version "DOTNETCORE|8.0"
Customize build automation
При развертывании приложения с помощью пакетов Git или ZIP с включенной автоматизацией сборки служба приложений следует следующей последовательности:
- Выполнить пользовательский скрипт, если это указано
PRE_BUILD_SCRIPT_PATH
. - Чтобы восстановить зависимости NuGet, выполните команду
dotnet restore
. - Чтобы создать двоичный файл для рабочей среды, выполните команду
dotnet publish
. - Выполните пользовательский сценарий, если он указан
POST_BUILD_SCRIPT_PATH
.
PRE_BUILD_COMMAND
и POST_BUILD_COMMAND
— это системные переменные, которые по умолчанию пусты. Для выполнения команд предварительной сборки определите PRE_BUILD_COMMAND
. Чтобы выполнить команды после сборки, определите POST_BUILD_COMMAND
.
The following example specifies the two variables to a series of commands, separated by commas.
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PRE_BUILD_COMMAND="echo foo, scripts/prebuild.sh"
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings POST_BUILD_COMMAND="echo foo, scripts/postbuild.sh"
Другие переменные среды, которые можно использовать для настройки автоматизации сборки, см. в разделе "Конфигурация Oryx".
For more information on how App Service runs and builds ASP.NET Core apps in Linux, see Oryx documentation: How .NET Core apps are detected and built.
Доступ к переменным среды
В службе приложений можно задать параметры приложения за пределами кода приложения. Затем вы можете получить доступ к ним в любом классе с помощью стандартного шаблона внедрения зависимостей core ASP.NET:
using Microsoft.Extensions.Configuration;
namespace SomeNamespace
{
public class SomeClass
{
private IConfiguration _configuration;
public SomeClass(IConfiguration configuration)
{
_configuration = configuration;
}
public SomeMethod()
{
// retrieve nested App Service app setting
var myHierarchicalConfig = _configuration["My:Hierarchical:Config:Data"];
// retrieve App Service connection string
var myConnString = _configuration.GetConnectionString("MyDbConnection");
}
}
}
Если настроить параметр приложения с тем же именем в Службе приложений и в appsettings.json
, например, значение службы приложений имеет приоритет над значением appsettings.json
. Используя локальное appsettings.json
значение, можно локально отлаживать приложение, но с помощью значения службы приложений можно запустить приложение в рабочей среде с параметрами рабочей среды. Строки подключения работают так же. Используя этот метод, вы можете хранить секреты приложения за пределами репозитория кода и получать доступ к соответствующим значениям, не изменяя код.
Примечание
Кроме того, можно рассмотреть более безопасные параметры подключения, которые не требуют секретов подключения. For more information, see Secure connectivity to Azure services and databases from Azure App Service.
Доступ к данным иерархической конфигурации в appsettings.json
осуществляется с использованием __
разделителя двойного подчеркивания, стандартного для Linux на .NET Core. To override a specific hierarchical configuration setting in App Service, set the app setting name with the same delimited format in the key. В Cloud Shell можно выполнить следующий пример:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My__Hierarchical__Config__Data="some value"
Данные иерархической конфигурации в appsettings.json
доступны с использованием разделителя :
, стандартного для .NET Core. Чтобы переопределить конкретные настройки иерархической конфигурации в App Service, установите имя настройки приложения в ключе с тем же разделённым форматом. Вы можете выполнить следующий пример в Azure Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My:Hierarchical:Config:Data="some value"
Развертывать многопроектные решения
Если решение Visual Studio включает несколько проектов, процесс публикации Visual Studio автоматически выбирает проект для развертывания. При развертывании на механизм развертывания службы приложений, например с помощью Git или через ZIP-развертывание с включенной автоматизацией сборки, механизм развертывания службы приложений выбирает первый веб-сайт или проект веб-приложения, который он находит, в качестве приложения службы приложений. Вы можете указать, какой проект должен использовать App Service, задав настройку приложения PROJECT
. Например, выполните следующую команду в Cloud Shell:
az webapp config appsettings set --resource-group <resource-group-name> --name <app-name> --settings PROJECT="<project-name>/<project-name>.csproj"
Доступ к диагностическим журналам
ASP.NET Core предлагает встроенный поставщик ведения журнала для службы приложений. В файле проекта program.cs
добавьте поставщика в приложение с помощью ConfigureLogging
метода расширения, как показано в следующем примере:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddAzureWebAppDiagnostics();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Затем вы можете настроить и создать журналы с стандартным шаблоном .NET Core.
Чтобы получить доступ к журналам консоли, созданным из кода приложения в Службе Приложений, включите ведение журнала диагностики, выполнив следующую команду в Cloud Shell:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Возможные значения для --level
: Error
, Warning
, Info
и Verbose
. Каждый последующий уровень включает предыдущий уровень. Например, Error
включает только сообщения об ошибках.
Verbose
включает все сообщения.
После включения ведения журнала диагностики выполните следующую команду, чтобы просмотреть поток журналов:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Если журналы консоли не отображаются немедленно, повторите попытку через 30 секунд.
Note
You can also inspect the log files from the browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker
. Для недавно созданных приложений используйте https://<app-name>-<random-hash>.scm.<region>.azurewebsites.net/
.
Чтобы прекратить потоковую передачу журнала в любое время, нажмите Ctrl+C.
Дополнительные сведения об устранении неполадок приложений ASP.NET Core в Службе приложений см. в статье Устранение неполадок ASP.NET Core в Службе приложений Azure и IIS.
Доступ к подробной странице исключений
Когда приложение ASP.NET Core создает исключение в отладчике Visual Studio, браузер отображает подробную страницу исключений, но на этой странице в службе приложений заменяется универсальный протокол HTTP 500 или "Ошибка при обработке запроса". Чтобы отобразить подробную страницу исключений в Службе приложений, добавьте ASPNETCORE_ENVIRONMENT
параметр приложения в приложение, выполнив следующую команду в Cloud Shell.
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings ASPNETCORE_ENVIRONMENT="Development"
Обнаружить HTTPS-сеанс
В службе App Service терминация TLS/SSL происходит на сетевых балансировщиках нагрузки, поэтому все запросы HTTPS достигают вашего приложения в виде незашифрованных HTTP-запросов. Если логика вашего приложения должна знать, зашифрованы ли запросы пользователей, настройте миддлвар перенаправленных заголовков в Startup.cs
.
- Настройте промежуточное ПО с
ForwardedHeadersOptions
для пересылки заголовковX-Forwarded-For
иX-Forwarded-Proto
вStartup.ConfigureServices
. - Добавьте диапазоны частных IP-адресов в известные сети, чтобы серверное ПО могло доверять балансировщику нагрузки службы приложений.
- Вызовите метод
UseForwardedHeaders
вStartup.Configure
перед вызовом другого промежуточного ПО.
При сборке трех элементов код выглядит следующим образом:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
// These three subnets encapsulate the applicable Azure subnets. At the moment, it's not possible to narrow it down further.
options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:10.0.0.0"), 104));
options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:192.168.0.0"), 112));
options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:172.16.0.0"), 108));
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseForwardedHeaders();
...
app.UseMvc();
}
Для получения дополнительной информации см. Настройка ASP.NET Core для работы с прокси-серверами и балансировщиками нагрузки.
Переписать или перенаправить URL
Чтобы перезаписать или перенаправить URL-адрес, используйте ПО промежуточного слоя перезаписи URL-адресов в ASP.NET Core.
Открыть SSH-сессию в браузере
Чтобы открыть прямой сеанс SSH с контейнером, ваше приложение должно быть запущено.
Вставьте следующий URL-адрес в браузер и замените <имя> приложения именем приложения:
https://<app-name>.scm.azurewebsites.net/webssh/host
Если вы еще не прошли аутентификацию, вам необходимо пройти аутентификацию с вашей подпиской Azure, чтобы подключиться. После аутентификации вы увидите оболочку в браузере, где вы можете выполнять команды внутри вашего контейнера.
Примечание
Все изменения, внесенные за пределами /home
каталога, хранятся в самом контейнере и не сохраняются после перезапуска приложения.
Чтобы открыть удалённую SSH-сессию с вашей локальной машины, см. Открыть SSH-сессию из удалённой оболочки.
Ignore the robots933456 message in logs
В журналах контейнеров может появиться следующее сообщение:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Вы можете спокойно игнорировать это сообщение.
/robots933456.txt
является фиктивным путем URL, который служба приложений использует для проверки, способен ли контейнер обрабатывать запросы. Ответ 404 указывает, что путь не существует, и он сигнализирует службе приложений о том, что контейнер работоспособен и готов реагировать на запросы.