
Cómo Configurar Doconut para Implementaciones de Servidores Distribuidos
Usar Doconut en Configuración de Servidor Distribuido
Cuando necesitas servir PDFs, archivos de Office, dibujos CAD o imágenes desde un clúster de nodos ASP.NET Core, el modo distribuido de Doconut permite que cada nodo lea los mismos artefactos de página desde una ubicación compartida. El resultado es un visor horizontalmente escalable y seguro que funciona detrás de un balanceador de carga sin sesiones pegajosas.
Por Qué Importa el Modo Distribuido
- Escalabilidad – Cada nodo puede publicar páginas en un recurso UNC o en la nube; cualquier otro nodo puede servirlas al instante.
- Seguridad – Los artefactos se almacenan encriptados en la carpeta compartida; el visor valida cada solicitud contra el token de sesión de ASP.NET.
- Sin dependencia de Office – El complemento Converter se ejecuta del lado del servidor, convirtiendo Word, Excel, PowerPoint, CAD e imágenes a PDF o imágenes sin instalar Microsoft Office.
Estas características permiten que los DMS empresariales, CRM o portales de e‑learning mantengan el procesamiento de documentos dentro del backend .NET mientras escalan a decenas de contenedores.
Almacenamiento Compartido para el Modo Distribuido
En modo distribuido Doconut espera que los artefactos de página (páginas PDF, mosaicos de imágenes, etc.) se escriban en una ubicación de almacenamiento accesible por cada nodo de la granja — un recurso compartido de red, contenedor Azure Blob, bucket S3 o cualquier otro almacenamiento compartido compatible con la función Progressive Cloud Publishing. El visor busca automáticamente la carpeta de artefactos que coincide con el token de seguridad por documento, por lo que no se requiere código adicional más allá de asegurar que todos los nodos tengan el mismo acceso de lectura‑escritura al almacenamiento elegido.
Consejo: Usa la misma ruta UNC (p. ej.,
\\fileserver\doconut) o URL de nube en la configuración de cada instancia y mantén los permisos de la carpeta consistentes. El comportamientoUsePerTokenSubfoldersestá habilitado por defecto y aísla las páginas de cada documento.
Registrando Doconut y Middleware de Sesión
Doconut depende del estado de sesión de ASP.NET Core para la seguridad por documento. Un caché distribuido solo es necesario cuando utilizas un proyecto minimal‑API; MVC o Razor Pages ya lo añaden.
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
});
builder.Services.AddDistributedMemoryCache(); // session necesita un cache
builder.Services.AddSession(); // Doconut valida contra session
app.UseSession(); // Debe ejecutarse antes de UseDoconut()
app.UseDoconutResources(); // Registra los assets estáticos del viewer
app.Map("/doconut", branch => branch.UseDoconut());
Rutas Personalizadas (opcional)
Si otra ruta entra en conflicto con /doconut, cambia las rutas una sola vez y mantén el cliente BasePath sincronizado:
builder.Services.AddDoconut(options =>
{
options.MiddlewarePath = "/docs-engine";
options.ResourcesPath = "/docs-assets";
});
app.UseDoconutResources();
app.Map("/docs-engine", branch => branch.UseDoconut());
Nunca antepongas una barra diagonal inicial a MiddlewarePath o ResourcesPath; el visor agrega la barra automáticamente.
Integrando Todo: Ejemplo Minimal‑API
A continuación se muestra una configuración compacta y lista para producción que combina el requisito de almacenamiento compartido, el manejo de sesiones y el registro de Doconut.
var builder = WebApplication.CreateBuilder(args);
// 1️⃣ Core Doconut registro
builder.Services.AddDoconut(options =>
{
options.LicensePath = Path.Combine(
AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
options.MiddlewarePath = "/doconut";
options.ResourcesPath = "/doconut-res";
});
// 2️⃣ Session and cache (requerido para seguridad)
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();
var app = builder.Build();
app.UseRouting();
app.UseSession();
app.UseDoconutResources(); // bundle estático del viewer
app.Map("/doconut", branch => branch.UseDoconut());
app.Run();
Despliega este binario en cualquier número de contenedores Docker o servicios Windows detrás de un balanceador de carga. Mientras cada instancia pueda alcanzar la ubicación de almacenamiento compartido que configuraste para los artefactos de página, el visor obtendrá las páginas de cualquier nodo, y las cargas/conversiones sobrevivirán a los saltos entre nodos.
Desplegando Detrás de un Balanceador de Carga
- Exponer la misma URL base (p. ej., ` en cada nodo.
- Desactivar sesiones pegajosas – El modo distribuido de Doconut elimina la necesidad de afinidad de sesión.
- Asegurar la monitorización de salud verifica un endpoint básico de tu aplicación (p. ej.,
/health) para que el balanceador solo dirija el tráfico a nodos activos. - Monitorear la carpeta compartida para detectar crecimiento; el TTL predeterminado de 30 minutos mantiene el almacenamiento limitado, pero puedes ajustarlo según los requisitos de cumplimiento.
Con estos pasos, tu aplicación .NET intensiva en documentos puede servir miles de espectadores concurrentes, mantener cada página encriptada en reposo y evitar la sobrecarga de instalar Office en cada servidor.
¿Listo para probarlo? Obtén una prueba gratuita de Doconut, inicia un par de contenedores, apúntalos a una ruta UNC compartida y observa cómo el visor escala sin una sola cookie de sesión pegajosa.