Görüntüleyicinin Nasıl Çalıştığı
Belge isteği 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, token, sayfa istekleri, kapatma — anlamak, gözlemleyeceğiniz neredeyse tüm davranışları, hata mesajları dahil, açıklar.
Üç Hareketli Parça
Viewer— enjekte ettiğiniz genel hizmet. Belgeleri açar ve oturum tokenları döndürür.- Belge oturumu — yüklü belgeyi tutan,
IMemoryCacheiçinde bir token ile anahtarlanan sunucu tarafı nesne. - Doconut ara katmanı —
UseDoconut()ile eklenir; tarayıcı widget'ının yaptığı her isteğe (pages,thumbnails,search,annotations, …) yanıt verir, her zaman token ile kimlik doğrulanır.
Viewer durum bilgisizdir — tasarım gereği
Viewer mühürlenmiştir, 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 her yere enjekte edin:
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
- Lisans kapısı. Reddedilen ya da sürüm süresi dolmuş bir lisans (kara listeye alınmış, değiştirilmiş veya lisansın güncelleme penceresinin dışındaki bir derleme) hemen bir
LicenseExceptionfırlatır, reddetme nedeni mesaj olarak verilir — geçersiz (var olmayan) bir lisans için açma asla sessizce degrade olmaz. Takvim süresi dolmuş Geçici ya da abonelik lisansı istisnadır: istisna fırlatmaz — bir filigrana düşer. - 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 (bkz. Rendering Pipeline). Oturum, yeni bir GUID token ile
IMemoryCacheiçinde kaydırmalı süresi dolma ile saklanır —DocOptions.TimeOutdakikası, varsayılan 60. Her sayfa isteği saati sıfırlar. - Güvenlik kaydı.
UnsafeMode = false(varsayılan) olduğunda, token çağıranın ASP.NET oturumuna bağlanır: oturuma birsecure-{token}işareti yazılır, böylece belgeyi açan tarayıcı oturumu yalnızca sayfalarını isteyebilir. - Token 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 bir yapılandırma (PdfConfig, WordConfig, …) veya uzantısı format tespiti sağlayan bir Stream artı FileInfo.
Widget nasıl sayfaları alır
İstemci widget'ı, token'ı sorgu dizesinde göndererek Doconut ara katmanını çağırır. Ara katmanın ne yaptığı istek türüne bağlıdır:
| Sorgu | Amaç |
|---|---|
?token=…&page=N | Oluşturulan sayfa görüntüsü (PNG) |
?token=…&page=N&thumb=1 | Küçük resim |
?token=…&zoom=… | Yakınlaştırılmış sayfa render'ı |
?token=…&search=term | Tam metin arama (lisans kısıtlamalı) |
?token=…&bookmarks | Belge taslağı/yer imleri |
?token=…© / &showlinks / &fileFormat / &meta | Metin kopyalama, hiperlinkler, format bilgisi, DICOM teknik meta verileri |
?token=…&action=rotate/flip/close | Sayfa eylemleri ve açık kapatma |
?token=…&AnnSave=… / &AnnLoad | Ek açıklamaları kaydet/yükle |
Bu yolların her biri önce doğrulanır:
- No token → ara katman 404 döndürür (
ShowDoconutInfo = trueolduğunda bir sürüm bannerı gösterir). - Unknown or expired token →
Belge oturumu bulunamadı. Lütfen belgeyi yeniden açın.mesajlı bir hata resmi. - Session middleware missing (
UnsafeMode = falseile) →Oturum ara katmanı yapılandırılmadı. UseDoconut()'dan önce UseSession() çağırın.içeren HTTP 500. - Token opened by a different browser session →
Bu Sayfayı Görüntüleme Yetkiniz Yok.mesajlı bir hata resmi.
Bir belgeyi kapatma
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 bitirdiği anda belleği serbest bırakmanın nazik yolu budur.
Çıkarımlar
- Bir açık belge = bir oturum = bir token. Token'lar tarayıcı oturumu başına olup, global URL'ler değildir.
- Token, kaydırmalı bir pencere içinde süresi dolar;
DocOptions.TimeOutsüresini aşan bir görüntüleyici yeniden açılmalıdır. Viewerserbestçe enjekte edilebilir ve paylaşılabilir; oturumlar tüm durumu taşır.
Bu sayfa yardımcı oldu mu?