Viewer Nasıl Çalışır

Belge istek yaşam döngüsü

Doconut, belgeleri ASP.NET Core ara katmanı aracılığıyla sunulan sayfalı görüntüler olarak işler. Yaşam döngüsünü — açma, belirteç, sayfa istekleri, kapatma — anlamak, gözlemleyeceğiniz hemen hemen her davranışı, hata mesajları dahil, açıklar.

Üç hareketli parça

  • Viewer — enjekte ettiğiniz genel hizmet. Belgeleri açar ve oturum belirteçleri döndürür.
  • Belge oturumu — yüklü belgeyi tutan, IMemoryCache içinde bir belirteç ile anahtarlanan sunucu tarafı nesne.
  • Doconut ara katmanı — UseDoconut() tarafından eklenir; tarayıcı widget'ının yaptığı her isteğe yanıt verir (pages, thumbnails, search, annotations, …), her zaman belirteç ile kimlik doğrulanır.

Viewer durumsuz — tasarım gereği

Viewer kapalıdır, istek başına belge durumu tutmaz ve kasıtlı olarak IDisposable'ı uygulamaz. Oturumlar, oturum yöneticisinde bağımsız olarak yaşar ve önbellek süresi dolması ya da açık bir CloseDocument(token) ile temizlenir.

İhtiyacınız olduğu yere enjekte edin:

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

OpenDocumentAsync içinde neler olur

  1. Lisans kapısı. Reddedilen ya da sürüm süresi dolmuş bir lisans (kara listede, değiştirilmiş veya lisansın güncelleme penceresi dışındaki bir yapı) hemen bir LicenseException fırlatır, reddetme nedeni mesaj olarak verilir — geçersiz (var olmayan değil) bir lisans için açma asla sessizce bozulmaz. Takvim süresi dolmuş Geçici ya da abonelik lisansı istisnadır: bir istisna fırlatmaz — bir filigrana bozulur.
  2. Oturum oluşturma. Görüntüleyici fabrikası dosya uzantısı için doğru format görüntüleyiciyi seçer ve belgeyi yükler (Rendering Pipeline'a bakın). Oturum, yeni bir GUID belirteciyle IMemoryCache içinde kaydırmalı süresi dolma ile saklanır — DocOptions.TimeOut dakika, varsayılan 60. Her sayfa isteği saati sıfırlar.
  3. Güvenlik kaydı. UnsafeMode = false (varsayılan) ile belirteç, çağıranın ASP.NET oturumuna bağlanır: oturuma bir secure-{token} işareti yazılır, böylece belgeyi açan tarayıcı oturumu yalnızca sayfalarını isteyebilir.
  4. Belirteç döndürülür. Sonraki tüm işlemler için tek kimlik bilgisi budur.

Üç aşırı yükleme yalnızca girişte farklılık gösterir: bir dosya yolu, bir dosya yolu artı format başına yapılandırma (PdfConfig, WordConfig, …) veya bir Stream artı format algılamasını uzantısı belirleyen bir FileInfo.

Widget sayfaları nasıl alır

İstemci widget'ı, sorgu dizesinde belirteç ile Doconut ara katmanını çağırır. Ara katmanın yaptığı, isteğe bağlıdır:

SorguAmaç
?token=…&page=NOluşturulmuş sayfa görüntüsü (PNG)
?token=…&page=N&thumb=1Küçük resim
?token=…&zoom=…Yakınlaştırılmış sayfa render'ı
?token=…&search=termTam metin arama (lisans kontrollü)
?token=…&bookmarksBelge taslağı/yer imleri
?token=…&copy / &showlinks / &fileFormatMetin kopyalama, hiperlinkler ve format bilgisi
?token=…&metaDICOM teknik meta verileri; .NET 6 üzerindeki bir DICOM oturumu için 501 döndürür
?token=…&action=rotate/flip/closeSayfa eylemleri ve açık kapatma
?token=…&AnnSave=… / &AnnLoadEk açıklamaları kaydet/yükle

Bu yolların her biri önce doğrulanır:

  • Belirteç yok → ara katman 404 döndürür (veya ShowDoconutInfo = true olduğunda bir sürüm banner'ı).
  • Bilinmeyen veya süresi dolmuş belirteç → Document session not found. Please re-open document. içeren bir hata görüntüsü.
  • Oturum ara katmanı eksik (UnsafeMode = false ile) → Session middleware not configured. Call UseSession() before UseDoconut(). içeren HTTP 500.
  • Belirteç farklı bir tarayıcı oturumu tarafından açıldı → You Are Not Authorized To View This Page. içeren bir hata görüntüsü.

Belgeyi Kapatma

csharp
viewer.CloseDocument(token);

CloseDocument oturumu önbellekten kaldırır (bu, temel belge motorunu yok eder ve belleğini hemen serbest bırakır), secure-{token} işaretini siler ve erişim iznini iptal eder. Çağırmak isteğe bağlıdır — kaydırmalı süresi dolma aynı temizlik işlemini otomatik yapar — ancak büyük belgeler için, kullanıcı işini bitirir bitirmez belleği serbest bırakmanın nazik yoludur.

Çıkarımlar

  • Bir açık belge = bir oturum = bir belirteç. Belirteçler tarayıcı oturumu başına, küresel URL'ler değil.
  • Belirteç, kaydırmalı bir pencere içinde süresi dolar; DocOptions.TimeOut sonrası boşta kalan bir görüntüleyici yeniden açılmalıdır.
  • Viewer serbestçe enjekte edilebilir ve paylaşılabilir; oturumlar tüm durumu taşır.

Bu sayfa yardımcı oldu mu?