ASP.NET Çekirdek Modülü ve IIS'nin gelişmiş yapılandırması

Bu makale, ASP.NET Çekirdek Modülü ve IIS için gelişmiş yapılandırma seçeneklerini ve senaryolarını kapsar.

Yığın boyutunu değiştirme

Yalnızca işlem içi barındırma modeli kullanılırken geçerlidir.

Dosyadaki bayt web.config cinsinden ayarı kullanarak stackSize yönetilen yığın boyutunu yapılandırın. Varsayılan boyut 1.048.576 bayttır (1 MB). Aşağıdaki örnek yığın boyutunu 2 MB (2.097.152 bayt) olarak değiştirir:

<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="false"
    stdoutLogFile="\\?\%home%\LogFiles\stdout"
    hostingModel="inprocess">
  <handlerSettings>
    <handlerSetting name="stackSize" value="2097152" />
  </handlerSettings>
</aspNetCore>

Yapılandırmada döndürmeye izin verme

Bu disallowRotationOnConfigChange ayar, genel yapılandırmada yapılan bir değişikliğin tüm sitelerin geri dönüştürülmesine neden olmaması gereken mavi/yeşil senaryolara yöneliktir. Bu bayrak doğru olduğunda, yalnızca sitenin kendisiyle ilgili değişiklikler geri dönüşüme neden olur. Örneğin, web.config'i değişirse veya IIS'nin perspektifinden sitenin yoluyla ilgili bir şey değişirse site geri dönüşüme dönüşür. Ancak applicationHost.config dosyasında yapılan genel bir değişiklik, bir uygulamanın geri dönüştürülmesine neden olmaz. Aşağıdaki örnek bu ayarı true olarak ayarlar:

<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="false"
    stdoutLogFile="\\?\%home%\LogFiles\stdout"
    hostingModel="inprocess">
  <handlerSettings>
    <handlerSetting name="disallowRotationOnConfigChange" value="true" />
  </handlerSettings>
</aspNetCore>

Bu ayar API'ye karşılık gelir ApplicationPoolRecycling.DisallowRotationOnConfigChange

Ara sunucu yapılandırması HTTP protokol ve eşleştirme belirteci kullanır

Yalnızca işlem dışı barındırma için geçerlidir.

ASP.NET Çekirdek Modülü arasında oluşturulan ve Kestrel HTTP protokolünü kullanan ara sunucu. Modül Kestrel ile sunucunun dışında bir konumdan gelen trafiği dinleme riski yoktur.

bir eşleştirme belirteci, tarafından Kestrel alınan isteklerin IIS tarafından proksied olduğunu ve başka bir kaynaktan gelmediğini garanti etmek için kullanılır. Eşleştirme belirteci oluşturulur ve modül tarafından bir ortam değişkenine (ASPNETCORE_TOKEN) ayarlanır. Eşleştirme belirteci de her prxied isteğinde bir üst bilgi (MS-ASPNETCORE-TOKEN) olarak ayarlanır. IIS Ara Yazılımı, aldığı her isteği denetlediğinden, eşleştirme belirteci üst bilgisi değerinin ortam değişkeni değeriyle eşleşdiğini onaylar. Belirteç değerleri eşleşmezse istek günlüğe kaydedilir ve reddedilir. Eşleştirme belirteci ortam değişkeni ve modül Kestrel arasındaki trafiğe sunucunun kapalı bir konumundan erişilemez. Eşleştirme belirteci değerini bilmeden, bir saldırgan IIS Ara Yazılımı'nda denetimi atlayan istekler gönderemez.

IIS Paylaşılan Yapılandırması ile ASP.NET Çekirdek Modülü

ASP.NET Çekirdek Modülü yükleyicisi TrustedInstaller hesabın ayrıcalıklarıyla çalışır. Yerel sistem hesabının IIS Paylaşılan Yapılandırması tarafından kullanılan paylaşım yolu için değiştirme izni olmadığından, paylaşımdaki dosyada applicationHost.config modül ayarlarını yapılandırmaya çalışırken yükleyici erişim reddedildi hatası oluşturur.

IIS yüklemesiyle aynı makinede IIS Paylaşılan Yapılandırması kullanırken, parametresi olarak ayarlanmış 1ASP.NET Core Barındırma Paketi yükleyicisini OPT_NO_SHARED_CONFIG_CHECK çalıştırın:

dotnet-hosting-{VERSION}.exe OPT_NO_SHARED_CONFIG_CHECK=1

Paylaşılan yapılandırmanın yolu IIS yüklemesi ile aynı makinede değilse şu adımları izleyin:

  1. IIS Paylaşılan Yapılandırmasını devre dışı bırakın.
  2. Yükleyiciyi çalıştırın.
  3. Güncelleştirilmiş applicationHost.config dosyayı dosya paylaşımına aktarın.
  4. IIS Paylaşılan Yapılandırmasını yeniden etkinleştirin.

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.

Uygulama yeniden başlatıldığında Data Protection anahtar halkası bellekte depolanıyorsa:

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:

  • Data Protection Kayıt Defteri anahtarları oluşturma

    ASP.NET Core uygulamaları tarafından kullanılan Veri Koruma anahtarları, uygulamaların dışındaki kayıt defterinde depolanır. Belirli bir uygulamanın anahtarlarını kalıcı hale getirmek için uygulama havuzu için 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 havuzunun çalışan işlem hesabı tarafından erişilebilen bir Kayıt Defteri anahtarı oluşturur. Anahtarlar, makine genelindeki bir anahtarla DPAPI kullanılarak şifrelenir.

    Web grubu senaryolarında bir uygulama, Veri Koruma anahtar halkasını depolamak için UNC yolu kullanacak şekilde yapılandırılabilir. Varsayılan olarak, anahtarlar şifrelenmez. Ağ paylaşımı için dosya izinlerinin, uygulamanın altında çalıştığı 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 izin veren bir mekanizma düşünün. Sertifikaları kullanıcının güvenilen sertifika deposuna yerleştirin ve kullanıcının uygulamasının çalıştığı tüm makinelerde kullanılabilir olduklarından emin olun. Daha fazla bilgi için bkz . ASP.NET Çekirdek 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 klasörde kalıcıdır %LOCALAPPDATA%/ASP.NET/DataProtection-Keys .

    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:

  • Veri Koruması için makine genelinde ilke ayarlama

    Data Protection sistemi, Data Protection API'lerini kullanan tüm uygulamalar için varsayılan makine genelinde ilke ayarlama desteği sınırlıdır. Daha fazla bilgi için bkz. ASP.NET Core Veri Koruması'na Genel Bakış.

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.

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ı MVC ve Razor Sayfalar'da tilde-slash (~/) gösterimi 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.

Dekont

Razor bileşenleri (.razor) tilde-slash gösterimini kullanmamalıdır. Daha fazla bilgi için uygulama temel yolu belgelerine Blazor bakın.

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).

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. Uygulama havuzu için Gelişmiş Ayarlar altındaki IIS Yönetim Konsolu'nda öğesinin kullanacak ApplicationPoolIdentityşekilde ayarlandığından Identity 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. IIS AppPool\{APP POOL NAME} Yer tutucunun {APP POOL NAME} uygulama havuzu adı olduğu biçimi girin. Seçecek nesne adlarını girin alanına. 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, klasör, alt klasörler ve dosyalar için okuma ve yürütme izinleri vermek için MyWebApp aşağıdaki komut kullanılır:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool:(OI)(CI)RX"

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şlangıç Modu şeklindedir OnDemand. Başlangıç Modu'nu olarak AlwaysRunningayarlayı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 Ön Yükleme Etkin ayarıdır False. Ön Yükleme Etkin olarak Trueayarlayın. Tamam seçeneğini işaretleyin.
  • kullanarakweb.config, öğesini uygulamanın web.config dosyasındaki <system.webServer> öğelere set true ile doAppInitAfterRestart ekleyin<applicationInitialization>:

    <?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) dakikadır 20 . 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ı

Modül, şema ve yapılandırma dosyası konumları

Modül

IIS (x86/amd64):

  • %windir%\System32\inetsrv\aspnetcore.dll

  • %windir%\SysWOW64\inetsrv\aspnetcore.dll

  • %ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll

  • %ProgramFiles(x86)%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll

IIS Express (x86/amd64):

  • %ProgramFiles%\IIS Express\aspnetcore.dll

  • %ProgramFiles(x86)%\IIS Express\aspnetcore.dll

  • %ProgramFiles%\IIS Express\Asp.Net Core Module\V2\aspnetcorev2.dll

  • %ProgramFiles(x86)%\IIS Express\Asp.Net Core Module\V2\aspnetcorev2.dll

Şema

IIS

  • %windir%\System32\inetsrv\config\schema\aspnetcore_schema.xml

  • %windir%\System32\inetsrv\config\schema\aspnetcore_schema_v2.xml

IIS Express

  • %ProgramFiles%\IIS Express\config\schema\aspnetcore_schema.xml

  • %ProgramFiles%\IIS Express\config\schema\aspnetcore_schema_v2.xml

Yapılandırma

IIS

  • %windir%\System32\inetsrv\config\applicationHost.config

IIS Express

  • Visual Studio: {APPLICATION ROOT}\.vs\config\applicationHost.config

  • iisexpress.exe CLI: %USERPROFILE%\Documents\IISExpress\config\applicationhost.config

Dosyaları dosyada applicationHost.config arayarak aspnetcore bulabilirsiniz.

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 Microsoft İndirme Merkezi'nden bir yükleyici alın.

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.

    • İşlem içi barındırma modelini kullanan 32 bit SDK ile yayımlanan 32 bit (x86) bağımsız dağıtımı için, Uygulama Havuzu'na 32 bitlik bir izin verin. 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 modelini kullanan 64 bit (x64) bağımsız dağıtım için 32 bit (x86) işlemleri için 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.

  7. İş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.

Gölge kopya

IIS için ASP.NET Çekirdek Modülü'ne (ANCM) gölge kopyalama uygulaması derlemeleri, uygulamayı çevrimdışı dosya dağıtarak durdurmaktan daha iyi bir son kullanıcı deneyimi sağlayabilir.

Windows'da bir ASP.NET Core uygulaması çalıştırıldığında, ikili dosyalar değiştirilmeyecek veya değiştirilmeyecek şekilde kilitlenir. Gölge kopyalama, uygulama çalışırken derlemelerin bir kopyasını oluşturarak uygulama derlemelerinin güncelleştirilmasını sağlar.

Gölge kopya sıfır kapalı kalma süresi dağıtımını etkinleştirmeyi amaçlamadığından IIS'nin uygulamayı geri dönüştürmesi beklenir ve bazı istekler 503 Hizmet Kullanılamıyor yanıtı alabilir. Sıfır kapalı kalma süresi dağıtımları için mavi-yeşil dağıtımlar veya Azure dağıtım yuvaları gibi bir desen kullanmanızı öneririz. Gölge kopya, dağıtımlarda kapalı kalma süresini en aza indirmeye yardımcı olur, ancak tamamen ortadan kaldırılamaz.

Gölge kopyalama, içindeki web.configANCM işleyici ayarlarını özelleştirerek etkinleştirilir:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="aspNetCore"/>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".logsstdout">
      <handlerSettings>
        <handlerSetting name="enableShadowCopy" value="true" />
        <!-- Ensure that the IIS ApplicationPool identity has permission to this directory -->
        <handlerSetting name="shadowCopyDirectory" value="../ShadowCopyDirectory/" />
      </handlerSettings>
    </aspNetCore>
  </system.webServer>
</configuration>