Razor Pages, MVC và API tối thiểu
Trình xem không bị ràng buộc vào kiểu hosting nào. Render thẻ div gắn trong Razor view hoặc trang tĩnh và mở tài liệu từ một hành động controller, một page handler hoặc một endpoint đã được ánh xạ.
Doconut được đăng ký giống như mọi thứ khác trong ASP.NET Core: một dịch vụ trong container và middleware trong pipeline. Nó kế thừa xác thực, ghi log, đồ thị DI và cách triển khai của bạn, vì nó chạy bên trong chúng chứ không phải bên cạnh.
Vấn đề
Hầu hết các trình xem tài liệu xuất hiện như một dịch vụ riêng biệt. Điều đó đồng nghĩa với một đơn vị triển khai thứ hai, một bộ thông tin đăng nhập thứ hai, một bước mạng mà tài liệu của bạn phải đi qua, và một vấn đề thứ hai để gọi ai đó vào lúc 2 giờ sáng.
Doconut là một thư viện. AddDoconut() đưa nó vào bộ sưu tập dịch vụ của bạn; UseDoconut() đưa nó vào pipeline. Nó chạy dưới danh tính tiến trình của bạn, đọc cấu hình, ghi vào logger, và được triển khai bởi bất kỳ công cụ nào đã triển khai ứng dụng của bạn.
Hệ quả thực tế là quyền truy cập vẫn ở đúng chỗ. Bạn gọi OpenDocumentAsync() sau khi kiểm tra quyền của mình, và trình xem chỉ có thể render những gì bạn đã quyết định cung cấp.
Khả năng
Trình xem không bị ràng buộc vào kiểu hosting nào. Render thẻ div gắn trong Razor view hoặc trang tĩnh và mở tài liệu từ một hành động controller, một page handler hoặc một endpoint đã được ánh xạ.
Vì các endpoint nằm trong pipeline của bạn, [Authorize] hoạt động như mọi lúc. Không có hệ thống danh tính thứ hai để liên kết.
Bảo mật tài liệu dựa trên trạng thái session của ASP.NET, vì vậy UseSession() phải được đăng ký trước UseDoconut(). Điều này có nghĩa khái niệm về người dùng trong trình xem giống với ứng dụng.
Nhiều node phía sau load balancer chia sẻ bộ nhớ cache render, vì vậy một session mở trên một node vẫn hoạt động khi yêu cầu tiếp theo đến node khác.
IIS, Kestrel, hoặc một image container bạn tự xây dựng. Không có gì thay đổi trong việc tích hợp giữa chúng ngoại trừ vị trí gắn file giấy phép.
Với plugin Converter, DocumentConverter.ConvertAsync() chạy trong cùng một tiến trình — không có dịch vụ thứ hai, không tải lên tạm thời, không vòng quay.
Tích hợp
UserMayRead và ResolvePath là mã của bạn. Đó là mục đích: Doconut không bao giờ biết tài liệu nào tồn tại hoặc ai được phép xem chúng.
Các nền tảng được hỗ trợ
// Program.cs
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
});
builder.Services.AddSession(); // document security rides on session state
var app = builder.Build();
app.UseSession(); // call UseSession() before UseDoconut()
app.UseDoconutResources(); // must be registered before UseDoconut()
app.UseDoconut();
// Open the document server-side, behind your own authorization
app.MapPost("/api/open", async (Viewer viewer, HttpContext ctx, string documentId) =>
{
if (!await ctx.UserMayRead(documentId))
return Results.Forbid();
// The token is opaque — hand it to the widget, never log or persist it.
string token = await viewer.OpenDocumentAsync(ResolvePath(documentId));
return Results.Ok(new { token });
}).RequireAuthorization();Chi tiết
Có. Cả hai đều được hỗ trợ và sử dụng cùng kiến trúc DI cộng với middleware. Có các trang riêng cho mỗi phiên bản nếu bạn cần chi tiết theo phiên bản.
Không, và đó là ý định. Tích hợp luôn là middleware cộng với widget JavaScript, giữ cho việc tích hợp nhất quán trên Razor Pages, MVC, Web Forms và Blazor thay vì chia thành bốn phần.
Web farm và triển khai phân tán được hỗ trợ thông qua bộ nhớ cache render chung. Một tài liệu mở trên một node vẫn có thể đọc được khi các yêu cầu tiếp theo đến node khác.
Không. Việc render là nguyên bản — không có interop Office, không có Word không giao diện, và không có tự động hoá COM để quản lý.
Blazor
Render phía máy chủ với một widget được gắn sạch sẽ vào vòng đời interop của Blazor — hỗ trợ cả Server và WebAssembly.
BlazorWord
Kết xuất DOC/DOCX/RTF/ODT nguyên bản mà không cần cài đặt Office, không có interop COM và không có tự động hoá phía máy chủ.
WordGiấy phép tạm thời mất vài phút để yêu cầu và chạy hoàn toàn trên máy của bạn. Những tệp quan trọng là những tệp đã gây ra lỗi cho trình xem hiện tại của bạn.