Görüntüleyicinin Nasıl Çalıştığı
Belge isteği yaşam döngüsü
Doconut, belgeleri sayfalı görüntüler olarak işler ve bunları Web.config dosyanızın kaydettiği bir HTTP işleyicisi aracılığıyla sunar. 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çalar
Viewer—DoconutHost.Servicesüzerinden çözdüğünüz genel hizmet. Belgeleri açar ve oturum belirteçleri döndürür.- Belge oturumu — yüklü belgeyi tutan, belirteci altında bellekte saklanan sunucu tarafı nesne.
DocImage.axd—Web.configiçinde bildirilenDoconut.DocImageHandler. Tarayıcı widget'ının yaptığı her isteğe (sayfalar, küçük resimler, arama, açıklamalar, …) yanıt verir ve her zaman belirteç ile tanımlanır./doconut-res/*— widget'ın kendi betiklerini, stillerini ve simgelerini sunanDoconut.DoconutResourceModule.
Viewer durum bilgisizdir — tasarım gereği
Viewer, istek başına belge durumu tutmaz ve IDisposable uygulamaz. Oturumlar ondan bağımsız olarak yaşar ve süresi dolma ya da açık bir CloseDocument(token) ile temizlenir. System.Web'de yapılandırıcı enjeksiyonu yoktur, bu yüzden ihtiyacınız olduğunda çözün — genellikle bir denetleyici eyleminde:
// POST /ViewerApi/Open?fileName=Sample.pdf
[HttpPost]
public async Task<ActionResult> Open(string fileName)
{
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();
var path = Server.MapPath("~/files/" + Path.GetFileName(fileName));
var token = await viewer.OpenDocumentAsync(path);
return Content(token, "text/plain");
}OpenDocumentAsync içinde ne olur
- Lisans kapısı. Reddedilen bir lisans (değiştirilmiş, kara listeye alınmış veya lisansın güncelleme penceresi dışındaki bir yapı) hemen
LicenseExceptionfırlatır ve nedeni mesaj olarak verir. Açma işlemi, geçersiz bir lisans için asla sessizce bozulmaz; eksik bir lisans sadece filigran ekler. - Oturum oluşturma. Görüntüleyici fabrikası dosya uzantısı için uygun format görüntüleyicisini seçer ve belgeyi yükler (bkz. Renderleme Boru Hattı). Oturum, kaydırmalı süresi dolma özelliğiyle
DocOptions.TimeOutdakika (varsayılan 60) süren yeni rastgele bir belirteç altında bellekte saklanır. Her sayfa isteği saati sıfırlar. - Erişim izni.
UnsafeMode = false(varsayılan) olduğunda, belirteç belgeyi açan isteğin ASP.NET oturumuna bağlanır: o oturuma birsecure-{token}girişi yazılır. Bu nedenle açma işlemi oturum durumu olan bir istekte çalışmalıdır — bkz. Oturumlar ve Güvenlik. - Belirteç döndürülür. Tarayıcının sonraki tüm işlemler için ihtiyaç duyduğu tek tanımlayıcı budur.
Asenkron aşırı yüklemeler bir dosya yolu, bir dosya yolu artı format başına yapılandırma (PdfConfig, WordConfig, …) veya uzantısı formatı seçen bir FileInfo ile birlikte bir Stream alır. Asenkron sayfalar kullanmayan Web Forms kod-arkası için OpenDocument, aynı üç girişi senkron olarak sunar (bir yol, bir dosya adıyla akış veya bir dosya adıyla bayt dizisi).
Widget sayfaları nasıl alır
Widget, sorgu dizesinde belirteç ile DocImage.axd'yi çağırır. İşleyicinin 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ğı ve yer imleri |
?token=…© / &showlinks / &fileFormat / &meta | Metin kopyalama, hiperlinkler, format bilgisi, DICOM meta verileri |
?token=…&action=rotate/flip/close | Sayfa eylemleri ve açık kapatma (POST) |
?token=…&AnnSave=… / &AnnLoad | Açıklamaları kaydet ve yükle |
Her istek önce kontrol edilir:
- Belirteç yok →
404, veyaShowDoconutInfo = trueolduğunda bir sürüm banner'ı. - Belirteç bu ASP.NET oturumuna verilmemiş →
You Are Not Authorized To View This Page.metnini içeren bir hata görüntüsü. - Bilinmeyen veya süresi dolmuş belirteç →
Document session not found. Please re-open document.metnini içeren bir hata görüntüsü.
Hata görüntüleri, 200 durum kodu ile gönderilen sıradan PNG'lerdir, böylece widget bunları sayfanın olması gereken yerde gösterebilir. Yalnızca durum koduna bakan bir izleme kontrolü, bunları sunulan sayfalar olarak raporlayacaktır; gerçek bir sayfa onlarla yüzlerce kilobayt iken, hata görüntüsü yaklaşık 2 KB'dir.
Bir belgeyi kapatma
viewer.CloseDocument(token);CloseDocument, oturumu (belge motorunu ve belleğini hemen serbest bırakarak) kaldırır, mevcut isteğin ASP.NET oturumundan secure-{token} girişini siler ve belirteci iptal eder. İsteğe bağlıdır — kaydırmalı süresi dolma aynı temizlik işlemini yapar — ancak büyük belgeler için kullanıcı işi bitirir bitirmez belleği serbest bırakır. Tarayıcıdan, objViewer.Close(true) eşdeğer kapatma isteğini DocImage.axd'ye gönderir.
Çıkarımlar
- Bir açık belge = bir oturum = bir belirteç, belgeyi açan ASP.NET oturumuna verilir.
- Belirteç, kaydırmalı bir pencere içinde süresi dolar;
DocOptions.TimeOutsüresinden uzun süre boşta kalan bir görüntüleyici yeniden açılmalıdır. Viewerserbestçe çözümlenebilir ve paylaşılabilir; oturumlar tüm durumu taşır.
Bu sayfa yardımcı oldu mu?