ASP.NET Core için bir Azure App Service
Not
Bu ASP.NET daha .NET Framework için bkz. ASP.NET için Azure App Service
ASP.NET Core uygulamaların derlenmiş ikili dosyalar Azure App Service uygulamalara dağıtılması gerekir. Visual Studio yayımlama aracı çözümü derler ve ardından derlenmiş ikilileri doğrudan dağıtırken, App Service dağıtım altyapısı önce kod deposunu dağıtır ve ardından ikilileri derler.
Bu kılavuzda geliştiriciler için temel kavramlar ve ASP.NET Core ve yönergeler yer amaktadır. Daha önce Azure App Service, ASP.NET Core öğreticiyi ASP.NET Core hızlı SQL Veritabanı izleyin.
Desteklenen .NET Core çalışma zamanı sürümlerini gösterme
Bu App Service, Windows tüm desteklenen .NET Core sürümleri zaten yüklü. Size kullanılabilir .NET Core çalışma zamanı ve SDK sürümlerini göstermek için tarayıcı tabanlı konsolda aşağıdaki https://<app-name>.scm.azurewebsites.net/DebugConsole komutu çalıştırın:
dotnet --info
.NET Core sürümünü gösterme
Geçerli .NET Core sürümünü göstermek için aşağıdaki komutu Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Desteklenen tüm .NET Core sürümlerini göstermek için aşağıdaki komutu Cloud Shell:
az webapp list-runtimes --linux | grep DOTNET
.NET Core sürümünü ayarlama
Projenizin proje dosyasında hedef çerçeveyi ASP.NET Core ayarlayın. Daha fazla bilgi için .NET Core'da kullanmak üzere .NET Core sürümünü seçme belgelerine bakın.
.NET Core sürümünü 3.1 Cloud Shell için aşağıdaki komutu Cloud Shell çalıştırın:
az webapp config set --name <app-name> --resource-group <resource-group-name> --linux-fx-version "DOTNETCORE|3.1"
Derleme otomasyonunu özelleştirme
Uygulamanızı Git kullanarak dağıtırsanız veya derleme otomasyonu etkin zip paketleriyleApp Service aşağıdaki sırayla derleme otomasyonu adımlarını izleyin:
- tarafından belirtilirse özel betiği
PRE_BUILD_SCRIPT_PATHçalıştırın. - Bağımlılıkları
dotnet restoregeri yüklemek NuGet çalıştırın. - Üretim
dotnet publishiçin ikili dosya oluşturmak için çalıştırın. - tarafından belirtilirse özel betiği
POST_BUILD_SCRIPT_PATHçalıştırın.
PRE_BUILD_COMMAND ve POST_BUILD_COMMAND varsayılan olarak boş olan ortam değişkenleridir. Derleme öncesi komutları çalıştırmak için PRE_BUILD_COMMAND tanımlayın. Derleme sonrası komutları çalıştırmak için POST_BUILD_COMMAND tanımlayın.
Aşağıdaki örnek, virgülle ayrılmış bir dizi komut için iki değişkeni belirtir.
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"
Derleme otomasyonunu özelleştirmek için ek ortam değişkenleri için bkz. Oryx yapılandırması.
Linux'ta App Service çalıştırma ve derleme hakkında daha fazla bilgi ASP.NET Core oryx belgelerine bakın: .NET Coreuygulamaları nasıl algılanır ve nasıl hazırlanır?
Ortam değişkenlerine erişme
App Service'te uygulama kodunuzun dışında uygulama ayarlarını düzenleyebilirsiniz. Daha sonra standart bağımlılık ekleme desenini kullanarak ASP.NET Core erişin:
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");
}
}
}
App Service ve appsettings.json'da aynı adla bir uygulama ayarı yapılandırıyorsanız, App Service değeri appsettings.json değerinden önceliklidir. Yerel appsettings.json değeri uygulamanın yerel olarak hata ayıklamanıza olanak sağlar, ancak App Service değeri üretim ayarlarıyla uygulamayı üretimde çalıştırmanıza olanak sağlar. Bağlantı dizeleri aynı şekilde çalışır. Bu şekilde, uygulama gizli dizilerinizi kod deponun dışında tutabilirsiniz ve kodunuzu değiştirmeden uygun değerlere erişebilirsiniz.
Not
appsettings.json'daki hiyerarşik yapılandırma verilerine .NET Core için standart sınırlayıcı kullanılarak erişilir. : Uygulama ayarında belirli bir hiyerarşik yapılandırma ayarını App Service için, uygulama ayarı adını anahtarda aynı sınırlandırılmış biçimle ayarlayın. aşağıdaki örneği aşağıdaki örnekte Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My:Hierarchical:Config:Data="some value"
Çok projeli çözümleri dağıtma
Bir Visual Studio birden çok proje içerirken, yayımlama Visual Studio zaten dağıtacak projeyi seçmeyi içerir. Git gibi App Service dağıtım altyapısına dağıtın veya derleme otomasyonu etkin ZIP dağıtımı ile dağıtın, App Service dağıtım altyapısı, App Service uygulaması olarak bulduğu Project ilk Web Sitesini veya Web Uygulamasını seçer. Uygulama ayarını belirterek App Service hangi projenin kullan gerektiğini PROJECT belirtebilirsiniz. Örneğin, aşağıdakini aşağıdaki komut Cloud Shell:
az webapp config appsettings set --resource-group <resource-group-name> --name <app-name> --settings PROJECT="<project-name>/<project-name>.csproj"
Tanılama günlüklerine erişim
ASP.NET Core için yerleşik bir günlük sağlayıcısı App Service. Aşağıdaki örnekte gösterildiği gibi, projenizin Program.cs'sinde uzantı yöntemi aracılığıyla ConfigureLogging sağlayıcıyı uygulamanıza ekleyin:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddAzureWebAppDiagnostics();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Ardından, standart .NET Core deseniyle günlükleri yapılandırarak ve oluşturacaksınız.
App Service’te uygulama kodunuzun içinden oluşturulan konsol günlüklerine erişmek için şu komutu Cloud Shell’de çalıştırarak tanılama günlüğüne kaydetmeyi açın:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
--level için olası değerler: Error, Warning, Info ve Verbose. Her düzey kendisinden önceki düzeyi içerir. Örneğin: Error yalnızca hata iletilerini içerir, Verbose ise tüm iletileri içerir.
Tanılama günlüğüne kaydetme açıldıktan sonra günlük akışını görmek için şu komutu çalıştırın:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Konsol günlüklerini hemen görmüyorsanız, 30 saniye içinde yeniden kontrol edin.
Not
Ayrıca, tarayıcıdan https://<app-name>.scm.azurewebsites.net/api/logs/docker adresine giderek günlük dosyalarını inceleyebilirsiniz.
Günlük akışını dilediğiniz zaman durdurmak için Ctrl+C yazın.
App Service'daki ASP.NET Core sorunlarını giderme hakkında daha fazla bilgi için bkz. ASP.NET Core ve IIS Azure App Service sorunlarını giderme
Ayrıntılı özel durumlar sayfasını al
ASP.NET Core uygulamanız Visual Studio hata ayıklayıcısında bir özel durum oluşturursa, tarayıcı ayrıntılı bir özel durum sayfası görüntüler, ancak App Service sayfasında bu sayfa genel bir HTTP 500 hatasıyla değiştirilir veya İsteğiniz işleme sırasında bir hata oluştu. iletisi döndürmektedir. uygulama sayfasında ayrıntılı özel durum App Service görüntülemek için, Cloud Shell'da aşağıdaki komutu çalıştırarak ASPNETCORE_ENVIRONMENT uygulama ayarını uygulamanıza ekleyin.
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings ASPNETCORE_ENVIRONMENT="Development"
HTTPS oturumunu algılama
Bu App Service, TLS/SSL sonlandırması ağ yük dengecilerde gerçekleşir, bu nedenle tüm HTTPS istekleri şifrelenmemiş HTTP istekleri olarak uygulamanıza erişer. Uygulama mantığınız kullanıcı isteklerinin şifrelenir mi yoksa şifrelenmez mi olduğunu bilmek için Startup.cs içinde Iletili Üst Bilgiler Ara Yazılımı'nın yapılandırılması gerekir:
- içinde ve üst bilgilerini ilet için ForwardedHeadersOptions ile
X-Forwarded-Forara yazılımıX-Forwarded-ProtoStartup.ConfigureServicesyapılandırma. - Ara yazılımların yük dengeleyiciye güvenmesi için bilinen ağlara özel IP App Service ekleyin.
- Diğer ara yazılımı çağırmadan önce içinde UseForwardedHeaders
Startup.Configureyöntemini çağırma.
Bu üç öğenin hepsini bir araya getirdiniz. Kodunuz aşağıdaki örnekteki gibi görünüyor:
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();
}
Daha fazla bilgi için bkz. ASP.NET Core sunucuları ve yük dengelerini çalışacak şekilde yapılandırma.
Tarayıcıda SSH oturumu açma
Kapsayıcınızda doğrudan SSH oturumu başlatabilmek için uygulamanızın çalışıyor olması gerekir.
Aşağıdaki URL'yi tarayıcınıza yapıştırın ve <app-name> yerine kendi uygulamanızın adını yazın:
https://<app-name>.scm.azurewebsites.net/webssh/host
Kimlik doğrulamasından geçmediyseniz bağlantıyı kurabilmek için Azure aboneliğinizle kimliğinizi doğrulamanız gerekir. Kimliğiniz doğrulandıktan sonra kapsayıcınızda komut çalıştırmak için kullanabileceğiniz tarayıcı içi kabuk ortamını görürsünüz.

Not
/home dizininin dışında yaptığınız değişiklikler kapsayıcıda depolanır ve uygulama yeniden başlatıldığında kalıcı olmaz.
Yerel makinenizden uzak SSH oturumu açmak için bkz. Uzak kabuktan SSH oturumu açma.
Günlüklerde robots933456
Kapsayıcı günlüklerinde şu iletiyi görebilirsiniz:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Bu iletiyi güvenle yoksayabilirsiniz. /robots933456.txt, App Service hizmetinin kapsayıcının istek sunmak için uygun olup olmadığını denetlemek için kullandığı işlevsiz bir URL'dir. 404 yanıtı, yolun var olmadığını belirtir ancak App Service bu sayede iyi ve isteklere yanıt vermeye uygun durumda olan kapsayıcıları belirler.
Sonraki adımlar
Veya ek kaynaklara bakın: