IIS ile Windows'da ASP.NET Core'u barındırma

Internet Information Services (IIS), ASP.NET Core'un da aralarında yer aldığı web uygulamalarını barındırmak için esnek, güvenli ve yönetilebilir bir Web Sunucusudur.

Desteklenen platformlar

Aşağıdaki işletim sistemleri desteklenmektedir:

  • Windows 7 veya üzeri
  • Windows Server 2012 R2 veya üzeri

32 bit (x86) veya 64 bit (x64) dağıtımı için yayımlanan uygulamalar desteklenir. Aşağıdaki durumlar dışında 32 bit uygulamayı 32 bit (x86) .NET Core SDK'sıyla dağıtabilirsiniz:

  • Uygulamaya, 64 bit uygulamaya sağlanan daha büyük sanal bellek adres alanı gerekiyor.
  • Uygulamaya daha büyük IIS yığın boyutu gerekiyor.
  • Uygulamanın 64 bit yerel bağımlılıkları var.

ASP.NET Core Modülünü/Barındırma Paketini Yükleme

Aşağıdaki bağlantıyı kullanarak en son yükleyiciyi indirin:

Geçerli .NET Core Barındırma Paketi yükleyicisi (doğrudan indirme)

ASP.NET Core Modülünü yüklemeye veya farklı sürümleri yüklemeye yönelik daha ayrıntılı yönergeler için bkz. .NET Core Barındırma Paketini Yükleme.

Barındırma paketinin önceki sürümlerini indirmek için bu GitHub sorununa bakın.

Başlarken

IIS'de web sitesi barındırmaya başlamak için başlangıç kılavuzumuza bakın.

Azure Uygulaması Hizmetleri'nde web sitesi barındırmaya başlamak için Azure App Service'e dağıtım kılavuzumuza bakın.

Yapılandırma

Yapılandırma rehberliği için bkz. Gelişmiş yapılandırma.

IIS yöneticileri için dağıtım kaynakları

Örtüşen geri dönüşüm

Genel olarak sıfır kapalı kalma süreli dağıtımlar için mavi-yeşil dağıtımları gibi bir desen kullanılmasını öneririz. Örtüşen Geri Dönüşüm gibi özellikler sıfır kapalı kalma süreli bir dağıtım yapabilmenize yardımcı olur ancak bunu garanti etmez. Daha fazla bilgi için bu GitHub konusuna bakın.

İsteğe bağlı istemci sertifikaları

Uygulamanın bir alt kümesini sertifikayla koruması gereken uygulamalar hakkında bilgi için bkz. İsteğe bağlı istemci sertifikaları.

Ek kaynaklar

ASP.NET Core uygulamasını IIS sunucusuna yayımlamaya yönelik bir öğretici deneyimi için bkz. ASP.NET Core uygulamasını IIS'ye yayımlama.

.NET Core Barındırma Paketini Yükleme

Desteklenen işletim sistemleri

Aşağıdaki işletim sistemleri desteklenmektedir:

  • Windows 7 veya üzeri
  • Windows Server 2012 R2 veya üzeri

HTTP.sys sunucusu (eski adı WebListener) IIS ile bir ters ara sunucu yapılandırmasında çalışmaz. Kestrel sunucusunu kullanın.

Azure'da barındırma hakkında bilgi için bkz. ASP.NET Core uygulamalarını Azure App Service'e dağıtma.

Sorun giderme kılavuzu için bkz. ASP.NET Core projelerinde sorun giderme ve hata ayıklama.

Desteklenen platformlar

32 bit (x86) veya 64 bit (x64) dağıtımı için yayımlanan uygulamalar desteklenir. Aşağıdaki durumlar dışında 32 bit uygulamayı 32 bit (x86) .NET Core SDK'sıyla dağıtabilirsiniz:

  • Uygulamaya, 64 bit uygulamaya sağlanan daha büyük sanal bellek adres alanı gerekiyor.
  • Uygulamaya daha büyük IIS yığın boyutu gerekiyor.
  • Uygulamanın 64 bit yerel bağımlılıkları var.

32 bit (x86) için yayımlanan uygulamaların IIS Uygulama Havuzları için 32 bit etkinleştirilmiş olmalıdır. Daha fazla bilgi için IIS sitesi oluşturma bölümüne bakın.

64 bit uygulamasını yayımlamak için 64 bit (x64) .NET Core SDK'sını kullanın. Konak sisteminde 64 bit çalışma zamanı mevcut olmalıdır.

Barındırma modelleri

İşlem içi barındırma modeli

İşlem içi barındırmayı kullanarak ASP.NET Core uygulaması kendi IIS çalışan işlemiyle aynı işlemde çalıştırılır. İşlem içi barındırma işlem dışı barındırmadan daha gelişmiş performans sağlar çünkü istekler, giden ağ trafiğini aynı makineye geri döndüren bir ağ arabirimi olan geri döngü bağdaştırıcısı üzerinden ara sunucu kullanmaz. IIS işlem yönetimini Windows İşlem Etkinleştirme Hizmeti (WAS) ile işler.

ASP.NET Core Modülü:

  • Uygulama başlatma gerçekleştirir.
    • CoreCLR'yi yükler.
    • Program.Main çağrısı yapar.
  • IIS yerel isteğinin ömrünü işler.

Aşağıdaki diyagramda IIS, ASP.NET Core Modülü ve işlem içinde barındırılan uygulama arasındaki ilişki gösterilir:

ASP.NET Core Module in the in-process hosting scenario

  1. Web'den çekirdek modundaki HTTP.sys sürücüsüne bir istek gelir.
  2. Sürücü yerel isteği web sitesinin yapılandırılmış bağlantı noktası üzerinden (genellikle 80 (HTTP) veya 443 (HTTPS)) IIS'ye yönlendirir.
  3. ASP.NET Core Modülü yerel isteği alır ve IIS HTTP Sunucusuna (IISHttpServer) geçirir. IIS HTTP Sunucusu, IIS için isteği yerelden yönetilene dönüştüren bir işlem içi sunucu uygulamasıdır.

IIS HTTP Sunucusu isteği işledikten sonra:

  1. İstek ASP.NET Core ara yazılım işlem hattına gönderilir.
  2. Ara yazılım işlem hattı isteği işler ve bir HttpContext örneği olarak uygulamanın mantığına geçirir.
  3. Uygulamanın yanıtı IIS HTTP Sunucusu üzerinden geriye IIS'ye geçirilir.
  4. IIS bu yanıtı, isteği başlatan istemciye gönderir.

İşlem içi barındırma mevcut uygulamalar için kabul edilir. ASP.NET Core web şablonları işlem içi barındırma modelini kullanır.

CreateDefaultBuilder, UseIIS yöntemini çağırıp CoreCLR önyüklemesi yaparak bir IServer örneği ekler ve uygulamayı IIS çalışan işleminin (w3wp.exe veya iisexpress.exe) içinde barındırır. Performans testleri bir .NET Core uygulamasını işlem içinde barındırmanın, uygulamayı işlem dışında barındırıp istekleri Kestrel yoluna ara sunucuyla yönlendirmeye göre önemli ölçüde yüksek bir istek aktarım hızı sağladığını gösterir.

Tek bir yürütülebilir dosya olarak yayımlanan uygulamalar işlem içi barındırma modeliyle yüklenemez.

İşlem dışı barındırma modeli

ASP.NET Core uygulamaları IIS çalışan işleminden ayrı bir işlemde çalıştırıldığından, işlem yönetimini ASP.NET Core Modülü gerçekleştirir. İlk istek geldiğinde modül ASP.NET Core uygulaması için işlemi başlatır ve uygulama kapanırsa veya kilitlenirse uygulamayı yeniden başlatır. Bu temelde, Windows İşlem Etkinleştirme Hizmeti (WAS) tarafından yönetilen, işlem içinde çalıştırılan uygulamalarda görünen davranışla aynıdır.

Aşağıdaki diyagramda IIS, ASP.NET Core Modülü ve işlem dışında barındırılan uygulama arasındaki ilişki gösterilir:

ASP.NET Core Module in the out-of-process hosting scenario

  1. Web'den çekirdek modundaki HTTP.sys sürücüsüne istekler gelir.
  2. Sürücü istekleri web sitesinin yapılandırılmış bağlantı noktası üzerinden IIS'ye yönlendirir. Yapılandırılmış bağlantı noktası genellikle 80 (HTTP) veya 443'tür (HTTPS).
  3. Modül istekleri uygulama için rastgele bir bağlantı noktası üzerinden Kestrel'e iletir. Rastgele bağlantı noktası 80 veya 443 değildir.

ASP.NET Core Modülü başlatma sırasında bir ortam değişkeni yoluyla bağlantı noktasını belirtir. UseIISIntegration uzantısı sunucuyu http://localhost:{PORT} üzerinden dinleyecek şekilde yapılandırır. Ek denetimler gerçekleştirilir ve modülden kaynaklanmayan istekler reddedilir. Modül HTTPS üzerinden iletmeyi desteklemez. IIS istekleri HTTPS üzerinden almış olsa bile istekler HTTP üzerinden iletilir.

Kestrel isteği modülden aldıktan sonra, istek ASP.NET Core ara yazılım işlem hattına iletilir. Ara yazılım işlem hattı isteği işler ve bir HttpContext örneği olarak uygulamanın mantığına geçirir. IIS Tümleştirmesi tarafından eklenen ara yazılım, isteği Kestrel'e iletme işlemini gerçekleştirmek için şemayı, uzak IP'yi ve yol tabanını güncelleştirir. Uygulamanın yanıtı IIS'ye geri geçirilir ve IIS de bunu geriye, isteği başlatan HTTP istemcisine geçirir.

ASP.NET Core Modülü yapılandırma rehberi için bkz. IIS için ASP.NET Core Modülü (ANCM).

Barındırma hakkında daha fazla bilgi için bkz. ASP.NET Core'da barındırma.

Uygulama yapılandırması

IISIntegration bileşenlerini etkinleştirme

CreateHostBuilder yönteminde bir konak oluştururken (Program.cs) IIS tümleştirmesini etkinleştirmek için CreateDefaultBuilder yöntemini çağırın:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        ...

CreateDefaultBuilder hakkında daha fazla bilgi için bkz. ASP.NET Core'da .NET Genel Konağı.

IIS seçenekleri

İşlem içi barındırma modeli

IIS Sunucusu seçeneklerini yapılandırmak için ConfigureServices yönteminde IISServerOptions için bir hizmet yapılandırması ekleyin. Aşağıdaki örnek AutomaticAuthentication özelliğini devre dışı bırakır:

services.Configure<IISServerOptions>(options => 
{
    options.AutomaticAuthentication = false;
});
Seçenek Varsayılan Ayar
AutomaticAuthentication true true olduğunda, IIS Sunucusu HttpContext.User özelliğini Windows Kimlik Doğrulaması tarafından kimliği doğrulanmış olarak ayarlar. false olduğunda, sunucu yalnızca HttpContext.User için bir kimlik sağlar ve AuthenticationScheme tarafından açıkça istendiğinde sınamaları yanıtlar. AutomaticAuthentication'ın çalışması için IIS'de Windows Kimlik Doğrulaması'nın etkinleştirilmesi gerekir. Daha fazla bilgi için bkz. Windows Kimlik Doğrulaması.
AuthenticationDisplayName null Oturum açma sayfalarında kullanıcılara gösterilen görünen adı ayarlar.
AllowSynchronousIO false HttpContext.Request ve HttpContext.Response için zaman uyumlu G/Ç'ye izin verilip verilmediği.
MaxRequestBodySize 30000000 HttpRequest için maksimum istek gövdesi boyutunu alır veya ayarlar. IIS'nin kendi maxAllowedContentLength sınırı olduğunu ve bu sınırın IISServerOptions içinde ayarlanan MaxRequestBodySize özelliğinden önce işleneceğini unutmayın. MaxRequestBodySize özelliğinin değiştirilmesi maxAllowedContentLength sınırını etkilemez. maxAllowedContentLength değerini artırmak için web.config dosyasına bir girdi ekleyerek maxAllowedContentLength için daha yüksek bir değer ayarlayın. Diğer ayrıntılar için bkz. Yapılandırma.

İşlem dışı barındırma modeli

IIS seçeneklerini yapılandırmak için ConfigureServices yönteminde IISOptions için bir hizmet yapılandırması ekleyin. Aşağıdaki örnek uygulamanın HttpContext.Connection.ClientCertificate özelliğini doldurmasını engeller:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
Seçenek Varsayılan Ayar
AutomaticAuthentication true true olduğunda, IIS Tümleştirme Ara YazılımıHttpContext.User özelliğini Windows Kimlik Doğrulaması tarafından kimliği doğrulanmış olarak ayarlar. false olduğunda, ara yazılım yalnızca HttpContext.User için bir kimlik sağlar ve AuthenticationScheme tarafından açıkça istendiğinde sınamaları yanıtlar. AutomaticAuthentication'ın çalışması için IIS'de Windows Kimlik Doğrulaması'nın etkinleştirilmesi gerekir. Daha fazla bilgi için Windows Kimlik Doğrulaması konusuna bakın.
AuthenticationDisplayName null Oturum açma sayfalarında kullanıcılara gösterilen görünen adı ayarlar.
ForwardClientCertificate true true olduğunda ve MS-ASPNETCORE-CLIENTCERT istek üst bilgisi de mevcut olduğunda HttpContext.Connection.ClientCertificate doldurulur.

Ara sunucu ve yük dengeleyici senaryoları

IIS Tümleştirme Ara Yazılımı ve ASP.NET Core Modülü şunları iletecek şekilde yapılandırılır:

  • Şema (HTTP/HTTPS).
  • İsteğin kaynaklandığı uzak IP adresi.

IIS Tümleştirme Ara Yazılımı, İletilen Üst Bilgiler Ara Yazılımını yapılandırır.

Ek ara sunucuların ve yük dengeleyicilerin arkasında barındırılan uygulamalar için ek yapılandırma gerekebilir. Daha fazla bilgi için bkz. ASP.NET Core'u ara sunucular ve yük dengeleyicilerle çalışacak şekilde yapılandırma.

web.config dosyası

web.config dosyası ASP.NET Core Modülü'nü yapılandırır. web.config dosyasını oluşturma, dönüştürme ve yayımlama işlemleri proje yayımlandığında MSBuild hedefi (_TransformWebConfig) tarafından gerçekleştirilir. Bu hedef, Web SDK'sı hedefleri (Microsoft.NET.Sdk.Web) arasında yer alır. SDK, proje dosyasının üst kısmında ayarlanır:

<Project Sdk="Microsoft.NET.Sdk.Web">

Projede web.config dosyası yoksa, dosya ASP.NET Core Modülü'nü yapılandırmak için doğru processPath ve arguments ile oluşturulur ve yayımlanan çıkışa taşınır.

Projede web.config dosyası varsa, dosya ASP.NET Core Modülü'nü yapılandırmak için doğru processPath ve arguments ile dönüştürülür ve yayımlanan çıkışa taşınır. Dönüşüm dosyadaki IIS yapılandırma ayarlarını değiştirmez.

web.config dosyası etkin IIS modüllerini denetleyen ek IIS yapılandırma ayarları sağlayabilir. ASP.NET Core uygulamalarıyla istekleri işleyebilen IIS modülleri hakkında bilgi için IIS modülleri konusuna bakın.

Web SDK'sının web.config dosyasını dönüştürmesini önlemek için proje dosyasındaki <IsTransformWebConfigDisabled> özelliğini kullanın:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Web SDK'sının dosyayı dönüştürmesi devre dışı bırakıldığında processPath ve arguments geliştirici tarafından el ile ayarlanmalıdır. Daha fazla bilgi için bkz. IIS için ASP.NET Core Modülü (ANCM).

web.config dosyasının konumu

ASP.NET Core Modülü'nü doğru ayarlayabilmek için, dağıtılan uygulamanın içerik kökü yolunda (tipik olarak uygulama temel yolu) web.config dosyası mevcut olmalıdır. Bu, IIS'ye sağlanan web sitesi fiziksel yoluyla aynı konumdur. Web Dağıtımı'nı kullanarak birden fazla uygulamanın yayımlanmasını sağlamak için uygulamanın kökünde web.config dosyasının bulunması gereklidir.

Uygulamanın fiziksel yolunda {ASSEMBLY}.runtimeconfig.json, {ASSEMBLY}.xml (XML Belgeleri açıklamaları) ve {ASSEMBLY}.deps.json gibi (burada {ASSEMBLY} yer tutucusu derleme adıdır) gibi hassas dosyalar bulunur. web.config dosyası mevcut olduğunda ve site normal şekilde başlatıldığında, bu hassas dosyalar istenirse ISS bunları kullanıma sunmaz. web.config dosyası yoksa, yanlış adlandırıldıysa veya siteyi normal başlatma için yapılandıramazsa, IIS hassas dosyaları genel kullanıma sunabilir.

web.config dosyası dağıtımda her zaman doğru adlandırılmış olarak ve siteyi normal başlatma için yapılandırabilecek şekilde mevcut olmalıdır. web.config dosyasını hiçbir zaman üretim dağıtımından kaldırmayın.

Web.config’i dönüştürme

Yayımlama sırasında web.config dosyasını dönüştürmeniz gerekirse Web.config'i dönüştürme konusuna bakın. Yapılandırmaya, profile veya ortama bağlı olarak ortam değişkenlerini ayarlamak için yayımlama sırasında web.config dosyasını dönüştürmeniz gerekebilir.

IIS yapılandırması

Windows Server İşletim Sistemleri

Web Sunucusu (IIS) sunucu rolünü etkinleştirin ve rol hizmetlerini oluşturun.

  1. Yönet menüsünden Rol ve Özellik Ekle sihirbazını veya Sunucu Yöneticisi'ndeki bağlantıyı kullanın. Sunucu Rolleri adımında Web Sunucusu (IIS) kutusunu işaretleyin.

    The Web Server IIS role is selected in the Select server roles step.

  2. Özellikler adımından sonra Web Sunucusu (IIS) için Rol hizmetleri adımı yüklenir. İstenen IIS rol hizmetlerini seçin veya sağlanan varsayılan rol hizmetlerini kabul edin.

    The default role services are selected in the Select role services step.

    Windows Kimlik Doğrulaması (İsteğe Bağlı)
    Windows Kimlik Doğrulaması'nı etkinleştirmek için şu düğümleri genişletin: Web Sunucusu>Güvenlik. Windows Kimlik Doğrulaması özelliğini seçin. Daha fazla bilgi için bkz. Windows Kimlik Doğrulaması <windowsAuthentication> ve Windows kimlik doğrulamasını yapılandırma.

    WebSockets (İsteğe Bağlı)
    WebSockets, ASP.NET Core 1.1 veya üzerinde desteklenir. WebSockets'i etkinleştirmek için şu düğümleri genişletin: Web Sunucusu>Uygulama Geliştirme. WebSocket Protokolü özelliğini seçin. Daha fazla bilgi için bkz. WebSockets.

  3. Web sunucusu rolünü ve hizmetlerini yüklemek için Onay adımıyla devam edin. Web Sunucusu (IIS) rolü yüklendikten sonra sunucunun/IIS'nin yeniden başlatılması gerekmez.

Windows masaüstü işletim sistemleri

IIS Yönetim Konsolu'nu ve World Wide Web Hizmetleri'ni etkinleştirin.

  1. Denetim Masası>Programlar>Programlar ve Özellikler> gidinWindows özelliklerini aç veya kapat seçeneğine gidin (ekranın sol tarafında).

  2. Internet Information Services düğümünü açın. Web Yönetimi Araçları düğümünü açın.

  3. IIS Yönetim Konsolu kutusunu işaretleyin.

  4. World Wide Web Hizmetleri kutusunu işaretleyin.

  5. World Wide Web Hizmetleri için varsayılan özellikleri seçin veya IIS özelliklerini özelleştirin.

    Windows Kimlik Doğrulaması (İsteğe Bağlı)
    Windows Kimlik Doğrulaması'nı etkinleştirmek için şu düğümleri genişletin: World Wide Web Hizmetleri>Güvenlik. Windows Kimlik Doğrulaması özelliğini seçin. Daha fazla bilgi için bkz. Windows Kimlik Doğrulaması <windowsAuthentication> ve Windows kimlik doğrulamasını yapılandırma.

    WebSockets (İsteğe Bağlı)
    WebSockets, ASP.NET Core 1.1 veya üzerinde desteklenir. WebSockets'i etkinleştirmek için şu düğümleri genişletin: World Wide Web Hizmetleri>Uygulama Geliştirme Özellikleri. WebSocket Protokolü özelliğini seçin. Daha fazla bilgi için bkz. WebSockets.

  6. IIS yüklemesi bir yeniden başlatma gerektiriyorsa sistemi yeniden başlatın.

IIS Management Console and World Wide Web Services are selected in Windows Features.

.NET Core Barındırma Paketini Yükleme

Barındırma sisteminde .NET Core Barındırma Paketi'ni yükleyin. Paket .NET Core Çalışma Zamanı'nı, .NET Core Kitaplığı'nı ve ASP.NET Core Modülü'nü yükler. Modül ASP.NET Core uygulamalarının IIS'nin arkasında çalıştırılmasına olanak tanır.

Önemli

Barındırma Paketi IIS'den önce yüklenirse paket yüklemesinin onarılması gerekir. IIS'yi yükledikten sonra Barındırma Paketi yükleyicisini yeniden çalıştırın.

Barındırma Paketi .NET Core'un 64 bit (x64) sürümü yüklendikten sonra yüklenirse, SDK'lar eksik gibi görünebilir (Hiçbir .NET Core SDK'sı algılanmadı). Sorunu çözmek için bkz. ASP.NET Core projelerinde sorun giderme ve hata ayıklama.

Doğrudan indirme (geçerli sürüm)

Aşağıdaki bağlantıyı kullanarak yükleyiciyi indirin:

Geçerli .NET Core Barındırma Paketi yükleyicisi (doğrudan indirme)

Yükleyicinin önceki sürümleri

Yükleyicinin önceki bir sürümünü edinmek için:

  1. .NET Core'u indir sayfasına gidin.
  2. İstediğiniz .NET Core sürümünü seçin.
  3. Uygulamaları çalıştır - Çalışma Zamanı sütununda istenen .NET Core çalışma zamanı sürümünü bulun.
  4. Barındırma Paketi bağlantısını kullanarak yükleyiciyi indirin.

Uyarı

Bazı yükleyiciler kullanım ömrünün sonuna (EOL) ulaşmış ve artık Microsoft tarafından desteklenmeyen sürümler içerir. Daha fazla bilgi için destek ilkesi bölümüne bakın.

Barındırma Paketini yükleme

  1. Sunucuda yükleyiciyi çalıştırın. Yönetici komut kabuğundan yükleyiciyi çalıştırırken aşağıdaki parametreler kullanılabilir:

    • OPT_NO_ANCM=1: ASP.NET Core Modülü'nü yüklemeyi atlayın.
    • OPT_NO_RUNTIME=1: .NET Core çalışma zamanını yüklemeyi atlayın. Sunucu yalnızca kendi içinde dağıtımları (SCD) barındırdığında kullanılır.
    • OPT_NO_SHAREDFX=1: ASP.NET Paylaşılan Çerçevesi'ni (ASP.NET çalışma zamanı) yüklemeyi atlayın. Sunucu yalnızca kendi içinde dağıtımları (SCD) barındırdığında kullanılır.
    • OPT_NO_X86=1: x86 çalışma zamanlarını yüklemeyi atlayın. Bu parametreyi, 32 bit uygulamalar barındırmayacağınızı bildiğiniz durumlarda kullanın. Gelecekte hem 32 bit hem de 64 bit uygulamalar barındırma olasılığınız varsa bu parametreyi kullanmayın ve her iki çalışma zamanını da yükleyin.
    • OPT_NO_SHARED_CONFIG_CHECK=1: Paylaşılan yapılandırma (applicationHost.config) IIS yüklemesiyle aynı makinede yer aldığında IIS Paylaşılan Yapılandırması'nı kullanmak için denetimi devre dışı bırakın. Yalnızca ASP.NET Core 2.2 veya üzeri Barındırma Paketi yükleyicilerinde kullanılabilir. Daha fazla bilgi için bkz. IIS için ASP.NET Core Modülü (ANCM).
  2. IIS yeniden başlatıldığında sistem PATH ortam değişkeninde yükleyici tarafından yapılan bir değişiklik alınır. Web sunucusunu yeniden başlatmak için Windows İşlem Etkinleştirme Hizmeti'ni (WAS) durdurun ve ardından World Wide Web Yayımlama Hizmeti'ni (W3SVC) yeniden başlatın. Sistemi yeniden başlatın veya yükseltilmiş komut kabuğunda aşağıdaki komutları yürütün:

    net stop was /y
    net start w3svc
    

ASP.NET Core, paylaşılan çerçeve paketlerinin yama sürümleri için ileri sarma davranışını benimsemez. Yeni barındırma paketini yükleyip paylaşılan çerçeveyi yükselttikten sonra sistemi yeniden başlatın veya yükseltilmiş komut kabuğunda aşağıdaki komutları yürütün:

net stop was /y
net start w3svc

Dekont

IIS Paylaşılan Yapılandırması hakkında bilgi için bkz. IIS Paylaşılan Yapılandırması ile ASP.NET Core Modülü.

Visual Studio ile yayımlarken Web Dağıtımı'nı yükleme

Web Dağıtımı ile uygulamaları sunuculara dağıtırken, sunucuya Web Dağıtımı'nın en son sürümünü yükleyin. Web Dağıtımı'nı yüklemek için Web Platformu Yükleyicisi'ni (WebPI) kullanın veya yükleyiciyi doğrudan Microsoft İndirme Merkezi'nden alın. Tercih edilen yöntem WebPI kullanmaktır. WebPI, barındırma sağlayıcıları için tek başına bir kurulum ve bir yapılandırma sunar.

IIS sitesini oluşturma

  1. Barındırma sisteminde, uygulamanın yayımlanan klasörleriyle dosyalarını içerecek bir klasör oluşturun. Aşağıdaki adımda klasörün yolu, uygulamanın fiziksel yolu olarak IIS'ye sağlanır. Uygulamanın dağıtım klasörü ve dosya düzeni hakkında daha fazla bilgi için bkz. ASP.NET Core dizin yapısı.

  2. IIS Yöneticisi'nde, Bağlantılar panelinde sunucunun düğümünü açın. Siteler klasörüne sağ tıklayın. Bağlam menüsünden Web Sitesi Ekle'yi seçin.

  3. Site adı girin ve Fiziksel yol olarak uygulamanın dağıtım klasörünü ayarlayın. Bağlama yapılandırmasını sağlayın ve Tamam'ı seçerek web sitesini oluşturun:

    Supply the Site name, physical path, and Host name in the Add Website step.

    Uyarı

    En üst düzey joker karakter bağlamaları (http://*:80/ ve http://+:80) kullanılmamalıdır. En üst düzey joker karakter bağlamaları uygulamanızda güvenlik açıklarına neden olabilir. Bu durum hem güçlü hem de zayıf joker karakterler için geçerlidir. Joker karakterler yerine açık konak adları kullanın. Üst etki alanının tamamını denetliyorsanız alt etki alanı bağlamasının (örneğin *.mysub.com) böyle bir güvenlik riski yoktur (güvenlik açığı olan *.com bağlamasından farklı olarak). Daha fazla bilgi için bkz. RFC 9110: HTTP Semantiği (Bölüm 7.2: Konak ve :yetkili).

  4. Sunucunun düğümü altında Uygulama Havuzları'nı seçin.

  5. Sitenin uygulama havuzuna sağ tıklayın ve bağlam menüsünden Temel Ayarlar'ı seçin.

  6. Uygulama Havuzunu Düzenle penceresinde .NET CLR sürümü'nü Yönetilen Kod Yok olarak ayarlayın:

    Set No Managed Code for the .NET CLR version.

    ASP.NET Core ayrı bir işlemde çalıştırılır ve çalışma zamanını yönetir. ASP.NET Core masaüstü CLR'yi (.NET CLR) yüklemeye bağlı değildir. Uygulamayı çalışan işleminde barındırmak için .NET Core için Core Ortak Dil Çalışma Zamanı Modülü (CoreCLR) önyüklenir. .NET CLR sürümü olarak Yönetilen Kod Yok seçeneğinin ayarlanması isteğe bağlıdır ama önerilir.

  7. ASP.NET Core 2.2 veya üzeri:

    • İşlem içi barındırma modeli kullanan ve bir 32 bit SDK'sıyla yayımlanan 32 bit (x86) kendi içinde dağıtım için, 32 bit için Uygulama Havuzu'nu etkinleştirin. IIS Yöneticisi'nde Bağlantılar kenar çubuğundaki Uygulama Havuzları'na gidin. Uygulamanın Uygulama Havuzunu seçin. Eylemler kenar çubuğunda Gelişmiş Ayarlar'ı seçin. 32 Bit Uygulamaları Etkinleştir seçeneğini True olarak ayarlayın.

    • İşlem içi barındırma modeli kullanan 64 bit (x64) kendi içinde dağıtım için, 32 bit (x86) işlemlerinin uygulama havuzunu devre dışı bırakın. IIS Yöneticisi'nde Bağlantılar kenar çubuğundaki Uygulama Havuzları'na gidin. Uygulamanın Uygulama Havuzunu seçin. Eylemler kenar çubuğunda Gelişmiş Ayarlar'ı seçin. 32 Bit Uygulamaları Etkinleştir seçeneğini False olarak ayarlayın.

  8. İşlem modeli kimliğinin düzgün izinlere sahip olduğunu onaylayın.

    Uygulama havuzunun ApplicationPoolIdentity olan varsayılan kimliği (İşlem Modeli>Identity) başka bir kimlikle değiştirilirse, yeni kimliğin uygulamanın klasörüne, veritabanına ve diğer gerekli kaynaklarına erişmek için gereken izinlere sahip olduğunu doğrulayın. Örneğin uygulama havuzu için uygulamanın dosyaları okuduğu ve yazdığı klasörlere okuma ve yazma erişimi gerekir.

Windows Kimlik Doğrulaması yapılandırması (İsteğe Bağlı)
Daha fazla bilgi için bkz. Windows kimlik doğrulamasını yapılandırma.

Uygulamayı dağıtma

Uygulamayı IIS sitesini oluşturma bölümünde oluşturulan IIS Fiziksel yol klasörüne dağıtın. Web Dağıtımı, dağıtım için önerilen mekanizmadır ama uygulamayı projenin publish klasöründen barındırma sisteminin dağıtım klasörüne taşımak için çeşitli seçenekler vardır.

Visual Studio ile Web Dağıtımı

Web Dağıtımı ile kullanılacak bir yayımlama oluşturmayı öğrenmek için ASP.NET Core uygulama dağıtımı için Visual Studio yayımlama profilleri konusuna bakın. Barındırma sağlayıcısı bir Yayımlama Profili sağlıyorsa veya bu profili oluşturmayı destekliyorsa, profili indirin ve Visual Studio Yayımla iletişim kutusunu kullanarak içeri aktarın:

Publish dialog page

Visual Studio'nun dışında Web Dağıtımı

Web Dağıtımı Visual Studio'nun dışında komut satırından da kullanılabilir. Daha fazla bilgi için bkz. Web Dağıtım Aracı.

Web Dağıtımı'nın alternatifleri

Uygulamayı barındırma sistemine taşımak için el ile kopyalama, Xcopy, Robocopy veya PowerShell gibi çeşitli yöntemlerden herhangi birini kullanın.

IIS'ye ASP.NET Core dağıtımı hakkında daha fazla bilgi için IIS yöneticileri için dağıtım kaynakları bölümüne bakın.

Web sitesine göz atma

Uygulama barındırma sistemine dağıtıldıktan sonra uygulamanın genel uç noktalarına bir istek yöneltin.

Aşağıdaki örnekte site 80Bağlantı Noktası üzerindeki www.mysite.com IIS Konak adına bağlıdır. http://www.mysite.com konumuna bir istek yöneltilir:

The Microsoft Edge browser has loaded the IIS startup page.

Kilitli dağıtım dosyaları

Uygulama çalıştırılırken dağıtım klasöründeki dosyalar kilitlenir. Dağıtım sırasında kilitli dosyaların üzerine yazılamaz. Dağıtımda kilitli dosyaları serbest bırakmak için aşağıdaki yaklaşımlardan birini kullanarak uygulama havuzunu durdurun:

  • Web Dağıtımı'nı kullanın ve proje dosyasında Microsoft.NET.Sdk.Web SDK'sına başvurun. Web uygulamasının köküne bir app_offline.htm dosyası yerleştirilir. Dosya mevcut olduğunda ASP.NET Core Modülü uygulamayı düzgün bir şekilde kapatır ve dağıtım sırasında app_offline.htm dosyasını kullanıma sunar. Daha fazla bilgi için bkz. ASP.NET Core Modülü yapılandırma başvurusu.

  • Sunucudaki IIS Yöneticisi'nde uygulama havuzunu el ile durdurun.

  • app_offline.htm dosyasını bırakmak için PowerShell kullanın (PowerShell 5 veya üzeri gerekir):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    

Veri koruması

ASP.NET Core Veri Koruma yığını, kimlik doğrulamasında kullanılan ara yazılım da dahil olmak üzere çeşitli ASP.NET Core ara yazılımlarında kullanılır. Veri Koruma API'leri kullanıcı kodu tarafından çağrılmıyor olsa bile, kalıcı bir şifreleme anahtar deposu oluşturmak için dağıtım betiğiyle veya kullanıcı kodu içinde yapılandırılmalıdır. Veri koruması yapılandırılmazsa anahtarlar bellekte tutulur ve uygulama yeniden başlatıldığında atılır.

Anahtarlık bellekte depolanıyorsa uygulama yeniden başlatıldığında:

IIS altında veri korumasını anahtarlığın kalıcı olmasını sağlayacak şekilde yapılandırmak için aşağıdaki yaklaşımlardan birini kullanın:

  • Veri Koruması Kayıt Defteri Anahtarlarını Oluşturma

    ASP.NET Core uygulamaları tarafından kullanılan veri koruma anahtarları uygulamaların dışındaki kayıt defterinde depolanır. Belirli bir uygulamaya yönelik anahtarların kalıcı olmasını sağlamak için uygulama havuzuna kayıt defteri anahtarları oluşturun.

    Tek başına, webfarm olmayan IIS yüklemeleri için, ASP.NET Core uygulamasıyla kullanılan her uygulama havuzunda Data Protection Provision-AutoGenKeys.ps1 PowerShell betiği kullanılabilir. Bu betik HKLM kayıt defterinde yalnızca uygulamanın uygulama havuzu çalışan işlemi hesabıyla erişilebilen bir kayıt defteri anahtarı oluşturur. Anahtarlar, makine genelindeki bir anahtarla DPAPI kullanılarak şifrelenir.

    Web grubu senaryolarında, uygulama kendi veri koruma anahtarlığını depolamak için bir UNC yolu kullanacak şekilde yapılandırılabilir. Varsayılan olarak veri koruma anahtarları şifrelenmez. Ağ paylaşımına yönelik dosya izinlerinin, uygulamanın altında çalıştırıldığı Windows hesabıyla sınırlı olduğundan emin olun. Bekleyen anahtarları korumak için X509 sertifikası kullanılabilir. Kullanıcıların sertifikaları karşıya yüklemesine olanak tanıyan bir mekanizma düşünün: Sertifikaları kullanıcının güvenilen sertifika deposuna yerleştirin ve kullanıcının uygulama çalıştırdığı tüm makinelerde bu deponun kullanılabildiğinden emin olun. Ayrıntılar için bkz. ASP.NET Core Veri Koruması'nı yapılandırma.

  • IIS Uygulama Havuzu'nu kullanıcı profilini yükleyecek şekilde yapılandırma

    Bu ayar uygulama havuzu için Gelişmiş Ayarlar'ın altında yer alan İşlem Modeli bölümündedir. Kullanıcı Profilini Yükle seçeneğini True olarak ayarlayın. True olarak ayarlandığında anahtarlar kullanıcı profili dizininde depolanır ve kullanıcı hesabına özgü bir anahtarla DPAPI kullanılarak korunur. Anahtarlar kalıcı olarak %LOCALAPPDATA%/ASP.NET/DataProtection-Keys klasöründe yer alır.

    Uygulama havuzunun setProfileEnvironment özniteliği de etkinleştirilmelidir. setProfileEnvironment için varsayılan değer true değeridir. Bazı senaryolarda (örneğin Windows işletim sistemi) setProfileEnvironmentfalse olarak ayarlanır. Anahtarlar beklendiği gibi kullanıcı profili dizininde depolanmıyorsa:

    1. %windir%/system32/inetsrv/config klasörüne gidin.
    2. applicationHost.config dosyasını açın.
    3. <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> öğesini bulun.
    4. Varsayılan değeri true olan setProfileEnvironment özniteliğinin mevcut olmadığını veya özniteliğin açıkça true değerine ayarlanmadığını onaylayın.
  • Dosya sistemini anahtarlık deposu olarak kullanma

    Uygulama kodunu, dosya sistemini anahtarlık deposu olarak kullanacak şekilde ayarlayın. Anahtarlığı korumak için X509 sertifikası kullanın ve sertifikanın güvenilen bir sertifika olduğundan emin olun. Sertifika otomatik olarak imzalandıysa sertifikayı Güvenilen Kök deposuna yerleştirin.

    Web grubunda IIS kullanırken:

    • Tüm makinelerin erişebildiği bir dosya paylaşımı kullanın.
    • Her makineye bir X509 sertifikası dağıtın. Kodda veri korumasını yapılandırın.
  • Veri koruması için makine genelinde bir ilke ayarlama

    Veri koruma sisteminin, Veri Koruma API'lerini kullanan tüm uygulamalar için varsayılan bir makine genelinde illke ayarlamaya yönelik sınırlı desteği vardır. Daha fazla bilgi için bkz. ASP.NET Core Veri Koruması'na Genel Bakış.

Sanal Dizinler

ASP.NET Core uygulamalarıyla IIS Sanal Dizinleri desteklenmez. Uygulama bir alt uygulama olarak barındırılabilir.

Alt uygulamalar

ASP.NET Core uygulaması bir IIS alt uygulaması (alt uygulama) olarak barındırılabilir. Alt uygulamanın yolu kök uygulama URL'sinin bir parçası olur.

Alt uygulama içindeki statik varlık bağlantıları tilde-eğik çizgi (~/) gösterimini kullanmalıdır. Tilde-eğik çizgi gösterimi, alt uygulamanın yol tabanını işlenen göreli bağlantının önüne eklemek için bir Etiket Yardımcısını tetikler. /subapp_path yolundaki bir alt uygulama için, src="~/image.png" ile bağlantılı bir resim src="/subapp_path/image.png" olarak işlenir. Kök uygulamanın Statik Dosya Ara Yazılımı statik dosya isteğini işlemez. İstek alt uygulamanın Statik Dosya Ara Yazılımı tarafından işlenir.

Statik varlığın src özniteliği bir mutlak yola ayarlanırsa (örneğinsrc="/image.png"), bağlantı alt uygulamanın yol tabanı olmadan işlenir. Kök uygulamanın Statik Dosya Ara Yazılımı kök uygulamanın web kökünden varlığa hizmet vermeyi dener ve statik varlık kök uygulamadan kullanıma sunulmadığı sürece bu deneme 404 - Bulunmadı yanıtıyla sonuçlanır.

ASP.NET Core uygulamasını bir alt uygulama olarak ASP.NET Core uygulamasının altında barındırmak için:

  1. Alt uygulama için bir uygulama havuzu oluşturun. Uygulamayı çalışan işleminde barındırmak için masaüstü CLR (.NET CLR) değil Core Ortak Dil Çalışma Zamanı Modülü (CoreCLR) önyüklendiğinden, .NET CLR Sürümü'nü Yönetilen Kod Yok olarak ayarlayın.

  2. Alt uygulama kök sitenin altındaki bir klasörde yer alırken kök siteyi IIS Yöneticisi'ne ekleyin.

  3. IIS Yöneticisi'nde alt uygulama klasörüne sağ tıklayın ve Uygulamaya Dönüştür'ü seçin.

  4. Uygulama Ekle iletişim kutusunda Uygulama Havuzu için Seç düğmesini kullanarak alt uygulama için oluşturduğunuz uygulama havuzunu atayın. Tamam seçeneğini işaretleyin.

İşlem içi barındırma modelini kullanırken, alt uygulamaya ayrı uygulama havuzu ataması bir gereksinimdir.

İşlem içi barındırma modeli ve ASP.NET Core Modülü'nü yapılandırma hakkında daha fazla bilgi için bkz. IIS için ASP.NET Core Modülü (ANCM).

Web.config ile IIS yapılandırması

ASP.NET Core Modülü ile ASP.NET Core uygulamaları için kullanılabilen IIS senaryolarında, IIS yapılandırmasını web.config dosyasının <system.webServer> bölümü etkiler. Örneğin IIS yapılandırması dinamik sıkıştırma için kullanılabilir. IIS sunucu düzeyinde dinamik sıkıştırmayı kullanacak şekilde yapılandırıldıysa, uygulamanın web.config dosyasındaki <urlCompression> öğesi ASP.NET Core uygulaması için bunu devre dışı bırakabilir.

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

Yalıtılmış uygulama havuzlarında çalıştırılan tek tek uygulamalara ortam değişkenleri ayarlamak için (IIS 10.0 veya üzerinde desteklenir), IIS başvuru belgelerinde Ortam Değişkenleri <environmentVariables> konusunun AppCmd.exe komutu bölümüne bakın.

ASP.NET Core tarafından kullanılmayan bölümler

Web.config dosyasında ASP.NET uygulamalarının yapılandırma bölümleri ASP.NET Core uygulamaları tarafından yapılandırma için kullanılmaz:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

ASP.NET Core uygulamaları diğer yapılandırma sağlayıcıları kullanılarak yapılandırılır. Daha fazla bilgi için bkz. Yapılandırma ve .NET Core çalışma zamanı yapılandırma ayarları

Uygulama Havuzları

Uygulama havuzu yalıtımı barındırma modeli tarafından belirlenir:

  • İşlem içi barındırma: Uygulamaların ayrı uygulama havuzlarında çalıştırılması gerekir.
  • İşlem dışı barındırma: Her uygulamayı kendi uygulama havuzunda çalıştırarak uygulamaları birbirinden yalıtmanızı öneririz.

IIS Web Sitesi Ekle iletişim kutusu varsayılan olarak uygulama başına tek bir uygulama havuzu ayarlar. Site adı sağlandığında, bu metin otomatik olarak Uygulama havuzu metin kutusuna aktarılır. Site eklendiğinde site adı kullanılarak yeni bir uygulama havuzu oluşturulur.

Uygulama Havuzu Identity

Uygulama havuzu kimlik hesabı, etki alanlarını veya yerel hesapları oluşturmak ve yönetmek zorunda kalmadan uygulamanın benzersiz bir hesap altında çalıştırılmasına olanak tanır. IIS 8.0 veya üzerinde, IIS Yönetici Çalışan İşlemi (WAS) yeni uygulama havuzunun adıyla sanal bir hesap oluşturur ve uygulama havuzunun çalışan işlemlerini varsayılan olarak bu hesap altında çalıştırılır. IIS Yönetim Konsolu'nda uygulama havuzuna yönelik Gelişmiş Ayarlar'ın altında Identity öğesinin ApplicationPoolIdentity kullanacak şekilde ayarlandığından emin olun:

Application pool advanced settings dialog

IIS yönetim işlemi Windows Güvenlik Sistemi'nde uygulama havuzunun adıyla güvenli bir tanımlayıcı oluşturur. Bu kimlik kullanılarak kaynakların güvenliği sağlanabilir. Öte yandan bu kimlik gerçek bir kullanıcı hesabı değildir ve Windows Kullanıcı Yönetim Konsolu'nda gösterilmez.

IIS çalışan işlemine uygulama üzerinde yükseltilmiş erişim gerekiyorsa, uygulamayı içeren dizin için Erişim Denetim Listesi'ni (ACL) değiştirin:

  1. Windows Gezgini'ni açın ve dizine gidin.

  2. Dizine sağ tıklayın ve Özellikler'i seçin.

  3. Güvenlik sekmesinin altında Düzenle düğmesini ve sonra da Ekle düğmesini seçin.

  4. Konumlar düğmesini seçin ve sistemin seçildiğinden emin olun.

  5. Seçilecek nesne adlarını girin alanında IIS AppPool\{APP POOL NAME} girin; burada {APP POOL NAME} yer tutucusu uygulama havuzu adıdır. Adları Denetle düğmesini seçin. DefaultAppPool için IIS AppPool\DefaultAppPool kullanarak adları denetleyin. Adları Denetle düğmesi seçildiğinde nesne adları alanında DefaultAppPool değeri gösterilir. Uygulama havuzu adını doğrudan nesne adları alanına girmek mümkün değildir. Nesne adını denetlerken IIS AppPool\{APP POOL NAME} biçimini kullanın; burada {APP POOL NAME} yer tutucusu uygulama havuzu adıdır.

    Select users or groups dialog for the app folder: The app pool name of

  6. Tamam seçeneğini işaretleyin.

    Select users or groups dialog for the app folder: After selecting

  7. Okuma ve yürütme izinleri varsayılan olarak verilmelidir. Gerekirse ek izinler sağlayın.

Komut isteminde ICACLS aracı kullanılarak da erişim verilebilir. Örnek olarak DefaultAppPool kullanıldığında aşağıdaki komut kullanılır:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

Daha fazla bilgi için icacls konusuna bakın.

HTTP/2 desteği

Aşağıdaki IIS dağıtım senaryolarında ASP.NET Core ile birlikte HTTP/2 desteklenir:

  • İşlemde
    • Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
    • TLS 1.2 veya üzeri bağlantısı
  • İşlem dışı
    • Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
    • Genel kullanıma yönelik uç sunucu bağlantıları HTTP/2 kullanır ama Kestrel sunucusuna ters ara sunucu bağlantısı HTTP/1.1 kullanır.
    • TLS 1.2 veya üzeri bağlantısı

HTTP/2 bağlantısı kurulduğunda işlem içi dağıtım için HttpRequest.ProtocolHTTP/2 bildirir. HTTP/2 bağlantısı kurulduğunda işlem dışı dağıtım için HttpRequest.ProtocolHTTP/1.1 bildirir.

İşlem içi ve işlem dışı barındırma modelleri hakkında daha fazla bilgi için bkz. IIS için ASP.NET Core Modülü (ANCM).

HTTP/2 varsayılan olarak etkinleştirilir. HTTP/2 bağlantısı kurulamazsa bağlantılar HTTP/1.1'e geri döner. IIS dağıtımlarıyla HTTP/2 yapılandırması hakkında daha fazla bilgi için bkz. IIS üzerinde HTTP/2.

CORS denetim öncesi istekleri

Bu bölüm yalnızca .NET Framework'ü hedefleyen ASP.NET Core uygulamalarına yöneliktir.

.NET Framework'ü hedefleyen ASP.NET Core uygulaması için, IIS'de OPTIONS istekleri varsayılan olarak uygulamaya geçirilmez. OPTIONS isteklerini göndermek üzere web.config dosyasında uygulamanın IIS işleyicilerini yapılandırmayı öğrenmek için bkz. ASP.NET Web API 2'de kaynaklar arası istekleri etkinleştirme: CORS Nasıl Çalışır?

Uygulama Başlatma Modülü ve Boşta Kalma Zaman Aşımı

ASP.NET Core Modülü sürüm 2 tarafından IIS'de barındırıldığında:

Uygulama Başlatma Modülü

İşlem içi ve işlem dışı barındırılan uygulamalar için geçerlidir.

IIS Uygulama Başlatma, uygulama havuzu başlatıldığında veya geri dönüştürüldüğünde uygulamaya HTTP isteği gönderen bir IIS özelliğidir. İstek, uygulamanın başlatılmasını tetikler. Varsayılan olarak, IIS uygulamayı başlatmak için uygulamanın kök URL'sine (/) bir istek gönderir (yapılandırmayla ilgili diğer ayrıntılar için bkz. Ek kaynaklar).

IIS Uygulama Başlatma rolü özelliğinin etkinleştirildiğini onaylayın:

Windows 7 veya üzeri masaüstü sistemlerinde IIS'yi yerel olarak kullanırken:

  1. Denetim Masası>Programlar>Programlar ve Özellikler> gidinWindows özelliklerini aç veya kapat seçeneğine gidin (ekranın sol tarafında).
  2. Internet Information Services>World Wide Web Hizmetleri>Uygulama Geliştirme Özellikleri'ni açın.
  3. Uygulama Başlatma onay kutusunu seçin.

Windows Server 2008 R2 veya üzerinde:

  1. Rol ve Özellik Ekleme Sihirbazı'nı açın.
  2. Rol hizmetlerini seçin panelinde Uygulama Geliştirme düğümünü açın.
  3. Uygulama Başlatma onay kutusunu seçin.

Sitede Uygulama Başlatma Modülü'nü etkinleştirmek için aşağıdaki yaklaşımlardan birini kullanın:

  • IIS Yöneticisi'ni kullanma:

    1. Bağlantılar panelinde Uygulama Havuzları'nı seçin.
    2. Listede uygulamanın uygulama havuzuna sağ tıklayın ve Gelişmiş Ayarlar'ı seçin.
    3. Varsayılan Başlatma ModuOnDemand'dır. Başlangıç Modu'nu AlwaysRunning olarak ayarlayın. Tamam seçeneğini işaretleyin.
    4. Bağlantılar panelinde Siteler düğümünü açın.
    5. Uygulamaya sağ tıklayın ve Web Sitesini Yönet>Gelişmiş Ayarlar'ı seçin.
    6. Varsayılan Önyükleme Etkin ayarı False'dur. Önyükleme Etkin öğesini True olarak ayarlayın. Tamam seçeneğini işaretleyin.
  • web.config dosyasını kullanarak, doAppInitAfterRestart öğesinde true ayarıyla <applicationInitialization> öğesini uygulamanın web.config dosyasındaki <system.webServer> öğelerine ekleyin:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <applicationInitialization doAppInitAfterRestart="true" />
        </system.webServer>
      </location>
    </configuration>
    

Boşta Kalma Süresi Zaman Aşımı

Yalnızca işlem içinde barındırılan uygulamalar için geçerlidir.

Uygulamanın boşta kalmasını önlemek için IIS Yöneticisi'ni kullanarak uygulama havuzunun boşta kalma zaman aşımı değerini ayarlayın:

  1. Bağlantılar panelinde Uygulama Havuzları'nı seçin.
  2. Listede uygulamanın uygulama havuzuna sağ tıklayın ve Gelişmiş Ayarlar'ı seçin.
  3. Varsayılan Boşta kalma zaman aşımı (dakika) değeri 20 dakikadır. Boşta kalma zaman aşımı (dakika) değerini 0 (sıfır) olarak ayarlayın. Tamam seçeneğini işaretleyin.
  4. Çalışan işlemini geri dönüştürün.

İşlem dışında barındırılan uygulamaların zaman aşımına uğramasını önlemek için aşağıdaki yaklaşımlardan birini kullanın:

Uygulama Başlatma Modülü ve Boşta Kalma Zaman Aşımı ek kaynakları

IIS yöneticileri için dağıtım kaynakları

Ek kaynaklar

ASP.NET Core uygulamasını IIS sunucusuna yayımlamaya yönelik bir öğretici deneyimi için bkz. ASP.NET Core uygulamasını IIS'ye yayımlama.

.NET Core Barındırma Paketini Yükleme

Desteklenen işletim sistemleri

Aşağıdaki işletim sistemleri desteklenmektedir:

  • Windows 7 veya üzeri
  • Windows Server 2008 R2 veya üzeri

HTTP.sys sunucusu (eski adı WebListener) IIS ile bir ters ara sunucu yapılandırmasında çalışmaz. Kestrel sunucusunu kullanın.

Azure'da barındırma hakkında bilgi için bkz. ASP.NET Core uygulamalarını Azure App Service'e dağıtma.

Sorun giderme kılavuzu için bkz. ASP.NET Core projelerinde sorun giderme ve hata ayıklama.

Desteklenen platformlar

32 bit (x86) veya 64 bit (x64) dağıtımı için yayımlanan uygulamalar desteklenir. Aşağıdaki durumlar dışında 32 bit uygulamayı 32 bit (x86) .NET Core SDK'sıyla dağıtabilirsiniz:

  • Uygulamaya, 64 bit uygulamaya sağlanan daha büyük sanal bellek adres alanı gerekiyor.
  • Uygulamaya daha büyük IIS yığın boyutu gerekiyor.
  • Uygulamanın 64 bit yerel bağımlılıkları var.

64 bit uygulamasını yayımlamak için 64 bit (x64) .NET Core SDK'sını kullanın. Konak sisteminde 64 bit çalışma zamanı mevcut olmalıdır.

ASP.NET Core varsayılan, platformlar arası bir HTTP sunucusu olan Kestrel sunucusu ile gönderilir.

IIS veya IIS Express kullanıldığında, uygulama Kestrel sunucusuyla IIS çalışan işleminden ayrı bir işlemde (işlem dışı) çalıştırılır.

ASP.NET Core uygulamaları IIS çalışan işleminden ayrı bir işlemde çalıştırıldığından, işlem yönetimini modül gerçekleştirir. İlk istek geldiğinde modül ASP.NET Core uygulaması için işlemi başlatır ve uygulama kapanırsa veya kilitlenirse uygulamayı yeniden başlatır. Bu temelde, Windows İşlem Etkinleştirme Hizmeti (WAS) tarafından yönetilen, işlem içinde çalıştırılan uygulamalarda görünen davranışla aynıdır.

Aşağıdaki diyagramda IIS, ASP.NET Core Modülü ve işlem dışında barındırılan uygulama arasındaki ilişki gösterilir:

ASP.NET Core Module

Web'den çekirdek modundaki HTTP.sys sürücüsüne istekler gelir. Sürücü istekleri web sitesinin yapılandırılmış bağlantı noktası üzerinden (genellikle 80 (HTTP) veya 443 (HTTPS)) IIS'ye yönlendirir. Modül istekleri uygulama için 80 veya 443 olmayan rastgele bir bağlantı noktası üzerinden Kestrel'e iletir.

Modül bağlantı noktasını başlatma sırasında bir ortam değişkeni aracılığıyla belirtir ve IIS Tümleştirme Ara Yazılımı sunucuyu http://localhost:{port} üzerinden dinleyecek şekilde yapılandırır. Ek denetimler gerçekleştirilir ve modülden kaynaklanmayan istekler reddedilir. Modül HTTPS iletmeyi desteklemez, dolayısıyla IIS tarafından HTTPS üzerinden alınan istekler bile HTTP üzerinden iletilir.

Kestrel isteği modülden aldıktan sonra, istek ASP.NET Core ara yazılım işlem hattına gönderilir. Ara yazılım işlem hattı isteği işler ve bir HttpContext örneği olarak uygulamanın mantığına geçirir. IIS Tümleştirmesi tarafından eklenen ara yazılım, isteği Kestrel'e iletme işlemini gerçekleştirmek için şemayı, uzak IP'yi ve yol tabanını güncelleştirir. Uygulamanın yanıtı IIS'ye geri geçirilir ve IIS de bunu geriye, isteği başlatan HTTP istemcisine gönderir.

CreateDefaultBuilderKestrel sunucusunu web sunucusu olarak yapılandırır ve ASP.NET Core Modülü için temel yolu ve bağlantı noktasını yapılandırarak IIS tümleştirmesini etkinleştirir.

ASP.NET Core Modülü arka uç işlemine atamak üzere dinamik bir bağlantı noktası oluşturur. CreateDefaultBuilderUseIISIntegration yöntemini çağırır. UseIISIntegration, Kestrel sunucusunu localhost IP adresindeki (127.0.0.1) dinamik bağlantı noktası üzerinden dinleyecek şekilde yapılandırır. Dinamik bağlantı noktası 1234 ise, Kestrel127.0.0.1:1234 konumunda dinler. Bu yapılandırma aşağıdakiler tarafından sağlanan diğer URL yapılandırmalarının yerini alır:

Modül kullanılırken UseUrls veya Kestrel'in Listen API'si çağrıları gerekli değildir. UseUrls veya Listen çağrılırsa, Kestrel yalnızca uygulama IIS olmadan çalıştırılırken belirtilen bağlantı noktası üzerinden dinler.

ASP.NET Core Modülü yapılandırma rehberi için bkz. IIS için ASP.NET Core Modülü (ANCM).

Barındırma hakkında daha fazla bilgi için bkz. ASP.NET Core'da barındırma.

Uygulama yapılandırması

IISIntegration bileşenlerini etkinleştirme

CreateWebHostBuilder yönteminde bir konak oluştururken (Program.cs) IIS tümleştirmesini etkinleştirmek için CreateDefaultBuilder yöntemini çağırın:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        ...

CreateDefaultBuilder hakkında daha fazla bilgi için bkz. ASP.NET Core Web Konağı.

IIS seçenekleri

Seçenek Varsayılan Ayar
AutomaticAuthentication true true olduğunda, IIS Sunucusu HttpContext.User özelliğini Windows Kimlik Doğrulaması tarafından kimliği doğrulanmış olarak ayarlar. false olduğunda, sunucu yalnızca HttpContext.User için bir kimlik sağlar ve AuthenticationScheme tarafından açıkça istendiğinde sınamaları yanıtlar. AutomaticAuthentication'ın çalışması için IIS'de Windows Kimlik Doğrulaması'nın etkinleştirilmesi gerekir. Daha fazla bilgi için bkz. Windows Kimlik Doğrulaması.
AuthenticationDisplayName null Oturum açma sayfalarında kullanıcılara gösterilen görünen adı ayarlar.

IIS seçeneklerini yapılandırmak için ConfigureServices yönteminde IISOptions için bir hizmet yapılandırması ekleyin. Aşağıdaki örnek uygulamanın HttpContext.Connection.ClientCertificate özelliğini doldurmasını engeller:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
Seçenek Varsayılan Ayar
AutomaticAuthentication true true olduğunda, IIS Tümleştirme Ara YazılımıHttpContext.User özelliğini Windows Kimlik Doğrulaması tarafından kimliği doğrulanmış olarak ayarlar. false olduğunda, ara yazılım yalnızca HttpContext.User için bir kimlik sağlar ve AuthenticationScheme tarafından açıkça istendiğinde sınamaları yanıtlar. AutomaticAuthentication'ın çalışması için IIS'de Windows Kimlik Doğrulaması'nın etkinleştirilmesi gerekir. Daha fazla bilgi için Windows Kimlik Doğrulaması konusuna bakın.
AuthenticationDisplayName null Oturum açma sayfalarında kullanıcılara gösterilen görünen adı ayarlar.
ForwardClientCertificate true true olduğunda ve MS-ASPNETCORE-CLIENTCERT istek üst bilgisi de mevcut olduğunda HttpContext.Connection.ClientCertificate doldurulur.

Ara sunucu ve yük dengeleyici senaryoları

İletilen Üst Bilgiler Ara Yazılımı'nı yapılandıran IIS Tümleştirme Ara Yazılımı ve ASP.NET Core Modülü şemayı (HTTP/HTTPS) ve isteğin kaynaklandığı uzak IP adresini iletecek şekilde yapılandırılır. Ek ara sunucuların ve yük dengeleyicilerin arkasında barındırılan uygulamalar için ek yapılandırma gerekebilir. Daha fazla bilgi için bkz. ASP.NET Core'u ara sunucular ve yük dengeleyicilerle çalışacak şekilde yapılandırma.

web.config dosyası

Web.config dosyası ASP.NET Core Modülü'nü yapılandırır. Web.config dosyasını oluşturma, dönüştürme ve yayımlama işlemleri proje yayımlandığında MSBuild hedefi (_TransformWebConfig) tarafından gerçekleştirilir. Bu hedef, Web SDK'sı hedefleri (Microsoft.NET.Sdk.Web) arasında yer alır. SDK, proje dosyasının üst kısmında ayarlanır:

<Project Sdk="Microsoft.NET.Sdk.Web">

Projede web.config dosyası yoksa, dosya ASP.NET Core Modülü'nü yapılandırmak için doğru processPath ve arguments ile oluşturulur ve yayımlanan çıkışa taşınır.

Projede web.config dosyası varsa, dosya ASP.NET Core Modülü'nü yapılandırmak için doğru processPath ve arguments ile dönüştürülür ve yayımlanan çıkışa taşınır. Dönüşüm dosyadaki IIS yapılandırma ayarlarını değiştirmez.

Web.config dosyası etkin IIS modüllerini denetleyen ek IIS yapılandırma ayarları sağlayabilir. ASP.NET Core uygulamalarıyla istekleri işleyebilen IIS modülleri hakkında bilgi için IIS modülleri konusuna bakın.

Web SDK'sının web.config dosyasını dönüştürmesini önlemek için proje dosyasında <IsTransformWebConfigDisabled> özelliğini kullanın:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Web SDK'sının dosyayı dönüştürmesi devre dışı bırakıldığında processPath ve arguments geliştirici tarafından el ile ayarlanmalıdır. Daha fazla bilgi için bkz. IIS için ASP.NET Core Modülü (ANCM).

Web.config dosyasının konumu

ASP.NET Core Modülü'nü doğru ayarlayabilmek için, dağıtılan uygulamanın içerik kökü yolunda (tipik olarak uygulama temel yolu) web.config dosyası mevcut olmalıdır. Bu, IIS'ye sağlanan web sitesi fiziksel yoluyla aynı konumdur. Web Dağıtımı'nı kullanarak birden fazla uygulamanın yayımlanmasını sağlamak için uygulamanın kökünde web.config dosyasının bulunması gereklidir.

Uygulamanın fiziksel yolunda <assembly>.runtimeconfig.json, <assembly>.xml (XML Belgeleri açıklamaları) ve <assembly>.deps.json gibi hassas dosyalar bulunur. Web.config dosyası mevcut olduğunda ve site normal şekilde başlatıldığında, bu hassas dosyalar istenirse ISS bunları kullanıma sunmaz. Web.config dosyası yoksa, yanlış adlandırıldıysa veya siteyi normal başlatma için yapılandıramazsa, IIS hassas dosyaları genel kullanıma sunabilir.

Web.config dosyası dağıtımda her zaman doğru adlandırılmış olarak ve siteyi normal başlatma için yapılandırabilecek şekilde mevcut olmalıdır. Web.config dosyasını hiçbir zaman üretim dağıtımından kaldırmayın.

Web.config’i dönüştürme

Yayımlama sırasında web.config dosyasını dönüştürmeniz gerekirse (örneğin yapılandırmaya, profile veya ortama bağlı olarak ortam değişkenlerini ayarlama) bkz. Web.config'i dönüştürme.

IIS yapılandırması

Windows Server İşletim Sistemleri

Web Sunucusu (IIS) sunucu rolünü etkinleştirin ve rol hizmetlerini oluşturun.

  1. Yönet menüsünden Rol ve Özellik Ekle sihirbazını veya Sunucu Yöneticisi'ndeki bağlantıyı kullanın. Sunucu Rolleri adımında Web Sunucusu (IIS) kutusunu işaretleyin.

    The Web Server IIS role is selected in the Select server roles step.

  2. Özellikler adımından sonra Web Sunucusu (IIS) için Rol hizmetleri adımı yüklenir. İstenen IIS rol hizmetlerini seçin veya sağlanan varsayılan rol hizmetlerini kabul edin.

    The default role services are selected in the Select role services step.

    Windows Kimlik Doğrulaması (İsteğe Bağlı)
    Windows Kimlik Doğrulaması'nı etkinleştirmek için şu düğümleri genişletin: Web Sunucusu>Güvenlik. Windows Kimlik Doğrulaması özelliğini seçin. Daha fazla bilgi için bkz. Windows Kimlik Doğrulaması <windowsAuthentication> ve Windows kimlik doğrulamasını yapılandırma.

    WebSockets (İsteğe Bağlı)
    WebSockets, ASP.NET Core 1.1 veya üzerinde desteklenir. WebSockets'i etkinleştirmek için şu düğümleri genişletin: Web Sunucusu>Uygulama Geliştirme. WebSocket Protokolü özelliğini seçin. Daha fazla bilgi için bkz. WebSockets.

  3. Web sunucusu rolünü ve hizmetlerini yüklemek için Onay adımıyla devam edin. Web Sunucusu (IIS) rolü yüklendikten sonra sunucunun/IIS'nin yeniden başlatılması gerekmez.

Windows masaüstü işletim sistemleri

IIS Yönetim Konsolu'nu ve World Wide Web Hizmetleri'ni etkinleştirin.

  1. Denetim Masası>Programlar>Programlar ve Özellikler> gidinWindows özelliklerini aç veya kapat seçeneğine gidin (ekranın sol tarafında).

  2. Internet Information Services düğümünü açın. Web Yönetimi Araçları düğümünü açın.

  3. IIS Yönetim Konsolu kutusunu işaretleyin.

  4. World Wide Web Hizmetleri kutusunu işaretleyin.

  5. World Wide Web Hizmetleri için varsayılan özellikleri seçin veya IIS özelliklerini özelleştirin.

    Windows Kimlik Doğrulaması (İsteğe Bağlı)
    Windows Kimlik Doğrulaması'nı etkinleştirmek için şu düğümleri genişletin: World Wide Web Hizmetleri>Güvenlik. Windows Kimlik Doğrulaması özelliğini seçin. Daha fazla bilgi için bkz. Windows Kimlik Doğrulaması <windowsAuthentication> ve Windows kimlik doğrulamasını yapılandırma.

    WebSockets (İsteğe Bağlı)
    WebSockets, ASP.NET Core 1.1 veya üzerinde desteklenir. WebSockets'i etkinleştirmek için şu düğümleri genişletin: World Wide Web Hizmetleri>Uygulama Geliştirme Özellikleri. WebSocket Protokolü özelliğini seçin. Daha fazla bilgi için bkz. WebSockets.

  6. IIS yüklemesi bir yeniden başlatma gerektiriyorsa sistemi yeniden başlatın.

IIS Management Console and World Wide Web Services are selected in Windows Features.

.NET Core Barındırma Paketini Yükleme

Barındırma sisteminde .NET Core Barındırma Paketi'ni yükleyin. Paket .NET Core Çalışma Zamanı'nı, .NET Core Kitaplığı'nı ve ASP.NET Core Modülü'nü yükler. Modül ASP.NET Core uygulamalarının IIS'nin arkasında çalıştırılmasına olanak tanır.

Önemli

Barındırma Paketi IIS'den önce yüklenirse paket yüklemesinin onarılması gerekir. IIS'yi yükledikten sonra Barındırma Paketi yükleyicisini yeniden çalıştırın.

Barındırma Paketi .NET Core'un 64 bit (x64) sürümü yüklendikten sonra yüklenirse, SDK'lar eksik gibi görünebilir (Hiçbir .NET Core SDK'sı algılanmadı). Sorunu çözmek için bkz. ASP.NET Core projelerinde sorun giderme ve hata ayıklama.

İndir

  1. .NET Core'u indir sayfasına gidin.
  2. İstediğiniz .NET Core sürümünü seçin.
  3. Uygulamaları çalıştır - Çalışma Zamanı sütununda istenen .NET Core çalışma zamanı sürümünü bulun.
  4. Barındırma Paketi bağlantısını kullanarak yükleyiciyi indirin.

Uyarı

Bazı yükleyiciler kullanım ömrünün sonuna (EOL) ulaşmış ve artık Microsoft tarafından desteklenmeyen sürümler içerir. Daha fazla bilgi için destek ilkesi bölümüne bakın.

Barındırma Paketini yükleme

  1. Sunucuda yükleyiciyi çalıştırın. Yönetici komut kabuğundan yükleyiciyi çalıştırırken aşağıdaki parametreler kullanılabilir:

    • OPT_NO_ANCM=1: ASP.NET Core Modülü'nü yüklemeyi atlayın.
    • OPT_NO_RUNTIME=1: .NET Core çalışma zamanını yüklemeyi atlayın. Sunucu yalnızca kendi içinde dağıtımları (SCD) barındırdığında kullanılır.
    • OPT_NO_SHAREDFX=1: ASP.NET Paylaşılan Çerçevesi'ni (ASP.NET çalışma zamanı) yüklemeyi atlayın. Sunucu yalnızca kendi içinde dağıtımları (SCD) barındırdığında kullanılır.
    • OPT_NO_X86=1: x86 çalışma zamanlarını yüklemeyi atlayın. Bu parametreyi, 32 bit uygulamalar barındırmayacağınızı bildiğiniz durumlarda kullanın. Gelecekte hem 32 bit hem de 64 bit uygulamalar barındırma olasılığınız varsa bu parametreyi kullanmayın ve her iki çalışma zamanını da yükleyin.
    • OPT_NO_SHARED_CONFIG_CHECK=1: Paylaşılan yapılandırma (applicationHost.config) IIS yüklemesiyle aynı makinede yer aldığında IIS Paylaşılan Yapılandırması'nı kullanmak için denetimi devre dışı bırakın. Yalnızca ASP.NET Core 2.2 veya üzeri Barındırma Paketi yükleyicilerinde kullanılabilir. Daha fazla bilgi için bkz. IIS için ASP.NET Core Modülü (ANCM).
  2. Sistemi yeniden başlatın veya komut kabuğunda aşağıdaki komutları yürütün:

    net stop was /y
    net start w3svc
    

    IIS yeniden başlatıldığında sistem PATH ortam değişkeninde yükleyici tarafından yapılan bir değişiklik alınır.

Barındırma Paketi'ni yüklerken IIS'de tek tek siteleri el ile durdurmanız gerekmez. IIS yeniden başlatıldığında barındırılan uygulamalar (IIS siteleri) yeniden başlatılır. Uygulamalar Uygulama Başlatma Modülü'nden gelenler de dahil olmak üzere ilk isteklerini aldıklarında yeniden başlatılır.

ASP.NET Core, paylaşılan çerçeve paketlerinin yama sürümleri için ileri sarma davranışını benimser. IIS tarafından barındırılan uygulamalar IIS ile yeniden başlatılırsa, ilk isteklerini aldıklarında başvurdukları paketlerin en son yama sürümleriyle yüklenir. IIS yeniden başlatılmazsa, uygulamalar çalışan işlemleri geri dönüştürüldüğünde ve ilk isteklerini aldıklarında yeniden başlatılır ve ileri sarma davranışı sergiler.

Dekont

IIS Paylaşılan Yapılandırması hakkında bilgi için bkz. IIS Paylaşılan Yapılandırması ile ASP.NET Core Modülü.

Visual Studio ile yayımlarken Web Dağıtımı'nı yükleme

Web Dağıtımı ile uygulamaları sunuculara dağıtırken, sunucuya Web Dağıtımı'nın en son sürümünü yükleyin. Web Dağıtımı'nı yüklemek için Web Platformu Yükleyicisi'ni (WebPI) kullanın veya yükleyiciyi doğrudan Microsoft İndirme Merkezi'nden alın. Tercih edilen yöntem WebPI kullanmaktır. WebPI, barındırma sağlayıcıları için tek başına bir kurulum ve bir yapılandırma sunar.

IIS sitesini oluşturma

  1. Barındırma sisteminde, uygulamanın yayımlanan klasörleriyle dosyalarını içerecek bir klasör oluşturun. Aşağıdaki adımda klasörün yolu, uygulamanın fiziksel yolu olarak IIS'ye sağlanır. Uygulamanın dağıtım klasörü ve dosya düzeni hakkında daha fazla bilgi için bkz. ASP.NET Core dizin yapısı.

  2. IIS Yöneticisi'nde, Bağlantılar panelinde sunucunun düğümünü açın. Siteler klasörüne sağ tıklayın. Bağlam menüsünden Web Sitesi Ekle'yi seçin.

  3. Site adı girin ve Fiziksel yol olarak uygulamanın dağıtım klasörünü ayarlayın. Bağlama yapılandırmasını sağlayın ve Tamam'ı seçerek web sitesini oluşturun:

    Supply the Site name, physical path, and Host name in the Add Website step.

    Uyarı

    En üst düzey joker karakter bağlamaları (http://*:80/ ve http://+:80) kullanılmamalıdır. En üst düzey joker karakter bağlamaları uygulamanızda güvenlik açıklarına neden olabilir. Bu durum hem güçlü hem de zayıf joker karakterler için geçerlidir. Joker karakterler yerine açık konak adları kullanın. Üst etki alanının tamamını denetliyorsanız alt etki alanı bağlamasının (örneğin *.mysub.com) böyle bir güvenlik riski yoktur (güvenlik açığı olan *.com bağlamasından farklı olarak). Daha fazla bilgi için bkz. RFC 9110: HTTP Semantiği (Bölüm 7.2: Konak ve :yetkili).

  4. Sunucunun düğümü altında Uygulama Havuzları'nı seçin.

  5. Sitenin uygulama havuzuna sağ tıklayın ve bağlam menüsünden Temel Ayarlar'ı seçin.

  6. Uygulama Havuzunu Düzenle penceresinde .NET CLR sürümü'nü Yönetilen Kod Yok olarak ayarlayın:

    Set No Managed Code for the .NET CLR version.

    ASP.NET Core ayrı bir işlemde çalıştırılır ve çalışma zamanını yönetir. ASP.NET Core masaüstü CLR'nin (.NET CLR) yüklenmesine bağlı değildir; uygulamayı çalışan işleminde barındırmak için .NET Core için Core Ortak Dil Çalışma Zamanı Modülü (CoreCLR) önyüklenir. .NET CLR sürümü olarak Yönetilen Kod Yok seçeneğinin ayarlanması isteğe bağlıdır ama önerilir.

  7. ASP.NET Core 2.2 veya üzeri: İşlem içi barındırma modeli kullanan 64 bit (x64) kendi içinde dağıtım için, 32 bit (x86) işlemlerinin uygulama havuzunu devre dışı bırakın.

    IIS Yöneticisi'nin Eylemler kenar çubuğunda >Uygulama Havuzları, Uygulama Havuzu Varsayılanlarını Ayarla'yı veya Gelişmiş Ayarlar'ı seçin. 32 Bit Uygulamaları Etkinleştir'i bulun ve değerini False olarak ayarlayın. Bu ayar işlem dışı barındırma için dağıtılan uygulamaları etkilemez.

  8. İşlem modeli kimliğinin düzgün izinlere sahip olduğunu onaylayın.

    Uygulama havuzunun ApplicationPoolIdentity olan varsayılan kimliği (İşlem Modeli>Identity) başka bir kimlikle değiştirilirse, yeni kimliğin uygulamanın klasörüne, veritabanına ve diğer gerekli kaynaklarına erişmek için gereken izinlere sahip olduğunu doğrulayın. Örneğin uygulama havuzu için uygulamanın dosyaları okuduğu ve yazdığı klasörlere okuma ve yazma erişimi gerekir.

Windows Kimlik Doğrulaması yapılandırması (İsteğe Bağlı)
Daha fazla bilgi için bkz. Windows kimlik doğrulamasını yapılandırma.

Uygulamayı dağıtma

Uygulamayı IIS sitesini oluşturma bölümünde oluşturulan IIS Fiziksel yol klasörüne dağıtın. Web Dağıtımı, dağıtım için önerilen mekanizmadır ama uygulamayı projenin publish klasöründen barındırma sisteminin dağıtım klasörüne taşımak için çeşitli seçenekler vardır.

Visual Studio ile Web Dağıtımı

Web Dağıtımı ile kullanılacak bir yayımlama oluşturmayı öğrenmek için ASP.NET Core uygulama dağıtımı için Visual Studio yayımlama profilleri konusuna bakın. Barındırma sağlayıcısı bir Yayımlama Profili sağlıyorsa veya bu profili oluşturmayı destekliyorsa, profili indirin ve Visual Studio Yayımla iletişim kutusunu kullanarak içeri aktarın:

Publish dialog page

Visual Studio'nun dışında Web Dağıtımı

Web Dağıtımı Visual Studio'nun dışında komut satırından da kullanılabilir. Daha fazla bilgi için bkz. Web Dağıtım Aracı.

Web Dağıtımı'nın alternatifleri

Uygulamayı barındırma sistemine taşımak için el ile kopyalama, Xcopy, Robocopy veya PowerShell gibi çeşitli yöntemlerden herhangi birini kullanın.

IIS'ye ASP.NET Core dağıtımı hakkında daha fazla bilgi için IIS yöneticileri için dağıtım kaynakları bölümüne bakın.

Web sitesine göz atma

Uygulama barındırma sistemine dağıtıldıktan sonra uygulamanın genel uç noktalarına bir istek yöneltin.

Aşağıdaki örnekte site 80Bağlantı Noktası üzerindeki www.mysite.com IIS Konak adına bağlıdır. http://www.mysite.com konumuna bir istek yöneltilir:

The Microsoft Edge browser has loaded the IIS startup page.

Kilitli dağıtım dosyaları

Uygulama çalıştırılırken dağıtım klasöründeki dosyalar kilitlenir. Dağıtım sırasında kilitli dosyaların üzerine yazılamaz. Dağıtımda kilitli dosyaları serbest bırakmak için aşağıdaki yaklaşımlardan birini kullanarak uygulama havuzunu durdurun:

  • Web Dağıtımı'nı kullanın ve proje dosyasında Microsoft.NET.Sdk.Web SDK'sına başvurun. Web uygulamasının köküne bir app_offline.htm dosyası yerleştirilir. Dosya mevcut olduğunda ASP.NET Core Modülü uygulamayı düzgün bir şekilde kapatır ve dağıtım sırasında app_offline.htm dosyasını kullanıma sunar. Daha fazla bilgi için bkz. ASP.NET Core Modülü yapılandırma başvurusu.

  • Sunucudaki IIS Yöneticisi'nde uygulama havuzunu el ile durdurun.

  • app_offline.htm dosyasını bırakmak için PowerShell kullanın (PowerShell 5 veya üzeri gerekir):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    
    

Veri koruması

ASP.NET Core Veri Koruma yığını, kimlik doğrulamasında kullanılan ara yazılım da dahil olmak üzere çeşitli ASP.NET Core ara yazılımlarında kullanılır. Veri Koruma API'leri kullanıcı kodu tarafından çağrılmıyor olsa bile, kalıcı bir şifreleme anahtar deposu oluşturmak için dağıtım betiğiyle veya kullanıcı kodu içinde yapılandırılmalıdır. Veri koruması yapılandırılmazsa anahtarlar bellekte tutulur ve uygulama yeniden başlatıldığında atılır.

Anahtarlık bellekte depolanıyorsa uygulama yeniden başlatıldığında:

IIS altında veri korumasını anahtarlığın kalıcı olmasını sağlayacak şekilde yapılandırmak için aşağıdaki yaklaşımlardan birini kullanın:

  • Veri Koruması Kayıt Defteri Anahtarlarını Oluşturma

    ASP.NET Core uygulamaları tarafından kullanılan veri koruma anahtarları uygulamaların dışındaki kayıt defterinde depolanır. Belirli bir uygulamaya yönelik anahtarların kalıcı olmasını sağlamak için uygulama havuzuna kayıt defteri anahtarları oluşturun.

    Tek başına, webfarm olmayan IIS yüklemeleri için, ASP.NET Core uygulamasıyla kullanılan her uygulama havuzunda Data Protection Provision-AutoGenKeys.ps1 PowerShell betiği kullanılabilir. Bu betik HKLM kayıt defterinde yalnızca uygulamanın uygulama havuzu çalışan işlemi hesabıyla erişilebilen bir kayıt defteri anahtarı oluşturur. Anahtarlar, makine genelindeki bir anahtarla DPAPI kullanılarak şifrelenir.

    Web grubu senaryolarında, uygulama kendi veri koruma anahtarlığını depolamak için bir UNC yolu kullanacak şekilde yapılandırılabilir. Varsayılan olarak veri koruma anahtarları şifrelenmez. Ağ paylaşımına yönelik dosya izinlerinin, uygulamanın altında çalıştırıldığı Windows hesabıyla sınırlı olduğundan emin olun. Bekleyen anahtarları korumak için X509 sertifikası kullanılabilir. Kullanıcıların sertifikaları karşıya yüklemesine olanak tanıyan bir mekanizma düşünün: Sertifikaları kullanıcının güvenilen sertifika deposuna yerleştirin ve kullanıcının uygulama çalıştırdığı tüm makinelerde bu deponun kullanılabildiğinden emin olun. Ayrıntılar için bkz. ASP.NET Core Veri Koruması'nı yapılandırma.

  • IIS Uygulama Havuzu'nu kullanıcı profilini yükleyecek şekilde yapılandırma

    Bu ayar uygulama havuzu için Gelişmiş Ayarlar'ın altında yer alan İşlem Modeli bölümündedir. Kullanıcı Profilini Yükle seçeneğini True olarak ayarlayın. True olarak ayarlandığında anahtarlar kullanıcı profili dizininde depolanır ve kullanıcı hesabına özgü bir anahtarla DPAPI kullanılarak korunur. Anahtarlar kalıcı olarak %LOCALAPPDATA%/ASP.NET/DataProtection-Keys klasöründe yer alır.

    Uygulama havuzunun setProfileEnvironment özniteliği de etkinleştirilmelidir. setProfileEnvironment için varsayılan değer true değeridir. Bazı senaryolarda (örneğin Windows işletim sistemi) setProfileEnvironmentfalse olarak ayarlanır. Anahtarlar beklendiği gibi kullanıcı profili dizininde depolanmıyorsa:

    1. %windir%/system32/inetsrv/config klasörüne gidin.
    2. applicationHost.config dosyasını açın.
    3. <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> öğesini bulun.
    4. Varsayılan değeri true olan setProfileEnvironment özniteliğinin mevcut olmadığını veya özniteliğin açıkça true değerine ayarlanmadığını onaylayın.
  • Dosya sistemini anahtarlık deposu olarak kullanma

    Uygulama kodunu, dosya sistemini anahtarlık deposu olarak kullanacak şekilde ayarlayın. Anahtarlığı korumak için X509 sertifikası kullanın ve sertifikanın güvenilen bir sertifika olduğundan emin olun. Sertifika otomatik olarak imzalandıysa sertifikayı Güvenilen Kök deposuna yerleştirin.

    Web grubunda IIS kullanırken:

    • Tüm makinelerin erişebildiği bir dosya paylaşımı kullanın.
    • Her makineye bir X509 sertifikası dağıtın. Kodda veri korumasını yapılandırın.
  • Veri koruması için makine genelinde bir ilke ayarlama

    Veri koruma sisteminin, Veri Koruma API'lerini kullanan tüm uygulamalar için varsayılan bir makine genelinde illke ayarlamaya yönelik sınırlı desteği vardır. Daha fazla bilgi için bkz. ASP.NET Core Veri Koruması'na Genel Bakış.

Sanal Dizinler

ASP.NET Core uygulamalarıyla IIS Sanal Dizinleri desteklenmez. Uygulama bir alt uygulama olarak barındırılabilir.

Alt uygulamalar

ASP.NET Core uygulaması bir IIS alt uygulaması (alt uygulama) olarak barındırılabilir. Alt uygulamanın yolu kök uygulama URL'sinin bir parçası olur.

Alt uygulama bir işleyici olarak ASP.NET Core Modülü'nü içermemelidir. Modül alt uygulamanın web.config dosyasına işleyici olarak eklenirse, alt uygulamaya göz atmaya çalışıldığında hatalı config dosyasına başvuran bir 500.19 İç Sunucu Hatası alınır.

Aşağıdaki örnekte ASP.NET Core alt uygulaması için yayımlanmış bir web.config dosyası gösterilir:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <aspNetCore processPath="dotnet" 
      arguments=".\MyApp.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

ASP.NET Core olmayan bir alt uygulama ASP.NET Core uygulamasında barındırıldığında, alt uygulamanın web.config dosyasında devralınan işleyiciyi açıkça kaldırın:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="aspNetCore" />
    </handlers>
    <aspNetCore processPath="dotnet" 
      arguments=".\MyApp.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

Alt uygulama içindeki statik varlık bağlantıları tilde-eğik çizgi (~/) gösterimini kullanmalıdır. Tilde-eğik çizgi gösterimi, alt uygulamanın yol tabanını işlenen göreli bağlantının önüne eklemek için bir Etiket Yardımcısını tetikler. /subapp_path yolundaki bir alt uygulama için, src="~/image.png" ile bağlantılı bir resim src="/subapp_path/image.png" olarak işlenir. Kök uygulamanın Statik Dosya Ara Yazılımı statik dosya isteğini işlemez. İstek alt uygulamanın Statik Dosya Ara Yazılımı tarafından işlenir.

Statik varlığın src özniteliği bir mutlak yola ayarlanırsa (örneğinsrc="/image.png"), bağlantı alt uygulamanın yol tabanı olmadan işlenir. Kök uygulamanın Statik Dosya Ara Yazılımı kök uygulamanın web kökünden varlığa hizmet vermeyi dener ve statik varlık kök uygulamadan kullanıma sunulmadığı sürece bu deneme 404 - Bulunmadı yanıtıyla sonuçlanır.

ASP.NET Core uygulamasını bir alt uygulama olarak ASP.NET Core uygulamasının altında barındırmak için:

  1. Alt uygulama için bir uygulama havuzu oluşturun. Uygulamayı çalışan işleminde barındırmak için masaüstü CLR (.NET CLR) değil Core Ortak Dil Çalışma Zamanı Modülü (CoreCLR) önyüklendiğinden, .NET CLR Sürümü'nü Yönetilen Kod Yok olarak ayarlayın.

  2. Alt uygulama kök sitenin altındaki bir klasörde yer alırken kök siteyi IIS Yöneticisi'ne ekleyin.

  3. IIS Yöneticisi'nde alt uygulama klasörüne sağ tıklayın ve Uygulamaya Dönüştür'ü seçin.

  4. Uygulama Ekle iletişim kutusunda Uygulama Havuzu için Seç düğmesini kullanarak alt uygulama için oluşturduğunuz uygulama havuzunu atayın. Tamam seçeneğini işaretleyin.

İşlem içi barındırma modelini kullanırken, alt uygulamaya ayrı uygulama havuzu ataması bir gereksinimdir.

İşlem içi barındırma modeli ve ASP.NET Core Modülü'nü yapılandırma hakkında daha fazla bilgi için bkz. IIS için ASP.NET Core Modülü (ANCM).

Web.config ile IIS yapılandırması

ASP.NET Core Modülü ile ASP.NET Core uygulamaları için kullanılabilen IIS senaryolarında, IIS yapılandırmasını web.config dosyasının <system.webServer> bölümü etkiler. Örneğin IIS yapılandırması dinamik sıkıştırma için kullanılabilir. IIS sunucu düzeyinde dinamik sıkıştırmayı kullanacak şekilde yapılandırıldıysa, uygulamanın web.config dosyasındaki <urlCompression> öğesi ASP.NET Core uygulaması için bunu devre dışı bırakabilir.

Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:

Yalıtılmış uygulama havuzlarında çalıştırılan tek tek uygulamalara ortam değişkenleri ayarlamak için (IIS 10.0 veya üzerinde desteklenir), IIS başvuru belgelerinde Ortam Değişkenleri <environmentVariables> konusunun AppCmd.exe komutu bölümüne bakın.

ASP.NET Core tarafından kullanılmayan bölümler

Web.config dosyasında ASP.NET 4.x uygulamalarının yapılandırma bölümleri ASP.NET Core uygulamaları tarafından yapılandırma için kullanılmaz:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

ASP.NET Core uygulamaları diğer yapılandırma sağlayıcıları kullanılarak yapılandırılır. Daha fazla bilgi için bkz. Yapılandırma.

Uygulama Havuzları

Sunucuda birden fazla web sitesi barındırılırken, her uygulamayı kendi uygulama havuzunda çalıştırarak uygulamaları birbirinden yalıtmanızı öneririz. IIS Web Sitesi Ekle iletişim kutusu varsayılan olarak bu yapılandırmayı kullanır. Site adı sağlandığında, bu metin otomatik olarak Uygulama havuzu metin kutusuna aktarılır. Site eklendiğinde site adı kullanılarak yeni bir uygulama havuzu oluşturulur.

Uygulama Havuzu Identity

Uygulama havuzu kimlik hesabı, etki alanlarını veya yerel hesapları oluşturmak ve yönetmek zorunda kalmadan uygulamanın benzersiz bir hesap altında çalıştırılmasına olanak tanır. IIS 8.0 veya üzerinde, IIS Yönetici Çalışan İşlemi (WAS) yeni uygulama havuzunun adıyla sanal bir hesap oluşturur ve uygulama havuzunun çalışan işlemlerini varsayılan olarak bu hesap altında çalıştırılır. IIS Yönetim Konsolu'nda uygulama havuzuna yönelik Gelişmiş Ayarlar'ın altında Identity öğesinin ApplicationPoolIdentity kullanacak şekilde ayarlandığından emin olun:

Application pool advanced settings dialog

IIS yönetim işlemi Windows Güvenlik Sistemi'nde uygulama havuzunun adıyla güvenli bir tanımlayıcı oluşturur. Bu kimlik kullanılarak kaynakların güvenliği sağlanabilir. Öte yandan bu kimlik gerçek bir kullanıcı hesabı değildir ve Windows Kullanıcı Yönetim Konsolu'nda gösterilmez.

IIS çalışan işlemine uygulama üzerinde yükseltilmiş erişim gerekiyorsa, uygulamayı içeren dizin için Erişim Denetim Listesi'ni (ACL) değiştirin:

  1. Windows Gezgini'ni açın ve dizine gidin.

  2. Dizine sağ tıklayın ve Özellikler'i seçin.

  3. Güvenlik sekmesinin altında Düzenle düğmesini ve sonra da Ekle düğmesini seçin.

  4. Konumlar düğmesini seçin ve sistemin seçildiğinden emin olun.

  5. Seçilecek nesne adlarını girin alanında IIS AppPool\<app_pool_name> girin. Adları Denetle düğmesini seçin. DefaultAppPool için IIS AppPool\DefaultAppPool kullanarak adları denetleyin. Adları Denetle düğmesi seçildiğinde nesne adları alanında DefaultAppPool değeri gösterilir. Uygulama havuzu adını doğrudan nesne adları alanına girmek mümkün değildir. Nesne adını denetlerken IIS AppPool\<app_pool_name> biçimini kullanın.

    Select users or groups dialog for the app folder: The app pool name of

  6. Tamam seçeneğini işaretleyin.

    Select users or groups dialog for the app folder: After selecting

  7. Okuma ve yürütme izinleri varsayılan olarak verilmelidir. Gerekirse ek izinler sağlayın.

Komut isteminde ICACLS aracı kullanılarak da erişim verilebilir. Örnek olarak DefaultAppPool kullanıldığında aşağıdaki komut kullanılır:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

Daha fazla bilgi için icacls konusuna bakın.

HTTP/2 desteği

HTTP/2, aşağıdaki temel gereksinimleri karşılayan işlem dışı dağıtımlar için desteklenir:

  • Windows Server 2016/Windows 10 veya üzeri; IIS 10 veya üzeri
  • Genel kullanıma yönelik uç sunucu bağlantıları HTTP/2 kullanır ama Kestrel sunucusuna ters ara sunucu bağlantısı HTTP/1.1 kullanır.
  • Hedef çerçeve: HTTP/2 bağlantısı tamamen IIS tarafından işlendiğinden, işlem dışı dağıtımlar için geçerli değildir.
  • TLS 1.2 veya üzeri bağlantısı

HTTP/2 bağlantısı kuruluyorsa HttpRequest.ProtocolHTTP/1.1 bildirir.

HTTP/2 varsayılan olarak etkinleştirilir. HTTP/2 bağlantısı kurulamazsa bağlantılar HTTP/1.1'e geri döner. IIS dağıtımlarıyla HTTP/2 yapılandırması hakkında daha fazla bilgi için bkz. IIS üzerinde HTTP/2.

CORS denetim öncesi istekleri

Bu bölüm yalnızca .NET Framework'ü hedefleyen ASP.NET Core uygulamalarına yöneliktir.

.NET Framework'ü hedefleyen ASP.NET Core uygulaması için, IIS'de OPTIONS istekleri varsayılan olarak uygulamaya geçirilmez. OPTIONS isteklerini göndermek üzere web.config dosyasında uygulamanın IIS işleyicilerini yapılandırmayı öğrenmek için bkz. ASP.NET Web API 2'de kaynaklar arası istekleri etkinleştirme: CORS Nasıl Çalışır?.

IIS yöneticileri için dağıtım kaynakları

Ek kaynaklar