Khắc phục sự cố

Chẩn đoán các lỗi thường gặp

Nhiều lỗi System.Web không ném ra ngoại lệ nào mà bạn có thể thấy: trang trả về một 500 trống, một biểu tượng trả về 404, hoặc một yêu cầu không bao giờ trả về. Trang này được sắp xếp dựa trên những gì bạn quan sát. Các thông báo được trích dẫn là văn bản nguyên bản mà Doconut tạo ra.

Triệu chứng tổng quan

Bạn thấy gìNguyên nhân có khả năng nhấtCách khắc phục
Mỗi yêu cầu trả về một 500 trốngMột ngoại lệ trong Application_Start: plugin không có giấy phép, tùy chọn không hợp lệ, cấu hình farm không đầy đủ — hoặc một binding redirect chỉ định phiên bản không có trong bin\Windows event log, Application, source ASP.NET. Xem Các lỗi khởi động
Một số trang MVC trả về một 500 trốngRazor biên dịch các view tại thời gian chạy: facade netstandard thiếu trong <compilation>, hoặc view sử dụng C# mới hơn 5 (?., $"...", nameof)Thêm facade (Cài đặt); chuyển logic từ view sang controller
Các trang hiển thị —, … hoặc tương tự thay vì dấu gạch ngang và dấu phụCác tệp trang không có byte-order mark được đọc bằng trang mã ANSI của máy chủ<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" />
Console trình duyệt hiển thị 404 cho HEAD /DocImage.axd?...&page=1Handler được đăng ký mà không có động từ HEADverb="GET,HEAD,POST" trên handler
Tài liệu được hiển thị, nhưng các biểu tượng thanh công cụ và vòng quay tải bị thiếuResPath chỉ tới gốc tài nguyên, hoặc bắt đầu bằng /ResPath: 'doconut-res/images'
/doconut-res/... requests answer 404Mô-đun tài nguyên không được đăng ký, runAllManagedModulesForAllRequests bị tắt, hoặc routing MVC bắt đường dẫnMục <modules>, và routes.IgnoreRoute("doconut-res/{*pathInfo}")
Trình xem báo cáo The viewer handler could not be reached (no response).BasePath bắt đầu với / ('/myapp' trở thành //myapp/…, máy chủ khác)BasePath: '/' ở gốc site; 'myapp' trong thư mục ảo
Trình xem báo cáo Please make sure your middleware is configured.DocImage.axd trả lời 404: handler không có trong Web.config, routing MVC bắt nó, hoặc BasePath chỉ tới nơi khácMục <handlers>, routes.IgnoreRoute("{resource}.axd/{*pathInfo}"), và BasePath
Mỗi trang hiển thị You Are Not Authorized To View This Page.Tài liệu được mở trong một yêu cầu không có trạng thái session, session bị tắt, hoặc cookie session không tới DocImage.axdXem Không được ủy quyền
Quá trình chuyển đổi Web Forms không bao giờ trả vềTrang bị chặn ở ConvertAsync — một deadlockAsync="true" + RegisterAsyncTask (Plugin Chuyển đổi)
Mỗi trang có watermark đánh giáKhông tìm thấy giấy phép — nó không có trong <site root>\wwwrootCài đặt giấy phép
Một widget tải, nhưng hành động đầu tiên trả về 404Widget không được bật, hoặc basePath của nó không phải là '/DocImage.axd'options.Add…Widget(), và basePath: '/DocImage.axd'
Tài liệu đầu tiên sau khi site khởi động hoặc tái khởi động mất một phút hoặc hơn; các tài liệu sau nhanhCác engine tài liệu tải khi mở lần đầu, và phần mềm diệt virus thời gian thực quét chúng khi tảiKhởi động site và giữ pool chạy — xem Tài liệu đầu tiên sau khi khởi động
Một tải lên lớn hiển thị trang lỗi IISTải lên vượt quá maxRequestLength (KB) hoặc maxAllowedContentLength (byte)Tăng cả hai lên trên giới hạn tệp hoặc widget lớn nhất của bạn

Lỗi khởi động

Một ngoại lệ được ném trong Application_Start không tới trình duyệt: mọi yêu cầu trả về một 500 trống, và log IIS không hiển thị gì hữu ích. Ngoại lệ nằm trong Windows event log (Event Viewer → Windows Logs → Application, source ASP.NET). Các trường hợp thường gặp:

Plugin không có giấy phép:

text
The Converter plugin is registered via AddPlugin but no active license grants Converter.
Remove the AddPlugin<...>() call or install a license (or trial/demo) that includes Converter.

Doconut.Viewer.<Capability>.lic của plugin phải nằm trong wwwroot, bên cạnh Doconut.Viewer.lic. Thiếu giấy phép và tệp legacy TRIAL không cung cấp khả năng nào cho plugin.

Tùy chọn không hợp lệ:

text
DoconutOptions.MiddlewarePath must be a non-empty path starting with '/'.
DoconutOptions.ResourcesPath must be a non-empty path starting with '/'.
DoconutOptions.MiddlewarePath and ResourcesPath must be different paths.

Một assembly không thể tải. ASP.NET tải mọi assembly trong bin\ khi ứng dụng khởi động, vì vậy một binding redirect trong Web.config chỉ định phiên bản thiếu trong bin\ sẽ dừng toàn bộ site. Sao chép các redirect mà NuGet tạo (đối với dự án kiểu SDK, từ bin\<YourApp>.dll.config) thay vì chỉnh sửa thủ công, và sao chép lại sau khi cập nhật gói.

Bạn không được phép xem trang này.

Trang bị từ chối vì phiên ASP.NET yêu cầu chưa bao giờ được cấp tài liệu. Kiểm tra theo thứ tự:

  1. Quá trình mở đã chạy với trạng thái phiên. Các bộ điều khiển MVC và các trang Web Forms đều có nó. Một IHttpHandler tùy chỉnh để mở tài liệu phải triển khai System.Web.SessionState.IRequiresSessionState, nếu không sẽ không có phiên để cấp.
  2. Trạng thái phiên đang bật. <sessionState mode="Off" /> từ chối mọi trang.
  3. Cookie tới được trình xử lý. Các yêu cầu cùng nguồn gốc của widget mang theo ASP.NET_SessionId; một script, một cuộc gọi server-to-server, hoặc một trang cross-origin không có cookie thì không mang.
  4. Môi trường web farm: quá trình mở ràng buộc trình duyệt (DocOptions.BrowserId) và trang truyền vé (objViewer.View(token, access)); mọi nút đều sử dụng cùng một khóa ký.

Sự từ chối là một hình ảnh được phục vụ với trạng thái 200, khoảng 2 KB. Một công cụ giám sát chỉ kiểm tra mã trạng thái sẽ tính nó là một trang.

Phiên tài liệu không được tìm thấy. Vui lòng mở lại tài liệu.

Mã thông báo đã hết hạn (cửa sổ trượt, DocOptions.TimeOut, mặc định 60 phút), tài liệu đã bị đóng, hoặc — trên một máy chủ đơn — pool ứng dụng đã được tái tạo. Việc tái tạo xảy ra theo lịch, mỗi khi chỉnh sửa Web.config, và sau thời gian chờ không hoạt động của pool (20 phút theo mặc định trong IIS). Mở lại tài liệu để nhận mã thông báo mới.

Mở tài liệu thất bại

LicenseException với lý do từ chối — tệp giấy phép đã được tìm thấy nhưng bị từ chối (chữ ký không hợp lệ, bị can thiệp, bị đưa vào danh sách đen, hoặc một bản dựng nằm ngoài cửa sổ phiên bản của giấy phép). Việc mở bị chặn thay vì được gắn watermark.

LicenseException:

text
This document type requires the 'Dicom' plugin license.

Tiện ích mở rộng này chỉ được xử lý bởi một plugin (ở đây là DICOM) mà khả năng của nó chưa được cấp.

FormatNotSupportedException — không có trình xem (có sẵn, plugin, hoặc tùy chỉnh) nào khai báo tiện ích mở rộng này. DoconutOptions.RegisterViewer có thể thêm một cho các định dạng của bạn.

InvalidDataException — nội dung bị hỏng hoặc không khớp với tiện ích mở rộng (tệp đã đổi tên). Hãy xác thực các tệp tải lên trước khi mở.

InvalidOperationException:

text
No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().

DocumentConverter đã được giải quyết mà không đăng ký plugin Converter.

Kết quả trông sai

Các trang có watermark — không tìm thấy giấy phép, hoặc giấy phép đã hết hạn hoặc không bao phủ phiên bản này. Trên IIS, giấy phép phải nằm trong wwwroot dưới thư mục gốc của site (AppContext.BaseDirectory\wwwroot), không phải trong bin\. Kiểm tra IDoconutLicenseService (License.IsLicenseFileFound, IsExpired, IsVersionValid, License.RejectionMessage).

Các tài liệu legacy hiển thị văn bản rối — đăng ký các mã trang ký tự một lần, khi khởi động:

csharp
// Global.asax.cs, Application_Start - trước DoconutHost.Initialize.
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

Phông chữ sai hoặc được thay thế — máy chủ thiếu các phông chữ của tài liệu. Một Windows Server không có Office có ít phông chữ hơn rất nhiều so với máy phát triển. Cài đặt các phông chữ, hoặc chỉ định FontFolders (trên WordConfig và PptConfig) tới một thư mục chứa chúng.

Một chú thích hình ảnh hiển thị trong trình xem nhưng khi xuất ra lại có hộp "Image blocked" — máy chủ chứa hình ảnh có địa chỉ riêng tư hoặc loopback, mà máy chủ từ chối truy xuất. Xem Chú thích.

Tính năng hoạt động trong đánh giá, im lặng trong môi trường sản xuất

Một giấy phép Temporary hoạt động cấp mọi khả năng; giấy phép bạn mua chỉ cấp những gì bạn đã mua. Nếu thiếu khả năng, các tệp Search hoặc Annotation của nó sẽ không được tạo, và một plugin đã đăng ký sẽ dừng site khi khởi động. So sánh IsCapabilityGranted(...) với mọi tính năng bạn sử dụng trước khi triển khai.

Tìm kiếm không tìm thấy gì (hoặc quá ít)

  • Đối với PDF, AllowSearch không được bật khi tài liệu được mở — mặc định là false. Word, Excel và PowerPoint cũng có cùng công tắc.
  • Nội dung được quét hoặc chỉ là hình ảnh, vì vậy không có lớp văn bản để khớp.
  • HTML và Microsoft Project (MPP) không thể tìm kiếm ở mặc định: đặt DefaultRender = false để chúng hiển thị qua một phép chiếu PDF có văn bản.
  • objViewer.CanSearch() là false sau khi khởi tạo: định dạng đã giải quyết không có đường dẫn tìm kiếm. Điều này tách biệt khỏi giấy phép Search; hãy kiểm tra cả hai.
  • Trang đọc giá trị trả về của objViewer.Search(...) — số lượng đến trong đối số thứ ba của nó, một callback.

Vẫn gặp khó khăn?

Tái hiện vấn đề với cấu hình tối thiểu từ Quick Start. Nếu nó tái hiện ở đó, hãy liên hệ hỗ trợ kèm theo tài liệu, Global.asax.cs của bạn, các phần Doconut của Web.config, và mục nhập nhật ký sự kiện Windows nếu có.

Trang này có hữu ích không?