Geçiş
Doconut.NETFramework 26.8.0 (.NET Framework 4.7) → 26.9.0 (.NET Framework 4.7.2)
Bu sayfa, mevcut bir ASP.NET uygulamasını Doconut.NETFramework 26.8.0 veya daha eski sürümünden (.NET Framework 4.7) 26.9.0 ve sonraki sürümlerine (.NET Framework 4.7.2) yükseltmeyi kapsar. Doconut örnek paketi, tam geçiş kılavuzunu ve yeni API'ye taşınmış klasik örnekleri — MVC 5, bir web çiftliği ve Web Forms — içerir. Uygulamanızı, başladığı örnekle karşılaştırmak en hızlı yoldur.
Tek paket, iki sürüm
Her iki kütüphane aynı paket kimliği altında yayınlanır, Doconut.NETFramework. Sürüm onları ayırır:
| Sürüm | Hedef | API |
|---|---|---|
| 26.8.0 and earlier | .NET Framework 4.7 | the previous API |
| 26.9.0 and later | .NET Framework 4.7.2 | the new API |
Paketin güncellenmesi yükseltmedir. Yüklemek için ayrı bir paket ya da uyumluluk katmanı yoktur: 26.9.0 farklı bir API yüzeyine sahiptir, bu yüzden güncellemeden sonra derleme hataları almayı bekleyin — bu sayfanın geri kalanında. .NET Framework 4.7 sürümü artık desteklenmemektedir ve 26.8.0 onun son sürümüdür. Üzerinde kalabilirsiniz — burada kaçıracağınız bir güvenlik düzeltmesi yok — ancak yeni sürümler, eklentiler, dağıtılmış mod ve yerleştirilebilir widget'lar yalnızca 26.9.0 ve sonraki sürümlerde mevcuttur.
1. Hedefi değiştir ve paketi güncelle
Web projesinin hedefini önce .NET Framework 4.7.2 olarak değiştirin: hâlâ 4.7 hedefleyen bir proje 26.9.0'ı yükleyemez ve NuGet güncellemeyi reddeder. Ardından Doconut.NETFramework'ı güncelleyin ve kullandığınız eklenti paketlerini ekleyin (Doconut.NETFramework.Converter, Doconut.NETFramework.Dicom, …). Her eklenti, ona bir lisans gerektirir.
Proje packages.config kullanıyorsa, güncelleme önceki sürümün kaldırma adımını çalıştırır; bu, DocImage işleyicisini Web.config'den kaldırır ve 26.9.0 bunu geri eklemez. 3. adımda gösterildiği gibi tekrar kaydedin; bunu yapana kadar DocImage.axd 404 yanıt verir ve hiçbir sayfa çizilmez.
2. Ad alanları: neredeyse her şey köke taşındı
| Önce | Şimdi |
|---|---|
using Doconut.Configs.View; | using Doconut; |
using Doconut.Models; | using Doconut; |
using Doconut.Configs; | using Doconut; |
using Doconut.Configs.Cloud; | using Doconut.Clouds; |
using Doconut.Configs.Conversion; | unchanged |
Tip adları değişmedi: WordConfig, PdfConfig, ExcelConfig, CssConfig, ScriptConfig, FileShareConfig ve geri kalanları hâlâ mevcuttur. Çoğu dosyada tüm düzenleme, using satırlarını silmekten ibarettir.
3. Başlangıç: DoconutHost.Initialize ve iki Web.config girişi
Klasik paket, görüntüleyicisini her istek için oluşturur ve seçenekleri o örneğin özellikleri olarak tutar. Yeni paket, Application_Start içinde bir kez oluşturulan bir bileşim köküne sahiptir ve görüntüleyici, çözdüğünüz bir hizmettir:
// Önce - Doconut.NETFramework 26.8.0 ve öncekiler, istek üzerine
var viewer = new Viewer
{
ID = "ctlDoc",
IncludeJQuery = true,
BasePath = "/",
FitType = "width"
};// Doconut.NETFramework 26.9.0\u002B - Görüntüleyici DoconutHost'tan çözüldü, lisans DoconutHost.Initialize() içinde bir kez yapılandırıldı
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });DoconutHost.Initialize, Application_Start içinde, DoconutHost.Shutdown ise Application_End içinde yer alır ve Web.config, DocImage.axd işleyicisini ve kaynak modülünü kazanır — ikisi de Installation içinde bulunur. Sayfa başına görünüm ayarları (FitType, FixedZoom, ShowHyperlinks, …) görüntüleyici örneğinden widget seçeneklerine ya da ViewerConfig üzerinden Viewer.RenderViewer'a geçirilen bir nesne taşındı (bkz. ViewerConfig). new Viewer(), DoconutHost.Initialize çalıştıktan sonra hâlâ bir kez derlenir, bu yüzden taşınan kod‑arkası bu satırı tutabilir ve ayarları taşıyabilirsiniz.
Güvenlik önceki gibi çalışır. Bir belge açmak, mevcut ASP.NET oturumuna sayfalarına erişim izni verir ve DocImage.axd diğer herkesi reddeder. DoconutUnSafeMode ayarı bu özelliği kapatıyordu; artık options.UnsafeMode olarak DoconutHost.Initialize içinde bulunur — false bırakın. Bkz. Sessions & Security.
Tüm siteyi çökerten başlangıç hatası. Lisanssız bir yetenek sağlayan kayıtlı bir eklenti,
Application_Startiçinde bir istisna fırlatır ve uygulama her isteğe boş bir500yanıt verir — hata sayfası yok, IIS günlüğünde bir şey yok, sadece Windows olay günlüğünde (kaynak ASP.NET) bir giriş bulunur. Lisanslar, site kökünün altındawwwroot'dan okunur ve başka bir yerde bulunmaz; temelDoconut.Viewer.licmevcut olmalı, aksi takdirde yanındaki eklenti lisansları okunmaz. Bkz. License Setup.
4. Web farm: bir bayraktan dağıtık moda
Klasik model viewer.IsWebfarm = true artı ExportToPng(path) idi. Yeni model bir kez kaydedilir: her düğüm tek bir depoyu ve tek bir imzalama anahtarını paylaşır ve tarayıcıya bağlı imzalı bir bilet, "hangi düğüm yanıt verirse" ifadesinin yerini alır:
Doconut.DoconutHost.Initialize(
options => options.UnsafeMode = false,
services => services.AddDoconutDistributed(d =>
{
d.Store = CloudLocation.FileShare;
d.FileShareRootPath = @"\\fileserver\doconut-shared"; // WebfarmPath bir takma addır
d.SigningKey = farmKey; // >= 32 bytes, her düğümde aynı
}));Ardından belgeleri normal şekilde açın, tarayıcıyı (DocOptions.BrowserId = DoconutFarmBinding.EnsureBrowserId(...)) bağlayarak ve token ile widget'a viewer.AccessToken vererek. Oturumlar ve Güvenlik adımları içerir; web-farm örneği tam bir düğümdür. IsWebfarm ve WebfarmPath hâlâ derlenir, ancak artık bir şey açmazlar.
Başarı gibi görünen ancak olmayan iki şey: DistributedDocumentPublisher.PublishAsync bir belgenin oluşturulmuş dosyalarını yazar ancak oturum açmaz, bu yüzden yayınlanmış bir token'a yönlendirilmiş bir görüntüleyici 200 durum kodlu ~2 KB hata görüntüsü alır; ve doconut-client çerezi olmayan bir test istemcisi aynı görüntüyü alır, bir 401 değil. Gerçek sayfayı hata görüntüsünden boyutuyla ayırt edin.
5. Dönüştürme bir eklentidir ve çok daha küçüktür
SourceFormatConverter enum'ı, on iki *ConfigConverter sınıfı ve iç içe hedef enum'ları, bir enum ConversionTarget ve bir çağrı ile değiştirilir:
using System.IO;
using System.Threading;
using Doconut;
using Doconut.Configs.Conversion;
// Varsayalım DoconutHost zaten başlatılmış ve ct adlı bir CancellationToken mevcut.
var provider = DoconutHost.Services;
var converter = (DocumentConverter)provider.GetService(typeof(DocumentConverter));
Stream source = /* giriş akışınız */;
var result = await converter.ConvertAsync(source, ".dwg", ConversionTarget.Pdf, null, ct);Kaynak format, gönderdiğiniz uzantıdan gelir. Uyumluluk köprüsü yoktur: her SourceFormatConverter referansı, onu silerek çözdüğünüz bir derleme hatasıdır. Biçim başına seçenek nesneleri hayatta kalmadı — WordConfigConverter.HtmlOptions ve CadConfigConverter.CadOptions.ShowColor, ConvertAsync aracılığıyla eşdeğeri yoktur. Web Forms'ta, ConvertAsync üzerinde asla bloklamayın — bkz. Dönüştürücü Eklentisi.
6. Bulut depolama: paylaşılan klasör olarak erişin
Bulut yapılandırma türleri Doconut.Clouds içinde değişmeden taşındı. Ancak bulut istek işleyicileri ASP.NET Core bileşenleridir ve klasik bir uygulamanın onları çalıştıracak bir işlem hattı yoktur. Bir System.Web sitesinden, bulut depolamaya paylaşılan klasör olarak erişin — Azure'da, her düğüme bağlanan bir Azure Files paylaşımı — FileShareConfig aracılığıyla adreslenir.
7. İstemci tarafı değişiklikleri ki sessizce başarısız olur
Altındaki her öğe derlenir, çalışır, hiçbir şey kaydetmez ve yanlış şeyi yapar:
| Önce | Şimdi |
|---|---|
ResPath: 'doconut-res' | ResPath: 'doconut-res/images' — aksi takdirde belge render edilirken her simge 404 hatası alır |
function ctlDoc_ViewerReady() { } | docViewer({ onViewerReady: function () { } }) — görüntüleyici geri çağrıları artık seçeneklerdir |
var viewer = $(el).docViewer({...}).View(token) | Önce docViewer(...) atayın, ardından viewer.View(token) ayrı ayrı çağırın |
viewer.Refit() sayfaya sığdırmak için | viewer.FitType('width') — Refit() sadece düzeni yeniden hesaplar |
var n = viewer.Search(kw, exact) | viewer.Search(kw, exact, function (n) { … }) — sayı geri çağrıda gelir |
if (viewer.SaveAnnotations()) { … } | docViewer({ onAnnSaved: …, onAnnSaveError: … }) |
function ctlDoc_Created() { } (notlar) | Değiştirilmedi — ek açıklama olay işlevleri hâlâ küresel, isimle bulunur |
Üç tane daha: görüntüleyici kendi araç çubuğunu çizmiyor (sayfanız Zoom, Next, GotoPage ve geri kalanını kendi düğmelerine bağlar); gizli bir Bootstrap modal içinde oluşturulan bir görüntüleyici 0×0 ölçülerinde olur ve bir konteynerine açık bir yükseklik verip shown.bs.modal üzerinde yeniden boyutlandırana kadar hiçbir şey çizmiyor; ve AllowSearch PDF için varsayılan olarak false olur, bu yüzden bir belge mükemmel render edilirken her arama hiçbir şey döndürmez.
8. Ne kaybolur
| Gitti | Bunun yerine |
|---|---|
DocumentSearch / TextSearch.cs | Hiçbir şey — arama, format görüntüleyicilerin çıkardığı metin üzerinde çalışır |
Viewer.WatermarkInfo | Eşdeğer yok |
WordConfigConverter.HtmlOptions | ConvertAsync üzerinden seçenek nesneleri yok |
SourceFormatConverter, *ConfigConverter sınıfları | ConversionTarget ve ConvertAsync |
Doconut.Configs.Editor | Kaldırıldı |
viewer.IsWebfarm + ExportToPng(path) | AddDoconutDistributed ve normal açma |
Önerilen çalışma sırası
- Hedefi değiştir, paketi değiştir ve
Global.asax'ıDoconutHost.Initializeve ikiWeb.configkaydıyla derle. Site başlamalı. - Tek bir görüntüleyici sayfası: render edilecek bir belge al, ardından araç çubuğu, arama ve ek açıklamalar çalışana kadar bölüm 7 üzerinden ilerle. Gerçek bir tarayıcıda doğrula — o bölümde hiçbir şey hata üretmez.
- Dönüştürme (bölüm 5): mekanik, ve derleme hatalarının çoğu.
- Kalan sayfalar, taşınan örnekleri fark hedefi olarak kullanarak.
- Web çiftliği (bölüm 4), eğer varsa. İki düğüm ve bir tarayıcıyla, ya da çerezleri tutan bir istemciyle test et.
Bu sayfa yardımcı oldu mu?