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 vesCausa más probableSolución
Cada solicitud responde con un 500 vacíoUna 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íoRazor 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 acentosLos 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=1El manejador está registrado sin el verbo HEADverb="GET,HEAD,POST" en el manejador
El documento se renderiza, pero faltan los íconos de la barra de herramientas y el spinner de cargaResPath apunta al recurso raíz, o comienza con /ResPath: 'doconut-res/images'
Las solicitudes /doconut-res/... responden 404El módulo de recursos no está registrado, runAllManagedModulesForAllRequests está desactivado, o el enrutamiento MVC captura la rutaLa 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 lugarLa 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.axdVer No autorizado
Una conversión Web Forms nunca regresaLa página se bloquea en ConvertAsync — un deadlockAsync="true" + RegisterAsyncTask (Plugin de conversor)
Todas las páginas llevan una marca de agua de evaluaciónNo se encontró licencia — no está en <site root>\wwwrootConfiguración de licencia
Un widget se carga, pero su primera acción responde 404El 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ápidosLos motores de documentos se cargan en la primera apertura, y el antivirus en tiempo real los escanea mientras se carganCalienta 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 IISLa 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:

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.

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:

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.

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:

  1. La apertura se ejecutó con estado de sesión. Los controladores MVC y las páginas Web Forms lo tienen. Un IHttpHandler personalizado que abre documentos debe implementar System.Web.SessionState.IRequiresSessionState, o no tiene sesión para conceder.
  2. El estado de sesión está activado. <sessionState mode="Off" /> rechaza cada página.
  3. 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.
  4. 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:

text
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:

text
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:

csharp
// 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, AllowSearch no estaba habilitado cuando se abrió el documento — por defecto es false. 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 = false para que se rendericen mediante una proyección PDF con texto.
  • objViewer.CanSearch() es false despué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?