Como Configurar Doconut para Implantações de Servidor Distribuído
← Back to Blog••4 min read

Como Configurar Doconut para Implantações de Servidor Distribuído

Usar Doconut na Configuração de Servidor Distribuído

Quando você precisa servir PDFs, arquivos do Office, desenhos CAD ou imagens a partir de um cluster de nós ASP.NET Core, o modo distribuído do Doconut permite que cada nó leia os mesmos artefatos de página de um local compartilhado. O resultado é um visualizador horizontalmente escalável e seguro que funciona atrás de um balanceador de carga sem sessões persistentes.

Por que o Modo Distribuído Importa

  • Escalabilidade – Cada nó pode publicar páginas em um compartilhamento UNC ou na nuvem; qualquer outro nó pode servi‑las instantaneamente.
  • Segurança – Os artefatos são armazenados criptografados na pasta compartilhada; o visualizador valida cada solicitação contra o token de sessão ASP.NET.
  • Zero dependência do Office – O plugin Converter roda no servidor, convertendo Word, Excel, PowerPoint, CAD e imagens para PDF ou imagens sem instalar o Microsoft Office.

Essas características permitem que DMS corporativos, CRM ou portais de e‑learning mantenham o processamento de documentos dentro do back‑end .NET enquanto escalam para dezenas de contêineres.

Armazenamento Compartilhado para o Modo Distribuído

No modo distribuído, o Doconut espera que os artefatos de página (páginas PDF, blocos de imagem, etc.) sejam gravados em um local de armazenamento acessível por todos os nós da fazenda – um compartilhamento de rede, contêiner Azure Blob, bucket S3 ou qualquer outro armazenamento compartilhado suportado pelo recurso Progressive Cloud Publishing. O visualizador procura automaticamente a pasta de artefatos que corresponde ao token de segurança por documento, portanto nenhum código adicional é necessário além de garantir que todos os nós tenham o mesmo acesso de leitura‑escrita ao armazenamento escolhido.

Dica: Use o mesmo caminho UNC (por exemplo, \\fileserver\doconut) ou URL da nuvem em todas as configurações de instância e mantenha as permissões da pasta consistentes. O comportamento UsePerTokenSubfolders está habilitado por padrão e isola as páginas de cada documento.

Registrando Doconut e Middleware de Sessão

Doconut depende do estado de sessão do ASP.NET Core para a segurança por documento. Um cache distribuído é necessário apenas quando você usa um projeto minimal‑API; MVC ou Razor Pages já adicionam um.

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

builder.Services.AddDistributedMemoryCache(); // a sessão precisa de um cache
builder.Services.AddSession();                 // Doconut valida contra a sessão

app.UseSession();               // Deve ser executado antes de UseDoconut()
app.UseDoconutResources();      // Registra recursos estáticos do visualizador
app.Map("/doconut", branch => branch.UseDoconut());

Caminhos Personalizados (opcional)

Se outra rota conflitar com /doconut, altere os caminhos uma única vez e mantenha o 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 anteceda MiddlewarePath ou ResourcesPath com uma barra inicial; o visualizador adiciona a barra automaticamente.

Juntando Tudo: Exemplo Minimal‑API

Abaixo está uma configuração compacta e pronta para produção que combina o requisito de armazenamento compartilhado, o tratamento de sessão e o registro do Doconut.

var builder = WebApplication.CreateBuilder(args);

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

// 2️⃣ Sessão e cache (necessário para segurança)
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();

var app = builder.Build();

app.UseRouting();
app.UseSession();
app.UseDoconutResources();                     // pacote estático do visualizador
app.Map("/doconut", branch => branch.UseDoconut());

app.Run();

Implante este binário em quantos contêineres Docker ou serviços Windows desejar, atrás de um balanceador de carga. Desde que cada instância possa alcançar o local de armazenamento compartilhado configurado para os artefatos de página, o visualizador buscará as páginas de qualquer nó, e uploads/conversões sobreviverão a saltos entre nós.

Implantando Atrás de um Balanceador de Carga

  1. Exponha a mesma URL base (por exemplo, ` em cada nó.
  2. Desative sessões persistentes – O modo distribuído do Doconut elimina a necessidade de afinidade de sessão.
  3. Garanta o monitoramento de saúde verificando um endpoint básico da sua aplicação (por exemplo, /health) para que o balanceador direcione o tráfego apenas para nós ativos.
  4. Monitore a pasta compartilhada quanto ao crescimento; o TTL padrão de 30 minutes mantém o armazenamento limitado, mas você pode ajustá‑lo conforme as necessidades de conformidade.

Com estas etapas, sua aplicação .NET intensiva em documentos pode atender a milhares de visualizadores simultâneos, manter cada página criptografada em repouso e evitar a sobrecarga de instalar o Office em cada servidor.

Pronto para experimentar? Obtenha um teste gratuito do Doconut, inicie alguns contêineres, aponte‑os para um caminho UNC compartilhado e veja o visualizador escalar sem nenhum cookie de sessão persistente.

#dotnet#distributed#web‑farm#document‑viewer#scaling#distribuído#fazenda‑web#visualizador‑de‑documentos#escalabilidade