ย้ายจากการบูรณาการ .NET 6 แบบคลาสสิก
ย้ายแอปพลิเคชัน Doconut.NET6 ที่มีอยู่ไปยัง DI ปัจจุบันและ API แบบอะซิงค์
Doconut มีการบูรณาการ .NET 6 สองแบบที่แตกต่างกัน พวกเขาสามารถใช้ชื่อแพ็กเกจ Doconut.NET6 เดียวกันได้ ดังนั้นให้ระบุรุ่นจาก API ในแอปพลิเคชันก่อนทำการเปลี่ยนแพ็กเกจ, การเริ่มต้น, ไลเซนส์, หรือทรัพยากรของเบราว์เซอร์
คุณกำลังใช้การบูรณาการ .NET 6 แบบใด?
| หากโครงการมี… | รุ่น |
|---|---|
app.MapWhen(... "DocImage.axd" ...) | รุ่นเก่า / คลาสสิก |
new Viewer(_cache, _accessor, ...) | รุ่นเก่า / คลาสสิก |
Viewer.DoconutLicense(...) หรือ Viewer.SetLicensePlugin(...) | รุ่นเก่า / คลาสสิก |
คัดลอกด้วยตนเอง docViewer.js, documentLinks.js, หรือ docViewer.UI.js | รุ่นเก่า / คลาสสิก |
builder.Services.AddDoconut(...) | การบูรณาการปัจจุบัน |
app.UseDoconutResources() บวก app.UseDoconut() | การบูรณาการปัจจุบัน |
Viewer จัดหาโดยการฉีดขึ้นอยู่ | การบูรณาการปัจจุบัน |
await viewer.OpenDocumentAsync(...) | การบูรณาการปัจจุบัน |
หากคอลัมน์ทั้งสองปรากฏในแอปพลิเคชันเดียวกัน ให้ถือว่าการย้ายยังไม่สมบูรณ์ อย่าส่งโทเค็นเอกสารหนึ่งผ่านทรัพยากรหรือมิดเดิลแวร์จากรุ่นอื่น
ทำไมชื่อแพ็กเกจ NuGet ถึงอาจไม่บอกคุณได้
ทั้งสองรุ่นถูกจัดจำหน่ายภายใต้ ID แพ็กเกจ Doconut.NET6 การอ้างอิงแพ็กเกจ, ไฟล์ล็อก, หรือ .nupkg ที่แคชไว้จึงไม่สามารถระบุ API ที่โฮสต์ได้ด้วยตัวเอง บันทึกเวอร์ชันแพ็กเกจที่แน่นอนและตรวจสอบ Program.cs, การสร้าง Viewer, การเปิดเอกสาร, และสคริปต์ของเบราว์เซอร์พร้อมกัน
รุ่นปล่อยที่ตรวจสอบสำหรับคู่มือนี้คือ Doconut.NET6 26.7.0 แพ็กเกจสาธารณะเสริมของมันคือ Doconut.NET6.Converter และ Doconut.NET6.Dicom ซึ่งถูกตรึงไว้ที่เวอร์ชันเดียวกับแพ็กเกจหลัก
ก่อนที่คุณจะย้าย
- สร้างสาขาและสำรองข้อมูลที่สามารถปรับใช้ได้ของแอปพลิเคชันที่มีอยู่
- บันทึกเวอร์ชันแพ็กเกจหลักและปลั๊กอินที่แน่นอน
- ทำรายการตรวจสอบทุกการแมป
DocImage.axd, การเรียกnew Viewer(...), การเรียกโหลดไลเซนส์, สคริปต์ Doconut ที่คัดลอก, การกระทำของแถบเครื่องมือที่กำหนดเอง, และ endpoint การเปิดเอกสาร - รักษาไฟล์
.licปัจจุบันและความลับของการปรับใช้ให้อยู่ภายนอกการควบคุมเวอร์ชัน - บันทึกชุดตัวอย่างของเอกสาร PDF, Office, รูปภาพ, CAD, อีเมล, DICOM, ที่สามารถค้นหาได้, ที่ป้องกันด้วยรหัสผ่าน, และที่มีคำอธิบายประกอบ
- บันทึกค่า timeout ของเซสชัน, พฤติกรรมความปลอดภัย, ฟอนต์, และการตั้งค่าแพลตฟอร์มที่มีอยู่
ย้ายหนึ่งสภาพแวดล้อมก่อนเปลี่ยนการผลิต การบูรณาการปัจจุบันจะเปลี่ยนอายุการใช้งานของบริการ, การกำหนดเส้นทางคำขอ, ความเป็นเจ้าของเซสชัน, และการส่งมอบทรัพยากรของไคลเอนต์
ความเข้ากันได้ของแพ็กเกจและไลเซนส์
แทนที่หรืออัปเดตแพ็กเกจหลักโดยเจตนา; อย่าอาศัย ID แพ็กเกจที่เหมือนกันเพื่อเลือก API ใหม่ คำสั่งเริ่มต้นจะติดตั้งรุ่นเสถียรล่าสุด
dotnet add package Doconut.NET6สำหรับการย้ายที่ทำซ้ำได้ไปยังรุ่นที่ตรวจสอบโดยคู่มือนี้ ให้ส่งเวอร์ชันเป็นตัวเลือกแยก
dotnet add package Doconut.NET6 --version 26.7.0รักษาปลั๊กอิน Doconut ทุกตัวให้เป็นเวอร์ชันเดียวกับแพ็กเกจหลัก การบูรณาการปัจจุบันโหลดไลเซนส์หนึ่งครั้งในระหว่าง AddDoconut(), โดยใช้ลำดับความสำคัญนี้
LicenseStream > LicenseContent > LicensePath > automatic discoveryการค้นหาอัตโนมัติจะมองหาไฟล์ Doconut.Viewer.lic และไฟล์คู่ Doconut.Viewer.<Capability>.lic การเรียกแบบคลาสสิกไปยัง Viewer.DoconutLicense(...) หรือ Viewer.SetLicensePlugin(...) ไม่ใช่กลไกการเริ่มต้นในปัจจุบัน ย้ายไลเซนส์ไปยัง DoconutOptions, รักษาไฟล์คู่ไว้ด้วยกันเมื่อใช้การค้นหาอัตโนมัติ, รีสตาร์ทหลังจากเปลี่ยนไลเซนส์, และตรวจสอบความสามารถผ่าน IDoconutLicenseService
อย่าสมมติว่าการมีไลเซนส์ปลั๊กอินเก่าแสดงถึงสิทธิ์สำหรับการสร้างปลั๊กอินปัจจุบัน ทดสอบ Viewer, Search, Annotation, Converter, และ DICOM แยกกันด้วยศิลปวัตถุของรุ่นที่ได้รับการอนุมัติ
การเริ่มต้นและการฉีดพึ่งพา
แอปพลิเคชันแบบคลาสสิกสร้าง Viewer ด้วยแคชของ ASP.NET และการพึ่งพา request‑accessor:
// การรวมแบบคลาสสิก — เพื่อเปรียบเทียบเท่านั้น; อย่าคอมไพล์โค้ดนี้กับ SDK ปัจจุบัน.
var viewer = new Viewer(_cache, _accessor, licenseFilePath);การรวมปัจจุบันลงทะเบียน Doconut ครั้งเดียวและรับ Viewer จากการฉีดพึ่งพา:
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
options.UnsafeMode = false;
});
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();
app.UseSession();
app.UseDoconutResources();
app.UseDoconut();Viewer เป็นบริการแบบชั่วคราว ตัวจัดการเซสชันเอกสารและแคชของมันเป็นผู้เป็นเจ้าของสถานะเอกสารที่อายุยาวกว่า ไม่ใช่อินสแตนซ์ Viewer ที่ฉีดเข้ามาโดยเฉพาะ
มิดเดิลแวร์และการกำหนดเส้นทางทรัพยากร
ลบสาขา MapWhen แบบคลาสสิกที่ตรวจจับ DocImage.axd:
// การรวมแบบคลาสสิก — ลบในช่วงการย้าย.
app.MapWhen(
context => context.Request.Path.ToString().EndsWith("DocImage.axd"),
branch => branch.UseDoconut(new DoconutOptions()));ในกระบวนการทำงานปัจจุบัน:
- เรียก
UseSession()ก่อน Doconut ขณะที่เปิดใช้งานความปลอดภัยของเซสชัน; - เรียก
UseDoconutResources()ก่อนUseDoconut(); - รักษา
ResourcesPathURLs ของทรัพยากรที่สร้างขึ้น และResPathของไคลเอนต์ให้สอดคล้องกัน; - เมื่อแมป
UseDoconut()ไปยังสาขา ให้รักษาสาขานั้นและBasePathของไคลเอนต์ให้สอดคล้องกัน.
MiddlewarePath เป็นการกำหนดค่าที่ตรวจสอบแล้ว; มันไม่ได้สร้างสาขา ASP.NET Core ด้วยตนเอง ใช้หรือ pipeline แบบง่ายในตัวอย่างที่คอมไพล์ด้านบนหรือการจัดเรียง app.Map("/doconut", branch => branch.UseDoconut()) อย่างสม่ำเสมอโดยไคลเอนต์
การสร้าง Viewer และอายุการใช้งาน
ลบแคชที่เป็นของแอปพลิเคชันสำหรับอ็อบเจ็กต์ Viewer ใส่ Viewer เข้าไปใน endpoint, หน้า Razor, controller หรือบริการแอปพลิเคชันแบบ scoped:
app.MapPost("/api/open", async (Viewer viewer) =>
{
var token = await viewer.OpenDocumentAsync("wwwroot/files/Sample.pdf");
return Results.Ok(new { token });
});โทเค็นที่ส่งกลับระบุเซสชันเอกสารฝั่งเซิร์ฟเวอร์ ปฏิบัติกับมันเหมือนข้อมูลรับรองแบบ bearer: อย่าบันทึก, อย่าจัดเก็บ, หรือใส่ในระบบวิเคราะห์ใด ๆ
การเปิดและปิดเอกสาร
แทนที่ OpenDocument(...) แบบซิงโครนัสด้วย OpenDocumentAsync(...):
// การรวม .NET 6 ปัจจุบัน: Viewer มาจาก DI และการเปิดเอกสารเป็นแบบอะซิงโครนัส.
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { AllowSearch = true });การ overload ปัจจุบันรับพาธไฟล์หรือสตรีม, การกำหนดรูปแบบแบบเลือก, DocOptions แบบเลือก, และ cancellation token ปิดเซสชันเซิร์ฟเวอร์โดยชัดเจนเมื่อเบราว์เซอร์ไม่ต้องการอีกต่อไป:
viewer.CloseDocument(token);ห้ามใช้โทเค็นแบบคลาสสิกซ้ำหลังการย้าย เปิดเอกสารแต่ละไฟล์ใหม่ผ่าน API ปัจจุบัน
คลาสการกำหนดค่า
API ปัจจุบันแยกความกังวลออกจากกัน:
| ประเด็น | ประเภทปัจจุบัน |
|---|---|
| เส้นทางมิดเดิลแวร์, การให้สิทธิ์, การลงทะเบียนปลั๊กอิน | DoconutOptions |
| รหัสผ่าน, เวลาหมดอายุ, ความปลอดภัย, ลายน้ำ | DocOptions |
| การเรนเดอร์รูปแบบและ DPI | PdfConfig, WordConfig, ExcelConfig, และประเภท BaseConfig อื่น ๆ |
| ค่าเริ่มต้นของวิดเจ็ตเบราว์เซอร์ | ViewerConfig หรือ JavaScript options ที่เทียบเท่า |
| CSS และสคริปต์ที่สร้างขึ้น | CssConfig และ ScriptConfig |
ห้ามนำ DocOptions.ImageResolution ไปต่อเป็นตัวควบคุมการเรนเดอร์ เนื่องจากเป็นค่าที่ล้าสมัย; ให้ตั้ง BaseConfig.ImageResolution บนการกำหนดค่าที่เฉพาะรูปแบบ ตรวจสอบค่าเริ่มต้นทั้งหมดแทนการสันนิษฐานว่าการกำหนดค่าแบบคลาสสิกมีพฤติกรรมเดียวกัน
แถบเครื่องมือ Viewer, การค้นหา, และการอธิบายประกอบ
ห้ามย้ายสคริปต์เก่าแบบทีละไฟล์ แอปอ้างอิงปัจจุบันประกอบเป็นแพคเกจหน้าเต็มหนึ่งชุด:
- ส่งออก CSS ของ Viewer และ CSS ที่มีลิขสิทธิ์สำหรับ Search/Annotation ด้วย
ReferenceCss; - เรนเดอร์แถบเครื่องมือ Viewer ที่เป็นของแอปพลิเคชัน;
- เรนเดอร์
searchBarMount,annBarMount, และการเมานท์ Viewer ที่จำเป็น; - ส่งออกสคริปต์ของ Viewer และโมดูลที่มีลิขสิทธิ์ด้วย
ReferenceScripts; - โหลด
viewerToolbar.jsของแอปพลิเคชันเอง; - เริ่มต้น
objViewerหนึ่งตัว; - เริ่มต้น Ribbon ของ Search และ Annotation ที่มีลิขสิทธิ์;
- เรียก
attach(objViewer)บนแต่ละ Ribbon; - เปิดเอกสารและเรียก
objViewer.View(token).
Search และ Annotation เป็นโมดูลที่แนบกับ Viewer เดียวกัน ไม่ใช่แถบเครื่องมืออิสระ แถบเครื่องมือหลักเป็นของแอปโฮสต์; Ribbon ของ Search และ Annotation ถูกฝังเป็นทรัพยากรที่เปิดใช้งานตามความสามารถ
ลบไฟล์คลาสสิกที่คัดลอกด้วยตนเองเช่น documentLinks.js และ docViewer.UI.js หลังจากหน้าปัจจุบันทำงานกับทรัพยากรที่ส่งออกโดย ReferenceCss และ ReferenceScripts เท่านั้น.
การลงทะเบียนปลั๊กอิน
วิธีการแบบคลาสสิกที่ใช้ใบอนุญาตปลั๊กอินแบบคงที่จะไม่ลงทะเบียนปลั๊กอินปัจจุบัน ต้องติดตั้งและลงทะเบียนแต่ละแพ็กเกจที่ปล่อยออกมาชัดเจน:
builder.Services.AddDoconut(options =>
{
options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>();
options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});AddDoconut() ตรวจสอบความสามารถของปลั๊กอินที่ลงทะเบียนในช่วงเริ่มต้น Converter และ DICOM เป็นปลั๊กอิน .NET 6 ที่ปล่อยออกมา ส่วน Normal Search และ Annotation เป็นฟีเจอร์ที่มีใบอนุญาตในตัว ไม่ใช่แพ็กเกจ AddPlugin<TPlugin>()
ความปลอดภัยของเซสชันและเอกสาร
การบูรณาการในปัจจุบันผูกเอกสารกับโทเค็นที่ไม่เปิดเผยและเซสชันที่แคชไว้ ด้วยค่าเริ่มต้น UnsafeMode = false UseDoconut() จะเพิ่มความปลอดภัยในการเข้าถึงเอกสารและโฮสต์ต้องกำหนดค่าเซสชันของ ASP.NET:
builder.Services.AddDistributedMemoryCache(); // สถานะเซสชันต้องการแคช (MVC/Razor Pages มีการเพิ่มไว้แล้ว)
builder.Services.AddSession();
app.UseSession();ให้ตั้งค่า DocOptions.IsSecured = true เว้นแต่การออกแบบที่ผ่านการตรวจสอบจะกำหนดให้ทำอย่างอื่น อย่าใช้ UnsafeMode = true เป็นทางลัดในการย้ายระบบ ทดสอบคำขอที่ไม่มีโทเค็น โทเค็นผิดรูปแบบ โทเค็นหมดอายุ และโทเค็นจากเซสชันเบราว์เซอร์ที่แตกต่างกัน
แอปพลิเคชันอ้างอิง Distributed จะเพิ่มตั๋วการเข้าถึงและรายละเอียดการส่งข้อมูล API เหล่านี้ไม่จำเป็นสำหรับการย้ายแบบโหนดเดียวปกติ
การทดสอบการย้าย
อย่างน้อยต้องตรวจสอบ:
- การเริ่มต้นแอปพลิเคชันพร้อมใบอนุญาตการผลิตและปลั๊กอินที่ลงทะเบียนทั้งหมด
- CSS/สคริปต์ของ Viewer และคำขอรูปภาพของทุกหน้าในเส้นทางที่เลือก
- การเปิดเอกสาร, การนำทาง, การซูม, รูปย่อ, การพิมพ์, และการปิดอย่างชัดเจน
- การค้นหาในเอกสารที่มีข้อความและสถานะที่ไม่สามารถค้นหาได้ของไฟล์ที่มีเฉพาะรูปภาพ
- การโหลด, บันทึก, ส่งออก Annotation และการควบคุมความสามารถ
- การค้นหาเป้าหมายของ Converter, ผลลัพธ์, การดาวน์โหลด, และสถานะลายน้ำ
- หน้า DICOM, เฟรม, และแอนิเมชัน; ข้อมูลเมตาเทคนิค .NET 6 ไม่พร้อมใช้งาน
- เอกสารที่ป้องกันด้วยรหัสผ่าน, ฟอนต์ที่กำหนดเอง, ข้อความที่ไม่ใช่ละติน, และการตั้งค่า timeout ที่กำหนด
- การปฏิเสธโทเค็นข้ามเซสชันและพฤติกรรมเซสชันที่หมดอายุ
- การทำงานบนมือถือ, โหมดมืด, และเส้นทาง reverse‑proxy ของการผลิต
แผนการย้อนกลับ
เก็บศิลปวัตถุการปรับใช้แบบคลาสสิก, แพ็กเกจที่ตรงกัน, ไฟล์ใบอนุญาต, และทรัพยากรเบราว์เซอร์ที่คัดลอกไว้ด้วยกัน การย้อนกลับที่ปลอดภัยจะสลับรุ่นของแอปพลิเคชันทั้งหมด; จะไม่ผสานเซิร์ฟเวอร์แบบคลาสสิกกับสคริปต์ปัจจุบันหรือเซิร์ฟเวอร์ปัจจุบันกับการเรียก DocImage.axd แบบคลาสสิก
ก่อนการตัดสวิตช์ ให้บันทึก:
- ช่องหรือศิลปวัตถุที่ใช้สำหรับการย้อนกลับ
- ผลกระทบต่อฐานข้อมูล/แคช หากมี
- วิธีที่เซสชันเอกสารที่ใช้งานอยู่จะถูกทำให้ไม่ถูกต้อง
- การตรวจสอบสุขภาพและเอกสารทดสอบที่ใช้ตัดสินใจการย้อนกลับ
- ผู้ที่สามารถกู้คืนชุดแพ็กเกจและการกำหนดค่าก่อนหน้าได้
เอกสารเก่า
คู่มือคลาสสิกที่แปลแล้วยังคงสามารถเข้าถึงได้ที่ Legacy .NET 6 setup ส่วน Classic integration gateway ใหม่อธิบายสัญญาณการระบุเดียวกันและลิงก์กลับไปยังคู่มือการย้ายนี้
ให้คง URL ประวัติไว้ในบุ๊กมาร์กและตั๋วสนับสนุนขณะที่การติดตั้งแบบคลาสสิกยังคงมีอยู่ เอกสารนี้บันทึกรุ่นที่แตกต่างและไม่ได้เปลี่ยนเส้นทางไปยัง API ปัจจุบัน
หน้านี้เป็นประโยชน์หรือไม่?