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ümHedefAPI
26.8.0 and earlier.NET Framework 4.7the previous API
26.9.0 and later.NET Framework 4.7.2the 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:

csharp
// Önce - Doconut.NETFramework 26.8.0 ve öncekiler, istek üzerine
var viewer = new Viewer
{
    ID = "ctlDoc",
    IncludeJQuery = true,
    BasePath = "/",
    FitType = "width"
};
csharp
// 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_Start içinde bir istisna fırlatır ve uygulama her isteğe boş bir 500 yanı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ında wwwroot'dan okunur ve başka bir yerde bulunmaz; temel Doconut.Viewer.lic mevcut 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:

csharp
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:

csharp
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çinviewer.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

GittiBunun yerine
DocumentSearch / TextSearch.csHiçbir şey — arama, format görüntüleyicilerin çıkardığı metin üzerinde çalışır
Viewer.WatermarkInfoEşdeğer yok
WordConfigConverter.HtmlOptionsConvertAsync üzerinden seçenek nesneleri yok
SourceFormatConverter, *ConfigConverter sınıflarıConversionTarget ve ConvertAsync
Doconut.Configs.EditorKaldırıldı
viewer.IsWebfarm + ExportToPng(path)AddDoconutDistributed ve normal açma

Önerilen çalışma sırası

  1. Hedefi değiştir, paketi değiştir ve Global.asax'ı DoconutHost.Initialize ve iki Web.config kaydıyla derle. Site başlamalı.
  2. 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.
  3. Dönüştürme (bölüm 5): mekanik, ve derleme hatalarının çoğu.
  4. Kalan sayfalar, taşınan örnekleri fark hedefi olarak kullanarak.
  5. 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?