IIS’te Playwright ile Görünür Chrome Açmak | C#

Merhaba,

.NET Core + Playwright projemde uygulamayı IIS’e yayınladıktan sonra başıma gelen klasik bir mimari sorunu ve adım adım çözümünü paylaşacağım.
Lokal bilgisayarımda Headless = false yaptığımda Chrome ekranda açılıyor, canlı izliyorum.
Ama aynı projeyi Windows Server üzerindeki IIS’e koyunca Chrome ekranda görünmüyor.
Kod çalışıyor gibi duruyor ama ortada tarayıcı yok.

Sebebi şuymuş: Lokal Visual Studio ile Debug yaparken uygulamanız etkileşimli Windows kullanıcı oturumunda çalışır.
Bu yüzden Headless = false dediğinizde Chrome ekranda açılır.
IIS’e yayınladığınızda ise durum değişir.
IIS’in temel servislerinden biri olan w3svc arka planda çalışır; uygulama kodu ise genellikle ilgili application pool’a ait w3wp.exe sürecinde yürütülür. Bu süreç etkileşimli kullanıcı masaüstünde çalışmadığı için (Session 0 Isolation) Chrome penceresi RDP ekranında görünmez.
Siz Headless = false deseniz bile Playwright görünür bir Chrome başlatmayı dener.
Ancak Chrome, IIS sürecinin çalıştığı etkileşimsiz oturumda açıldığı için RDP ile bağlandığınız kullanıcı masaüstüne çizilemez.
Bu durum Windows’un temel güvenlik tasarımıdır.

Bu kısıtlamayı aşmak için uygulamayı IIS’in kendi süreci (w3wp.exe) içinde çalıştırmak yerine Kestrel’i kendi RDP / masaüstü oturumumuzda bağımsız çalıştırıyoruz.
IIS’i de sadece gelen istekleri alıp Kestrel’e ileten bir Reverse Proxy olarak kullanıyoruz.

Yani akış şöyle oluyor:
Dış Dünya (HTTPS:443) → IIS (SSL Termination) → ARR & URL Rewrite → Kestrel (HTTP:127.0.0.1:5000) → Canlı Chrome GUI

Böylece;

  • Dışarıdan gelen HTTPS isteklerini yine IIS karşılar, sertifikayı yönetir.
  • IIS isteği arka planda 5000 portunda çalışan Kestrel uygulamasına iletir.
  • Kestrel’i etkileşimli Windows kullanıcı oturumunda başlattığımız için Playwright da bu oturumun masaüstü bağlamını kullanır.
    Böylece Headless = false ile başlatılan Chrome penceresi kullanıcı oturumunda görünür hâle gelir.

Reverse proxy yapılandırması için IIS üzerinde şu iki modülün yüklü olması gerekir:

  • URL Rewrite
  • Application Request Routing (ARR 3.0) (Microsoft’un sitesinden ücretsiz indirilebilir)

ARR yüklendikten sonra IIS Manager’ı açın:

  1. En üstteki sunucu adına tıklayın.
  2. Application Request Routing Cache simgesine çift tıklayın.
  3. Sağ panelden Server Proxy Settings… seçeneğine girin.
  4. Enable proxy kutucuğunu işaretleyin.
  5. Query string değerlerinin proxy üzerinden korunması için ilgili ayarı Pass through olarak kontrol edin.
  6. Uygulamanızın döndürdüğü Location veya benzeri response header’larında iç adresin görünmesini istemiyorsanız Reverse rewrite host in response headers ayarını senaryonuza göre kontrol edin.
  7. Sağ üstten Apply ile kaydedin.
    ** Burada TIMEOUT sürelerini çok büyük verdim ben, çünkü ana uygulamam uzun sürüyordu.

Sitenizin IIS’te yayınlandığı dizindeki (c:\inetpub\wwwroot\siteniz gibi) web.config dosyasını aşağıdaki gibi güncelleyin:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="ReverseProxyToKestrel" stopProcessing="true">
          <match url="(.*)" />
          <action type="Rewrite" url="http://127.0.0.1:5000/{R:1}" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Kestrel’i Başlatma

Uygulamanın yayın klasörüne erişimi olan bir CMD veya PowerShell açın ve uygulamayı 5000 portunda çalıştırın:

cd c:\inetpub\wwwroot\siteniz
dotnet Uygulamaniz.dll --urls "http://127.0.0.1:5000"

Bunu sunucu her başladığında çalıştırmak için de bir görev oluşturabiliriz.
Önerilen Task Scheduler Ayarları:

Trigger

  • When the computer starts (Bilgisayar başladığında)

Action → Start a Program

AlanDeğer
Program/scriptC:\Program Files\dotnet\dotnet.exe
Add arguments"C:\inetpub\wwwroot\siteniz.net\siteniz-core.dll" --urls "http://0.0.0.0:5000"
Start inC:\inetpub\wwwroot\siteniz.net

Önemli Ek Ayarlar (Task Properties)

  • General sekmesi:
    • Run whether user is logged on or not seçili olsun
    • Run with highest privileges işaretli olsun
  • Conditions sekmesi:
    • “Start the task only if the computer is on AC power” işaretini kaldırın

Bu yöntemle IIS’in SSL sertifikası, domain yönlendirmesi ve 443 portu avantajlarını korurken uygulamayı Kestrel üzerinden etkileşimli kullanıcı oturumunda çalıştırabilirsiniz.

Selamlar!

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top