Instalación
Agregar Doconut a su aplicación web .NET Framework 4.7.2
Doconut.NETFramework aloja el visor Doconut en una aplicación ASP.NET clásica en .NET Framework 4.7.2 — IIS o IIS Express, MVC 5 o Web Forms. La configuración tiene tres partes: el paquete NuGet, dos registros en Web.config y una llamada en Global.asax. Esta página cubre las tres; Inicio rápido luego coloca un documento en una página.
Requisitos
- El proyecto web tiene como objetivo .NET Framework 4.7.2 o posterior. Un proyecto 4.7 no puede consumir este paquete; vuelva a apuntar primero.
- El sitio se ejecuta en la tubería integrada (el valor predeterminado para los grupos de aplicaciones de IIS e IIS Express).
Esta página cubre Doconut.NETFramework 26.9.0 y posteriores. Las versiones 26.8.0 y anteriores apuntaban a .NET Framework 4.7 con una API diferente; esa línea está descontinuada. Actualizar una aplicación existente a través de esa frontera se cubre en Migración.
Instalar el paquete
Desde la consola del Administrador de paquetes:
Install-Package Doconut.NETFrameworkO, en un proyecto con estilo SDK:
dotnet add package Doconut.NETFrameworkEl motor de renderizado está incrustado en el paquete: no hay un ensamblado de motor separado que referenciar, copiar o desplegar. Las capacidades opcionales se entregan como paquetes propios — por ejemplo Doconut.NETFramework.Converter y Doconut.NETFramework.Dicom — y cada uno necesita una licencia que lo habilite (ver Sistema de complementos).
Configurar Web.config
Doconut sirve dos tipos de solicitud, y IIS enruta ambos a través de Web.config:
DocImage.axd— la página del visor, miniatura, búsqueda y punto final de anotaciones, servida porDoconut.DocImageHandler./doconut-res/*— los propios scripts, hojas de estilo e íconos del visor, incrustados en el ensamblado y servidos porDoconut.DoconutResourceModule.
Agregue ambos, más la configuración de la que dependen:
<configuration>
<system.web>
<!-- MVC 5 only: Razor compiles views at run time and needs the netstandard facade. -->
<compilation targetFramework="4.7.2">
<assemblies>
<add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
</assemblies>
</compilation>
<!-- maxRequestLength is in KILOBYTES: 200 MB. -->
<httpRuntime targetFramework="4.7.2" maxRequestLength="204800" />
<!-- Read .cshtml and .aspx files as UTF-8, not as the server's ANSI code page. -->
<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- maxAllowedContentLength is in BYTES: the same 200 MB. -->
<requestLimits maxAllowedContentLength="209715200" />
</requestFiltering>
</security>
<modules runAllManagedModulesForAllRequests="true">
<add name="DoconutResourceModule" type="Doconut.DoconutResourceModule, Doconut" />
</modules>
<handlers>
<add name="DocImage" verb="GET,HEAD,POST" path="DocImage.axd"
type="Doconut.DocImageHandler, Doconut" />
</handlers>
</system.webServer>
</configuration>Cada línea evita una falla que no genera excepción:
verb="GET,HEAD,POST"— mantengaHEAD. El visor envía una solicitudHEADpara la página 1 para detectar imágenes animadas. Sin este verbo, IIS responde404antes de que el controlador se ejecute: los documentos aún se muestran, pero la detección de animación nunca funciona y la consola del navegador se llena de 404.runAllManagedModulesForAllRequests="true"—/doconut-res/*.js,.cssy.pngparecen archivos estáticos, e IIS los entregaría a su controlador de archivos estáticos antes de que el módulo de recursos los vea. El resultado es un visor sin scripts ni íconos.<globalization fileEncoding="utf-8">— los archivos de página guardados como UTF‑8 sin marca de orden de bytes se leen de otro modo con la página de códigos ANSI del servidor, por lo que cada carácter no ASCII llega al navegador doblemente codificado (un guión largo aparece como—). El archivo es correcto en disco, y la página aún declara<meta charset="utf-8">.- El ensamblado
netstandard(MVC 5) — Razor compila las vistas cuando se solicitan por primera vez, con su propia lista de referencias que no incluye esta fachada. Una vista que haga algo dinámico más allá de un simple acceso a miembro falla conCS0012y devuelve un500vacío, y solo las páginas que lo provocan fallan. El error del compilador aparece solo en el registro de eventos de Windows (fuente ASP.NET). Las aplicaciones Web Forms no necesitan esta línea. - Límites de carga — ASP.NET lee todo el cuerpo de la solicitud antes de que cualquier controlador se ejecute, por lo que una carga que supere estos límites es rechazada por IIS con su propia página de error. Mantenga
maxRequestLength(kilobytes) ymaxAllowedContentLength(bytes) sincronizados, y por encima del archivo más grande que sus usuarios abran o carguen.
Dos configuraciones más son importantes, y ambas suelen estar correctas ya:
- El estado de sesión permanece activo. Por defecto una página se sirve solo a la sesión ASP.NET que abrió el documento, por lo que el sitio no debe establecer
<sessionState mode="Off" />. Ver Sesiones y seguridad. - Redirecciones de enlace. Mantenga las redirecciones de enlace
<runtime>que NuGet escribe enWeb.config. En un proyecto con estilo SDK, cópielas delbin\<YourApp>.dll.configgenerado, porque ASP.NET clásico solo lee redirecciones deWeb.config. Una redirección que nombre una versión que falta enbin\detiene toda la aplicación con un500vacío al iniciar.
Registrar Doconut en Global.asax
No hay constructor ni canal de middleware en System.Web. Doconut se compone una vez por proceso de trabajo mediante DoconutHost.Initialize en Application_Start, y se libera con DoconutHost.Shutdown en Application_End:
// Global.asax.cs
protected void Application_Start()
{
Doconut.DoconutHost.Initialize(options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});
}
protected void Application_End()
{
Doconut.DoconutHost.Shutdown();
}DoconutHost.Initialize crea los servicios que el controlador, el módulo de recursos y tu propio código utilizan. Tu código los accede a través de DoconutHost.Services (ver DoconutHost). Sólo la primera llamada configura algo; una segunda llamada se ignora. En una aplicación MVC, también mantén las dos rutas de Doconut fuera del enrutamiento — Quick Start muestra el Application_Start completo.
Todas las opciones
DoconutOptions acepta el siguiente conjunto de propiedades configurables. Cada una es opcional.
| Propiedad | Predeterminado | Descripción |
|---|---|---|
UnsafeMode | false | Cuando es false, DocImage.axd sirve una página solo a la sesión ASP.NET que abrió el documento. Cuando es true, cualquier solicitud que lleve el token es atendida. Déjalo en false. |
ShowDoconutInfo | false | Cuando es true, una solicitud a DocImage.axd sin token responde con una barra de versión en lugar de 404. Útil como verificación rápida; desactívalo en producción. |
ResourcesPath | "/doconut-res" | Donde el módulo de recursos sirve los scripts, estilos e íconos incrustados. Cambia esto solo junto con el ResPath del visor y cualquier IgnoreRoute de MVC. |
LicensePath | "" | Ruta completa al archivo de licencia. Vacío significa pasar al siguiente origen, y luego al descubrimiento automático. |
LicenseContent | "" | Contenido bruto de la licencia — desde una variable de entorno, un almacén secreto o una base de datos. |
LicenseStream | null | Licencia como flujo, leída una vez al iniciar. |
MiddlewarePath | "/doconut" | No se usa en este paquete. El punto final de la página es el controlador DocImage.axd declarado en Web.config, sea lo que sea que esté configurado aquí. Aún se valida: debe comenzar con / y diferir de ResourcesPath. |
ResetLicense | false | No se usa en este paquete. La licencia se lee una vez, en DoconutHost.Initialize; recicla el grupo de aplicaciones después de reemplazar un archivo de licencia. |
Cuando se establece más de una fuente de licencia, LicenseStream prevalece sobre LicenseContent, que prevalece sobre LicensePath, que prevalece sobre el descubrimiento automático — ver License Setup.
Doconut.DoconutHost.Initialize(options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
options.ResourcesPath = "/doconut-res"; // where the viewer's JS/CSS/images are served from
options.UnsafeMode = false; // keep session security on
options.ShowDoconutInfo = false;
});
// The page endpoint is not an option here: it is the DocImage.axd handler declared in Web.config.Próximos pasos
- Quick Start — abre un documento y rásterízalo en el navegador, en MVC 5 o Web Forms.
- License Setup — dónde Doconut busca tu archivo de licencia.
¿Fue útil esta página?