Solución de problemas
Diagnosticar errores comunes
Muchos fallos de System.Web no generan ninguna excepción visible: la página responde con un 500 vacío, un ícono devuelve 404, o una solicitud nunca regresa. Esta página está organizada según lo que observes. Los mensajes entre comillas son el texto literal que produce Doconut.
Síntomas de un vistazo
| Lo que ves | Causa más probable | Solución |
|---|---|---|
Cada solicitud responde con un 500 vacío | Una excepción en Application_Start: un plugin sin su licencia, una opción inválida, una configuración de granja incompleta — o una redirección de enlace que nombra una versión que no está en bin\ | Registro de eventos de Windows, Aplicación, origen ASP.NET. Ver Fallas de inicio |
Algunas páginas MVC responden con un 500 vacío | Razor compila vistas en tiempo de ejecución: la fachada netstandard falta en <compilation>, o la vista usa C# más reciente que 5 (?., $"...", nameof) | Agrega la fachada (Instalación); mueve la lógica de la vista al controlador |
Las páginas muestran —, … o similar en lugar de guiones y acentos | Los archivos de página sin marca de orden de bytes se leen con la página de códigos ANSI del servidor | <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" /> |
La consola del navegador muestra 404 para HEAD /DocImage.axd?...&page=1 | El manejador está registrado sin el verbo HEAD | verb="GET,HEAD,POST" en el manejador |
| El documento se renderiza, pero faltan los íconos de la barra de herramientas y el spinner de carga | ResPath apunta al recurso raíz, o comienza con / | ResPath: 'doconut-res/images' |
Las solicitudes /doconut-res/... responden 404 | El módulo de recursos no está registrado, runAllManagedModulesForAllRequests está desactivado, o el enrutamiento MVC captura la ruta | La entrada <modules>, y routes.IgnoreRoute("doconut-res/{*pathInfo}") |
El visor informa The viewer handler could not be reached (no response). | BasePath comienza con / ('/myapp' se convierte en //myapp/…, otro host) | BasePath: '/' en la raíz del sitio; 'myapp' en un directorio virtual |
El visor informa Please make sure your middleware is configured. | DocImage.axd respondió 404: el manejador no está en Web.config, el enrutamiento MVC lo capturó, o BasePath apunta a otro lugar | La entrada <handlers>, routes.IgnoreRoute("{resource}.axd/{*pathInfo}"), y BasePath |
Todas las páginas muestran You Are Not Authorized To View This Page. | El documento se abrió en una solicitud sin estado de sesión, el estado de sesión está desactivado, o la cookie de sesión no llega a DocImage.axd | Ver No autorizado |
| Una conversión Web Forms nunca regresa | La página se bloquea en ConvertAsync — un deadlock | Async="true" + RegisterAsyncTask (Plugin de conversor) |
| Todas las páginas llevan una marca de agua de evaluación | No se encontró licencia — no está en <site root>\wwwroot | Configuración de licencia |
Un widget se carga, pero su primera acción responde 404 | El widget no está habilitado, o su basePath no está '/DocImage.axd' | options.Add…Widget(), y basePath: '/DocImage.axd' |
| El primer documento después de que el sitio arranca o se recicla tarda un minuto o más; los posteriores son rápidos | Los motores de documentos se cargan en la primera apertura, y el antivirus en tiempo real los escanea mientras se cargan | Calienta el sitio y mantén el pool en ejecución — ver El primer documento después de un inicio |
| Una carga grande muestra una página de error de IIS | La carga supera maxRequestLength (KB) o maxAllowedContentLength (bytes) | Aumenta ambos por encima de tu archivo o límite de widget más grande |
Fallas de inicio
Una excepción lanzada en Application_Start no llega al navegador: cada solicitud responde con un 500 vacío, y el registro de IIS no muestra nada útil. La excepción está en el registro de eventos de Windows (Visor de eventos → Registros de Windows → Aplicación, origen ASP.NET). Las habituales:
Un plugin sin su licencia:
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.El Doconut.Viewer.<Capability>.lic del plugin debe estar en wwwroot, junto a Doconut.Viewer.lic. Una licencia faltante y un archivo legacy TRIAL no otorgan capacidades al plugin.
Opciones inválidas:
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.Una ensambladura que no puede cargarse. ASP.NET carga cada ensambladura en bin\ cuando la aplicación inicia, por lo que una redirección de enlace en Web.config que nombra una versión ausente de bin\ detiene todo el sitio. Copia las redirecciones generadas por NuGet (para un proyecto estilo SDK, desde bin\<YourApp>.dll.config) en lugar de editarlas manualmente, y cópialas nuevamente después de actualizaciones de paquetes.
No está autorizado para ver esta página.
La página es rechazada porque la sesión ASP.NET solicitante nunca recibió el documento. Verifique, en orden:
- La apertura se ejecutó con estado de sesión. Los controladores MVC y las páginas Web Forms lo tienen. Un
IHttpHandlerpersonalizado que abre documentos debe implementarSystem.Web.SessionState.IRequiresSessionState, o no tiene sesión para conceder. - El estado de sesión está activado.
<sessionState mode="Off" />rechaza cada página. - La cookie llega al manejador. Las solicitudes de mismo origen del widget transportan
ASP.NET_SessionId; un script, una llamada servidor a servidor, o una página de origen cruzado sin cookies no lo hacen. - Granja web: la apertura vinculó el navegador (
DocOptions.BrowserId) y la página pasa el ticket (objViewer.View(token, access)); cada nodo usa la misma clave de firma.
El rechazo es una imagen servida con el estado 200, de aproximadamente 2 KB. Un monitor que solo verifica códigos de estado lo cuenta como una página.
No se encontró la sesión del documento. Por favor, vuelva a abrir el documento.
El token expiró (ventana deslizante, DocOptions.TimeOut, 60 minutos por defecto), el documento se cerró, o — en un solo servidor — el grupo de aplicaciones se recicló. Un reciclaje ocurre según el programa, en cada edición de Web.config, y después del tiempo de inactividad del grupo (20 minutos por defecto en IIS). Abra el documento nuevamente para obtener un nuevo token.
Fallo al abrir un documento
LicenseException con una razón de rechazo — se encontró el archivo de licencia pero fue rechazado (firma inválida, manipulación, en lista negra, o una compilación fuera de la ventana de versión de la licencia). La apertura está bloqueada en lugar de marcada con una marca de agua.
LicenseException:
This document type requires the 'Dicom' plugin license.La extensión es manejada solo por un complemento (aquí DICOM) cuya capacidad no está concedida.
FormatNotSupportedException — ningún visor (integrado, complemento o personalizado) reconoce la extensión. DoconutOptions.RegisterViewer puede añadir uno para sus propios formatos.
InvalidDataException — el contenido está corrupto o no coincide con su extensión (un archivo renombrado). Valide las cargas antes de abrir.
InvalidOperationException:
No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().DocumentConverter se resolvió sin registrar el complemento Converter.
La salida se ve incorrecta
Las páginas llevan una marca de agua — no se encontró una licencia, o ha expirado o no cubre esta versión. En IIS, la licencia debe estar en wwwroot bajo la raíz del sitio (AppContext.BaseDirectory\wwwroot), no en bin\. Verifique IDoconutLicenseService (License.IsLicenseFileFound, IsExpired, IsVersionValid, License.RejectionMessage).
Los documentos heredados renderizan texto distorsionado — registre las codificaciones de página de código una sola vez, al iniciar:
// Global.asax.cs, Application_Start - antes de DoconutHost.Initialize.
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);Fuentes incorrectas o sustituidas — el servidor carece de las fuentes del documento. Un Windows Server sin Office tiene muchas menos fuentes que una máquina de desarrollo. Instale las fuentes, o apunte FontFolders (en WordConfig y PptConfig) a una carpeta que las contenga.
Una anotación de imagen se muestra en el visor pero la exportación tiene un cuadro "Imagen bloqueada" — el host de la imagen tiene una dirección privada o de bucle invertido, que el servidor se niega a obtener. Ver Anotaciones.
La función funcionó en evaluación, pero está silenciosa en producción
Una licencia Temporal activa otorga todas las capacidades; su licencia comprada otorga solo lo que adquirió. Sin una capacidad, sus archivos de Búsqueda o Anotación no se generan, y un complemento registrado detiene el sitio al iniciar. Compare IsCapabilityGranted(...) con cada función que usa antes de desplegar.
La búsqueda no encuentra nada (o muy poco)
- Para un PDF,
AllowSearchno estaba habilitado cuando se abrió el documento — por defecto esfalse. Word, Excel y PowerPoint exponen el mismo interruptor. - El contenido está escaneado o es solo imagen, por lo que no hay capa de texto para coincidir.
- HTML y Microsoft Project (MPP) no son buscables por defecto: configure
DefaultRender = falsepara que se rendericen mediante una proyección PDF con texto. objViewer.CanSearch()esfalsedespués de la inicialización: el formato resuelto no tiene ruta de búsqueda. Esto es independiente de la licencia de Búsqueda; verifique ambas.- La página lee el valor de retorno de
objViewer.Search(...)— el recuento llega en su tercer argumento, una devolución de llamada.
¿Aún atascado?
Reproduce el problema con la configuración mínima de Inicio rápido. Si se reproduce allí, contacta con el soporte con el documento, tu Global.asax.cs, las partes Doconut de Web.config, y la entrada del registro de eventos de Windows si existe.
¿Fue útil esta página?