Görüntüleyici Durumsuz — Minimal .NET 8 Açık Uç Nokta Nasıl Oluşturulur
← Back to Blog••3 min read

Görüntüleyici Durumsuz — Minimal .NET 8 Açık Uç Nokta Nasıl Oluşturulur

Görüntüleyici Durumsuz — Tasarım Gereği

Viewer hiç per‑request belge verisi tutmaz. Bu, mühürlenmiş bir sınıftır, IDisposable'ı asla uygulamaz ve açtığınız her belge, çerçevenin önbelleğinin yönettiği ayrı bir oturumda yaşar. Bu yüzden ASP.NET Core uygulamanızda herhangi bir yerde tek bir Viewer örneğini enjekte edebilir ve birçok eşzamanlı istekte güvenle çağırabilirsiniz.


Durumsuz bir hizmetin sonuçları

  • Gizli kaynak yok – hizmet kendisi asla açık temizlik gerektiren büyük tamponlar tahsis etmez.
  • Varsayılan olarak iş parçacığı‑güvenli – çünkü istek‑özel durumu saklanmaz, aynı Viewer örneği birden fazla iş parçacığı tarafından kilitleme olmadan kullanılabilir.
  • Ölçeklenebilir dağıtımlar – yatay ölçekleme kutudan çıkar çıkmaz çalışır; yapışkan oturumlar veya sunucu bağlılığına ihtiyacınız yoktur, yalnızca istemcinin tuttuğu oturum token'ı gerekir.

Tüm belge‑özel bilgiler (sayfalar, ek açıklamalar, arama indeksi) OpenDocumentAsync tarafından oluşturulan bir oturum içinde tutulur. Oturum, IMemoryCache içinde (veya yapılandırdığınız herhangi bir IDistributedCache içinde) saklanır ve hareketsizlik süresinden sonra otomatik olarak sona erer (varsayılan 60 dakika). İşiniz bittiğinde, önbellek girişini erken serbest bırakmak için CloseDocument'ı çağırabilirsiniz.

Durumsuz Görüntüleyiciyi Kaydetmek

Viewer değiştirilebilir bir duruma sahip olmadığından, başlangıçta bir kez kaydedin:

builder.Services.AddDoconut();               // Viewer ve gerekli middleware'i kaydeder
builder.Services.AddSession();               // token güvenliği için gerekli
builder.Services.AddDistributedMemoryCache(); // demo için basit önbellek

AddDoconut çağrısı ayrıca görüntüleyicinin statik kaynaklarını sunan ara katmanı bağlar. Hizmetler yerleştirildikten sonra, herhangi bir uç nokta imzasında Viewer isteyebilirsiniz.

Minimal belge‑açma uç noktası (net‑8 örneği)

Aşağıdaki kod, resmi belgelerden alınan tam kesittir ve .NET 8 minimal‑API projesinde kutudan çıkar çıkmaz çalışır:

app.MapPost("/api/open", async (string fileName, Viewer viewer) =>
{
    var token = await viewer.OpenDocumentAsync($"files/{fileName}");
    return Results.Content(token, "text/plain");
});

Kodun yaptığı şey

  1. Bir dosya adı kabul eder – istemci, wwwroot/files altında hangi dosyanın açılacağını sunucuya bildirir.
  2. OpenDocumentAsync'ı çağırır – durumsuz Viewer yeni bir oturum oluşturur, önbelleğe kaydeder ve opak bir token döndürür.
  3. Token'ı düz metin olarak döndürür – istemci yalnızca token'ı alır; sunucu bu yanıtta belge baytlarını asla göndermez.

Viewer hiçbir belge verisi tutmadığından, uç nokta using bloklarına, Dispose çağrılarına veya istek‑başına fabrikalara ihtiyaç duymaz. Token, istemcinin görüntüleyici widget'ına (objViewer.View(token) ön yüzde) geri göndereceği tek kimlik bilgidir.

İstemci tarafında token'ı kullanmak

Token döndükten sonra, ön‑yüz widget'ı objViewer.View(token)'ı çağırır. Widget daha sonra sayfa görüntüleri, arama veya ek açıklama eylemleri için her sonraki istekte aynı token'ı ekler. Sunucu, token'ı belgeyi ilk açan oturuma karşı doğrular. Token farklı bir tarayıcı oturumundan sunulursa, görüntüleyici bir yetkilendirme hatası döndürür; bu, amaçlanan güvenlik davranışıdır.

Oturumu erken kapatma (isteğe bağlı)

Eğer iş akışınız bir belgenin bir daha erişilmeyeceğini biliyorsa, Viewer üzerinde CloseDocument'ı çağırarak önbellek girişini serbest bırakabilirsiniz. Bu, oturumu önbellekten kaldırır ve kayma‑sona erme zamanlayıcısının onu canlı tutmasını engeller.

Durumsuz akışın özeti

AdımNe olurDurum nerede saklanır
Görüntüleyici Enjekte EtBaşlangıçta tek bir Viewer örneği oluşturulur.DI konteynerinde (singleton).
OpenDocumentAsyncLisans kontrol edildi → oturum oluşturuldu → token döndürüldü.Oturum IMemoryCache içinde (veya dağıtılmış önbellekte) saklanır.
İstemci render ederWidget her istekle token gönderir.Token, istemcinin tuttuğu tek belge‑özel veridir.
Oturum sona ermesi / CloseDocumentÖnbellek girişi zaman aşımı veya açık kapatma sonrası kaldırılır.Görüntüleyici hizmetinde kalan kaynak yok.

Hizmet kendisi belge verisi saklamadığından, web çiftliğinizi güvenle ölçeklendirebilir, düğümleri değiştirebilir veya uygulamayı yeniden başlatabilirsiniz; kullanıcı‑görünür bir durum kaybolmaz—yalnızca token geçersiz olur ve istemciyi belgeyi yeniden açmaya yönlendirir.

Uygulamanıza Durumsuz Görüntüleyiciyi Dağıtma

  1. AddDoconut, AddSession ve bir önbellek sağlayıcısını Program.cs'a ekleyin.
  2. Açık‑uç nokta kesitini minimal‑API yapılandırmanıza yapıştırın.
  3. Dönen token'ı ön‑yüzde objViewer.View(token)'a iletin.

Artık Doconut'un Viewer tasarımını kullanan tamamen durumsuz, üretim‑hazır bir belge‑açma API'niz var.

#dotnet8#viewer#stateless#api#doconut#görüntüleyici#durumsuz