การย้าย
Doconut.NETFramework 26.8.0 (.NET Framework 4.7) ไปยัง 26.9.0 (.NET Framework 4.7.2)
หน้านี้ครอบคลุมการอัปเกรดแอปพลิเคชัน ASP.NET ที่มีอยู่จาก Doconut.NETFramework 26.8.0 หรือก่อนหน้า (.NET Framework 4.7) ไปเป็น 26.9.0 และรุ่นต่อไป (.NET Framework 4.7.2) แพ็กเกจตัวอย่าง Doconut มีคู่มือการย้ายทั้งหมดและตัวอย่างคลาสสิกที่พอร์ตไปยัง API ใหม่ — MVC 5, เว็บฟาร์ม, และ Web Forms การเปรียบเทียบแอปของคุณกับตัวอย่างที่เริ่มต้นเป็นวิธีที่เร็วที่สุด
แพ็กเกจเดียว, สองเวอร์ชัน
ทั้งสองไลบรารีเผยแพร่ภายใต้ ID ของแพ็กเกจเดียวกัน, Doconut.NETFramework. เวอร์ชันทำให้แยกแยะได้:
| เวอร์ชัน | เป้าหมาย | API |
|---|---|---|
| 26.8.0 และก่อนหน้า | .NET Framework 4.7 | API ก่อนหน้า |
| 26.9.0 และต่อไป | .NET Framework 4.7.2 | API ใหม่ |
การอัปเดตแพ็กเกจคือการอัปเกรด ไม่มีแพ็กเกจแยกต่างหากให้ติดตั้งและไม่มีชั้นความเข้ากันได้: 26.9.0 มี API ที่แตกต่างกัน ดังนั้นคาดว่าจะมีข้อผิดพลาดในการคอมไพล์หลังการอัปเดต — รายละเอียดต่อในหน้านี้ เส้นทาง .NET Framework 4.7 ถูกยกเลิกและ 26.8.0 เป็นรุ่นสุดท้ายของมัน คุณสามารถคงอยู่บนรุ่นนั้นได้ — ไม่มีการแก้ไขความปลอดภัยใด ๆ ที่คุณจะพลาด — แต่การปล่อยเวอร์ชันใหม่, ปลั๊กอิน, โหมดกระจาย, และวิดเจ็ตแบบดรอป‑อิน จะมีเฉพาะใน 26.9.0 และรุ่นต่อไป
1. ปรับเป้าหมายและอัปเดตแพ็กเกจ
ปรับเป้าหมายโครงการเว็บเป็น .NET Framework 4.7.2 ก่อน: โครงการที่ยังเป้าหมายเป็น 4.7 ไม่สามารถติดตั้ง 26.9.0 ได้ และ NuGet ปฏิเสธการอัปเดต จากนั้นอัปเดต Doconut.NETFramework และเพิ่มแพ็กเกจปลั๊กอินที่คุณใช้ (Doconut.NETFramework.Converter, Doconut.NETFramework.Dicom, …) แต่ละปลั๊กอินต้องมีใบอนุญาตที่ให้สิทธิ์
หากโครงการใช้ packages.config การอัปเดตจะดำเนินขั้นตอนการถอนการติดตั้งของเวอร์ชันก่อนหน้า ซึ่งจะลบตัวจัดการ DocImage จาก Web.config และ 26.9.0 จะไม่เพิ่มกลับมา ลงทะเบียนใหม่ตามที่แสดงในขั้นตอนที่ 3; จนกว่าคุณจะทำเช่นนั้น DocImage.axd จะตอบ 404 และไม่มีหน้าใดแสดงผล
2. เนมสเปซ: เกือบทุกอย่างถูกย้ายไปที่รูท
| ก่อน | หลัง |
|---|---|
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; | ไม่เปลี่ยนแปลง |
ชื่อประเภทไม่ได้เปลี่ยนแปลง: WordConfig, PdfConfig, ExcelConfig, CssConfig, ScriptConfig, FileShareConfig และส่วนที่เหลือทั้งหมดยังคงอยู่ ในไฟล์ส่วนใหญ่การแก้ไขทั้งหมดคือการลบบรรทัด using
3. การเริ่มต้น: DoconutHost.Initialize และสองรายการใน Web.config
แพ็กเกจคลาสสิกสร้างตัวดูของมันต่อคำขอ โดยมีตัวเลือกเป็นคุณสมบัติของอินสแตนซ์นั้น แพ็กเกจใหม่มี composition root ที่สร้างครั้งเดียวใน Application_Start และตัวดูเป็นบริการที่คุณเรียกใช้:
// ก่อน - Doconut.NETFramework 26.8.0 และก่อนหน้า, ตามคำขอ
var viewer = new Viewer
{
ID = "ctlDoc",
IncludeJQuery = true,
BasePath = "/",
FitType = "width"
};// Doconut.NETFramework 26.9.0+ - ตัวดูเอกสารได้รับการแก้ไขจาก DoconutHost, ใบอนุญาตกำหนดค่าเพียงครั้งเดียวใน DoconutHost.Initialize()
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });DoconutHost.Initialize ไปอยู่ใน Application_Start และ DoconutHost.Shutdown อยู่ใน Application_End, และ Web.config จะได้รับตัวจัดการ DocImage.axd และโมดูลทรัพยากร — ทั้งสองอยู่ใน การติดตั้ง การตั้งค่าการแสดงผลต่อหน้า (FitType, FixedZoom, ShowHyperlinks, …) ถูกย้ายจากอินสแตนซ์ของตัวดูไปยังตัวเลือกของวิดเจ็ต หรือไปยัง ViewerConfig ที่ส่งให้กับ Viewer.RenderViewer (ดู การกำหนดค่า Viewer) new Viewer() ยังคอมไพล์ได้เมื่อ DoconutHost.Initialize ทำงานแล้ว ดังนั้นโค้ด‑เบื้องหลังที่ย้ายมาสามารถคงบรรทัดนั้นไว้ขณะย้ายการตั้งค่า
ความปลอดภัยทำงานเช่นเดิม. การเปิดเอกสารให้เซสชัน ASP.NET ปัจจุบันเข้าถึงหน้าต่าง ๆ ของมัน, และ DocImage.axd ปฏิเสธทุกคนอื่น การตั้งค่าแอป DoconutUnSafeMode ที่ปิดการทำงานนี้ตอนนี้เป็น options.UnsafeMode ใน DoconutHost.Initialize — ให้คงไว้เป็น false ดู เซสชัน & ความปลอดภัย
ความล้มเหลวในการเริ่มต้นที่ทำให้ทั้งไซต์หยุดทำงาน. ปลั๊กอินที่ลงทะเบียนซึ่งความสามารถไม่ได้รับใบอนุญาตจะโยนข้อผิดพลาดใน
Application_Start, และแอปพลิเคชันจะตอบกลับด้วย500ว่างเปล่าสำหรับทุกคำขอ — ไม่มีหน้าข้อผิดพลาด, ไม่มีอะไรในบันทึก IIS, มีเพียงรายการในบันทึกเหตุการณ์ของ Windows (source ASP.NET) ใบอนุญาตจะถูกอ่านจากwwwrootใต้รูทของไซต์และไม่มีที่อื่น, และฐานDoconut.Viewer.licต้องมีอยู่ มิฉะนั้นใบอนุญาตของปลั๊กอินที่อยู่ข้างๆ จะไม่ถูกอ่าน ดู การตั้งค่าใบอนุญาต.
4. ฟาร์มเว็บ: จากสภานักธงสู่โหมดกระจาย
โมเดลคลาสสิกคือ viewer.IsWebfarm = true บวกกับ ExportToPng(path). โมเดลใหม่ลงทะเบียนเพียงครั้งเดียว: ทุกโหนดแชร์ที่เก็บเดียวและคีย์การลงนามเดียว, และตั๋วที่ลงนามผูกกับเบราว์เซอร์จะแทนที่ “โหนดใดโหนดหนึ่งที่ตอบกลับ”:
Doconut.DoconutHost.Initialize(
options => options.UnsafeMode = false,
services => services.AddDoconutDistributed(d =>
{
d.Store = CloudLocation.FileShare;
d.FileShareRootPath = @"\\fileserver\doconut-shared"; // WebfarmPath เป็นนามแฝง
d.SigningKey = farmKey; // >= 32 bytes, เหมือนกันบนทุกโหนด
}));จากนั้นเปิดเอกสารตามปกติ, ผูกเบราว์เซอร์ (DocOptions.BrowserId = DoconutFarmBinding.EnsureBrowserId(...)) และส่ง viewer.AccessToken ให้กับวิดเจ็ตพร้อมโทเค็น. เซสชันและความปลอดภัย มีขั้นตอน; ตัวอย่างเว็บฟาร์มเป็นโหนดที่สมบูรณ์. IsWebfarm และ WebfarmPath ยังคอมไพล์ได้, แต่พวกมันไม่สลับอะไรอีกต่อไป.
สองสิ่งที่ดูเหมือนสำเร็จแต่จริงๆ ไม่ใช่: DistributedDocumentPublisher.PublishAsync เขียนไฟล์ที่แสดงผลของเอกสารแต่ไม่เปิดเซสชัน, ดังนั้นผู้ชมที่ชี้ไปที่โทเค็นที่เผยแพร่จะได้รับภาพข้อผิดพลาดขนาด ~2 KB พร้อมสถานะ 200; และไคลเอนต์ทดสอบที่ไม่มีคุกกี้ doconut-client จะได้รับภาพเดียวกัน, ไม่ใช่ 401. แยกหน้าจริงจากภาพข้อผิดพลาดโดยขนาด.
5. การแปลงเป็นปลั๊กอินและเล็กลงมาก
enum SourceFormatConverter, คลาส *ConfigConverter จำนวนสิบสองคลาส, และ enum เป้าหมายที่ซ้อนกันของพวกมันถูกแทนที่ด้วย enum หนึ่งตัว, ConversionTarget, และการเรียกหนึ่งครั้ง:
using System.IO;
using System.Threading;
using Doconut;
using Doconut.Configs.Conversion;
// สมมติว่า DoconutHost ได้รับการเริ่มต้นแล้วและ CancellationToken ที่ชื่อ ct มีพร้อมใช้งาน
var provider = DoconutHost.Services;
var converter = (DocumentConverter)provider.GetService(typeof(DocumentConverter));
Stream source = /* สตรีมอินพุตของคุณ */;
var result = await converter.ConvertAsync(source, ".dwg", ConversionTarget.Pdf, null, ct);รูปแบบต้นทางมาจากส่วนขยายที่คุณส่ง. ไม่มี shim ความเข้ากันได้: การอ้างอิง SourceFormatConverter ทุกอันเป็นข้อผิดพลาดการคอมไพล์ที่คุณต้องแก้โดยลบออก. วัตถุตัวเลือกต่อรูปแบบไม่ได้อยู่ต่อ — WordConfigConverter.HtmlOptions และ CadConfigConverter.CadOptions.ShowColor ไม่มีเทียบเท่าผ่าน ConvertAsync. ใน Web Forms, อย่าเคยบล็อกบน ConvertAsync — ดู ปลั๊กอินแปลง.
6. ที่เก็บข้อมูลบนคลาวด์: เข้าถึงเป็นโฟลเดอร์ที่แชร์
ประเภทการกำหนดค่าคลาวด์ย้ายไปยัง Doconut.Clouds โดยไม่เปลี่ยนแปลง. อย่างไรก็ตามตัวจัดการคำขอคลาวด์เป็นคอมโพเนนต์ ASP.NET Core, และแอปพลิเคชันคลาสสิกไม่มี pipeline ให้รันพวกมัน. จากไซต์ System.Web, เข้าถึงที่เก็บคลาวด์เป็น โฟลเดอร์ที่แชร์ — บน Azure, การแชร์ Azure Files ที่เมานท์บนแต่ละโหนด — เข้าถึงผ่าน FileShareConfig.
7. การเปลี่ยนแปลงด้านไคลเอนต์ที่ล้มเหลวโดยเงียบ
รายการต่อไปนี้ทั้งหมดคอมไพล์, ทำงาน, ไม่บันทึกอะไร, และทำสิ่งที่ผิด:
| ก่อน | หลัง |
|---|---|
ResPath: 'doconut-res' | ResPath: 'doconut-res/images' — มิฉะนั้นไอคอนทุกอันจะคืนค่า 404 ขณะเอกสารแสดงผล |
function ctlDoc_ViewerReady() { } | docViewer({ onViewerReady: function () { } }) — การเรียกกลับของผู้ชมเป็นตัวเลือกแล้ว |
var viewer = $(el).docViewer({...}).View(token) | กำหนด docViewer(...) ก่อน, จากนั้นเรียก viewer.View(token) แยกกัน |
viewer.Refit() เพื่อให้พอดีกับหน้า | viewer.FitType('width') — Refit() เพียงคำนวณเลย์เอาต์ใหม่ |
var n = viewer.Search(kw, exact) | viewer.Search(kw, exact, function (n) { … }) — จำนวนจะมาถึงในการเรียกกลับ |
if (viewer.SaveAnnotations()) { … } | docViewer({ onAnnSaved: …, onAnnSaveError: … }) |
function ctlDoc_Created() { } (คำอธิบาย) | ไม่เปลี่ยนแปลง — ฟังก์ชันเหตุการณ์คำอธิบายยังคงเป็น global, ค้นหาตามชื่อ |
อีกสามข้อ: ผู้ชมไม่วาดแถบเครื่องมือของตนเอง (หน้าของคุณเชื่อมต่อ Zoom, Next, GotoPage และส่วนที่เหลือกับปุ่มของมันเอง); ผู้ชมที่สร้างภายในโมดัล Bootstrap ที่ซ่อนอยู่มีขนาด 0×0 และไม่วาดอะไรจนกว่าคุณจะกำหนดความสูงให้กับคอนเทนเนอร์อย่างชัดเจนและปรับขนาดใหม่บน shown.bs.modal; และ AllowSearch ตั้งค่าเริ่มต้นเป็น false สำหรับ PDF, ดังนั้นเอกสารจะแสดงผลอย่างสมบูรณ์ในขณะที่การค้นหาทั้งหมดไม่คืนค่าอะไร.
8. สิ่งที่หายไป
| หายไป | แทนที่ |
|---|---|
DocumentSearch / TextSearch.cs | ไม่มี — การค้นหาจะทำงานบนข้อความที่ตัวดูรูปแบบสกัดออก |
Viewer.WatermarkInfo | ไม่มีเทียบเท่า |
WordConfigConverter.HtmlOptions | ไม่มีวัตถุ option ผ่าน ConvertAsync |
SourceFormatConverter, คลาส *ConfigConverter | ConversionTarget and ConvertAsync |
Doconut.Configs.Editor | ถูกลบ |
viewer.IsWebfarm + ExportToPng(path) | AddDoconutDistributed และการเปิดแบบปกติ |
ลำดับการทำงานที่แนะนำ
- เปลี่ยนเป้าหมาย, สลับแพ็กเกจ, และทำให้
Global.asaxคอมไพล์ด้วยDoconutHost.InitializeและการลงทะเบียนWeb.configทั้งสอง. เว็บไซต์ควรเริ่มทำงาน. - หน้า viewer หนึ่ง: ทำให้เอกสารแสดงผล, จากนั้นทำงานผ่านส่วนที่ 7 จนแถบเครื่องมือ, การค้นหา, และคำอธิบายทำงานตามปกติ. ตรวจสอบในเบราว์เซอร์จริง — ไม่มีอะไรในส่วนนั้นทำให้เกิดข้อผิดพลาด.
- การแปลง (ส่วนที่ 5): เป็นกระบวนการเชิงกล, และส่วนใหญ่ของข้อผิดพลาดการคอมไพล์.
- หน้าที่เหลือ, ใช้ตัวอย่างที่พอร์ตเป็นเป้าหมายการเปรียบเทียบ.
- เว็บฟาร์ม (ส่วนที่ 4), หากคุณมี. ทดสอบด้วยโหนดสองตัวและเบราว์เซอร์, หรือไคลเอนต์ที่เก็บคุกกี้.
หน้านี้เป็นประโยชน์หรือไม่?