Görüntüleyicinin Nasıl Çalıştığı
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 neredeyse tüm davranışları, 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,
IMemoryCacheiçinde bir belirteçle anahtarlanan sunucu tarafı nesne. - Doconut ara katmanı —
UseDoconut()tarafından eklenir; tarayıcı widget'ının yaptığı her isteğe (pages,thumbnails,search,annotations, …) yanıt verir, her zaman belirteç ile kimlik doğrulanır.
Viewer durumsuzdur — tasarım gereği
Viewer mühürlenmiştir, isteğe bağlı belge durumu tutmaz ve kasıtlı olarak IDisposable'ı uygulamaz. Oturumlar, oturum yöneticisinde bağımsız olarak yaşar ve önbellek süresi dolması veya açık bir CloseDocument(token) ile temizlenir.
İhtiyacınız olan her yerde 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 veya sürüm süresi dolmuş bir lisans (kara listeye alınmış, değiştirilmiş veya lisansın güncelleme penceresi dışındaki bir derleme), hemen bir
LicenseExceptionfırlatır ve reddetme nedenini mesaj olarak verir — geçersiz (eksik olmayan) bir lisans için açma işlemi asla sessizce bozulmaz. Takvim süresi dolmuş Geçici ya da abonelik lisansı istisnadır: fırlatmaz — bir filigrana bozulur. - 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 belirteciyle birlikte
IMemoryCacheiçinde kaydırmalı süresi dolma ile saklanır —DocOptions.TimeOutdakika, varsayılan 60. Her sayfa isteği saati sıfırlar. - Güvenlik kaydı.
UnsafeMode = false(varsayılan) ile belirteç, ç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. - 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 ve format başına bir yapılandırma (PdfConfig, WordConfig, …), ya da bir Stream ve uzantısı format algılamasını yönlendiren bir FileInfo.
Widget'ın sayfaları nasıl aldığı
İstemci widget'ı, sorgu dizesindeki belirteçle Doconut ara katmanını çağırır. Ara katmanın yaptığı, isteğe bağlıdır:
| Sorgu | Amaç |
|---|---|
?token=…&page=N | Render edilmiş 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 kontrollü) |
?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:
- Belirteç yok → ara katman 404 döndürür (veya
ShowDoconutInfo = trueolduğ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 = falseile) →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ü.
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 bitirir bitirmez belleği serbest bırakmanın nazik yoludur.
Çıkarımlar
- Açık bir belge = bir oturum = bir belirteç. Belirteçler tarayıcı oturumu başına, küresel URL'ler değildir.
- Belirteç, kaydırmalı bir pencere içinde süresi dolar;
DocOptions.TimeOutsonrası boşta kalan bir görüntüleyici yeniden açılmaya ihtiyaç duyar. Viewerserbestçe enjekte edilebilir ve paylaşılabilir; oturumlar tüm durumu taşır.
Bu sayfa yardımcı oldu mu?