Ana Sayfa Hakkımda Dersler Blog Mikrofonda İletişim Projeler
Dersler DEPLOY · C#

IIS Hosting Model — inprocess vs outofprocess

8 dk okuma · Emre Ulutabak
1
IIS ve ASP.NET Core

IIS (Internet Information Services), Windows sunucularda gelen HTTP isteklerini karşılayan web sunucusudur. ASP.NET Core uygulamaları ise doğrudan IIS içinde değil, kendi sunucusu olan Kestrel üzerinde çalışır.

IIS ile ASP.NET Core arasındaki köprüyü ASP.NET Core Module (ANCM) kurar. Bu modül, gelen isteği alır ve uygulamaya iletir. Ama tam olarak nasıl ilettiği, hosting modeline göre değişir.

2
inprocess nedir?

Bir fabrika düşün. Müdür doğrudan üretim bandında çalışıyor — aynı mekânda, aynı ekipte. Hızlı iletişim, minimum gecikme.

inprocess modunda ASP.NET Core uygulaması, IIS'in worker process'i olan w3wp.exe içinde çalışır. Araya ekstra bir iletişim katmanı girmez. Bu yüzden daha hızlıdır.

Ama bir riski var: w3wp.exe çökerse, aynı process içindeki tüm uygulamalar birlikte çöker.

💡
inprocess: daha hızlı, ama aynı process'teki uygulamalar birbirini etkiler.
3
outofprocess nedir?

Aynı fabrikada müdür artık ayrı bir odada çalışıyor. Üretim bandından mesaj geliyor, müdür kendi odasında işliyor ve cevabı gönderiyor.

outofprocess modunda ASP.NET Core uygulaması, IIS'ten bağımsız olarak kendi dotnet.exe process'inde çalışır. IIS sadece aracı görevi görür — isteği alır, Kestrel'e iletir, cevabı geri gönderir.

Avantajı: bir uygulama çökerse diğerleri etkilenmez. Her uygulama kendi izole process'inde yaşar.

💡
outofprocess: biraz daha yavaş, ama crash izolasyonu sağlar. Shared hosting'de şart.
4
Ne zaman hangisi?

İkisinin de kullanım senaryosu var. Körü körüne birini seçmek yerine duruma göre karar vermek gerekir.

  • Shared hosting, birden fazla site aynı app pool'u paylaşıyor: outofprocess — crash izolasyonu için zorunlu.
  • Dedicated server, tek uygulama: inprocess — maksimum performans, izolasyon endişesi yok.
  • Azure App Service: inprocess — Microsoft'un önerdiği mod.
  • Docker / container: IIS yok, Kestrel doğrudan çalışır — hosting modeli geçersiz.
💡
`dotnet publish` varsayılan olarak `inprocess` üretir. Shared hosting'de bunu değiştirmeyi unutma.
5
web.config ayarı

Hosting modeli web.config dosyasındaki hostingModel attribute'u ile belirlenir. Publish sonrası bu değeri kontrol etmek iyi bir alışkanlıktır.

xml
<!-- inprocess: uygulama IIS worker process (w3wp.exe) içinde çalışır -->
<aspNetCore processPath="dotnet"
            arguments=".\MyApp.dll"
            stdoutLogEnabled="false"
            stdoutLogFile=".\logs\stdout"
            hostingModel="inprocess" />

<!-- outofprocess: uygulama kendi dotnet.exe process'inde çalışır -->
<aspNetCore processPath="dotnet"
            arguments=".\MyApp.dll"
            stdoutLogEnabled="false"
            stdoutLogFile=".\logs\stdout"
            hostingModel="outofprocess" />
💡
Shared hosting'de 5 site aynı app pool'u paylaşıyorsa tümü outofprocess olmalı — biri inprocess kalırsa pool'u etkiler.
6
Mini quiz
MİNİ QUIZ
Shared hosting'de birden fazla site aynı app pool'u paylaşıyorsa hangi hosting modeli seçilmelidir?
inprocess — daha hızlı olduğu için
outofprocess — crash izolasyonu için
Her ikisi de kullanılabilir, fark etmez
Shared hosting'de hosting modeli seçilemez