Come configurare Doconut per distribuzioni server distribuite
← Back to Blog••4 min read

Come configurare Doconut per distribuzioni server distribuite

Utilizzare Doconut nella configurazione server distribuita

Quando è necessario servire PDF, file Office, disegni CAD o immagini da un cluster di nodi ASP.NET Core, la modalità distribuita di Doconut consente a ogni nodo di leggere gli stessi artefatti di pagina da una posizione condivisa. Il risultato è un visualizzatore sicuro e orizzontalmente scalabile che funziona dietro un bilanciatore di carico senza sessioni sticky.

Perché la modalità distribuita è importante

  • Scalabilità – Ogni nodo può pubblicare pagine su una condivisione UNC o cloud; qualsiasi altro nodo può servirle istantaneamente.
  • Sicurezza – Gli artefatti sono memorizzati crittografati nella cartella condivisa; il visualizzatore convalida ogni richiesta rispetto al token di sessione ASP.NET.
  • Nessuna dipendenza da Office – Il plugin Converter gira sul server, convertendo Word, Excel, PowerPoint, CAD e immagini in PDF o immagini senza installare Microsoft Office.

Queste caratteristiche consentono a DMS aziendali, CRM o portali e‑learning di mantenere l'elaborazione dei documenti all'interno del back‑end .NET, scalando a decine di container.

Archiviazione condivisa per la modalità distribuita

In modalità distribuita Doconut si aspetta che gli artefatti di pagina (pagine PDF, tasselli di immagine, ecc.) vengano scritti in una posizione di archiviazione raggiungibile da ogni nodo del farm – una condivisione di rete, un contenitore Azure Blob, un bucket S3 o qualsiasi altra archiviazione condivisa supportata dalla funzionalità Progressive Cloud Publishing. Il visualizzatore cerca automaticamente la cartella degli artefatti che corrisponde al token di sicurezza per documento, quindi non è necessario alcun codice aggiuntivo oltre a garantire che tutti i nodi abbiano lo stesso accesso in lettura‑scrittura allo storage scelto.

Suggerimento: Utilizza lo stesso percorso UNC (ad esempio \\fileserver\doconut) o URL cloud in ogni configurazione dell'istanza e mantieni i permessi della cartella coerenti. Il comportamento UsePerTokenSubfolders è abilitato per impostazione predefinita e isola le pagine di ogni documento.

Registrazione di Doconut e middleware di sessione

Doconut si basa sullo stato di sessione ASP.NET Core per la sicurezza per documento. Una cache distribuita è necessaria solo quando si utilizza un progetto minimal‑API; MVC o Razor Pages ne aggiungono già una.

builder.Services.AddDoconut(options =>
{
    options.LicensePath = "Doconut.Viewer.lic";
});

builder.Services.AddDistributedMemoryCache(); // sessione richiede una cache
builder.Services.AddSession();                 // Doconut valida contro la sessione

app.UseSession();               // Deve essere eseguito prima di UseDoconut()
app.UseDoconutResources();      // Registra le risorse statiche del visualizzatore
app.Map("/doconut", branch => branch.UseDoconut());

Percorsi personalizzati (opzionale)

Se un altro percorso entra in conflitto con /doconut, modifica i percorsi una volta e mantieni il client BasePath sincronizzato:

builder.Services.AddDoconut(options =>
{
    options.MiddlewarePath = "/docs-engine";
    options.ResourcesPath  = "/docs-assets";
});
app.UseDoconutResources();
app.Map("/docs-engine", branch => branch.UseDoconut());

Non anteporre mai una barra iniziale a MiddlewarePath o ResourcesPath; il visualizzatore aggiunge automaticamente la barra.

Mettere tutto insieme: esempio Minimal‑API

Di seguito è riportata una configurazione compatta e pronta per la produzione che combina il requisito di archiviazione condivisa, la gestione della sessione e la registrazione di Doconut.

var builder = WebApplication.CreateBuilder(args);

// 1️⃣ Registrazione Core Doconut
builder.Services.AddDoconut(options =>
{
    options.LicensePath = Path.Combine(
        AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
    options.MiddlewarePath = "/doconut";
    options.ResourcesPath  = "/doconut-res";
});

// 2️⃣ Sessione e cache (necessario per la sicurezza)
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();

var app = builder.Build();

app.UseRouting();
app.UseSession();
app.UseDoconutResources();                     // pacchetto visualizzatore statico
app.Map("/doconut", branch => branch.UseDoconut());

app.Run();

Distribuisci questo binario su qualsiasi numero di container Docker o servizi Windows dietro un bilanciatore di carico. Finché ogni istanza può raggiungere la posizione di archiviazione condivisa configurata per gli artefatti di pagina, il visualizzatore recupererà le pagine da qualsiasi nodo, e i caricamenti/conversioni sopravviveranno ai salti tra nodi.

Distribuzione dietro un bilanciatore di carico

  1. Esporre lo stesso URL di base (ad esempio http://mioapp.example.com) su ogni nodo.
  2. Disabilitare le sessioni sticky – La modalità distribuita di Doconut elimina la necessità di affinità di sessione.
  3. Assicurare il monitoraggio di salute controlla un endpoint di base della tua applicazione (ad esempio /health) affinché il bilanciatore indirizzi il traffico solo ai nodi attivi.
  4. Monitorare la cartella condivisa per la crescita; il TTL predefinito di 30 minuti mantiene lo storage limitato, ma è possibile regolarlo in base alle esigenze di conformità.

Con questi passaggi, la tua applicazione .NET intensiva di documenti può servire migliaia di visualizzatori simultanei, mantenere ogni pagina crittografata a riposo e evitare l'overhead di installare Office su ogni server.

Pronto a provarlo? Ottieni una prova gratuita di Doconut, avvia un paio di container, puntali a un percorso UNC condiviso e osserva il visualizzatore scalare senza alcun cookie di sessione sticky.

#dotnet#distributed#web‑farm#document‑viewer#scaling#distribuito#visualizzatore‑documenti#scalabilità