Razor Pages, MVC 및 최소 API
뷰어는 호스팅 스타일에 얽매이지 않습니다. Razor 뷰 또는 정적 페이지에서 마운트 div를 렌더링하고, 컨트롤러 액션, 페이지 핸들러 또는 매핑된 엔드포인트에서 문서를 엽니다.
문제
대부분의 문서 뷰어는 별도의 서비스로 제공됩니다. 이는 두 번째 배포 단위, 두 번째 자격 증명 세트, 문서가 이동하는 네트워크 홉, 그리고 새벽 2시에 누군가에게 알릴 또 다른 문제가 있다는 의미입니다.
Doconut은 라이브러리입니다. AddDoconut()는 서비스 컬렉션에 추가하고, UseDoconut()는 파이프라인에 삽입합니다. 이는 프로세스 ID 하에서 실행되며, 설정을 확인하고, 로거에 기록하며, 애플리케이션을 배포하는 방식으로 배포됩니다.
실질적인 결과는 권한 부여가 제자리를 유지한다는 것입니다. 자체 권한 검사를 마친 후 OpenDocumentAsync()를 호출하면, 뷰어는 전달한 문서만 렌더링할 수 있습니다.
기능
뷰어는 호스팅 스타일에 얽매이지 않습니다. Razor 뷰 또는 정적 페이지에서 마운트 div를 렌더링하고, 컨트롤러 액션, 페이지 핸들러 또는 매핑된 엔드포인트에서 문서를 엽니다.
엔드포인트가 파이프라인에 존재하므로, [Authorize]는 기존과 동일하게 작동합니다. 연동할 두 번째 신원 시스템이 없습니다.
문서 보안은 ASP.NET 세션 상태에 기반하므로 UseSession()을 UseDoconut()보다 먼저 등록해야 합니다. 이는 뷰어가 인식하는 사용자가 애플리케이션과 동일함을 의미합니다.
로드 밸런서 뒤의 여러 노드가 렌더 캐시를 공유하므로, 한 노드에서 열린 세션이 다음 요청이 다른 노드에 도착해도 계속 작동합니다.
IIS, Kestrel 또는 직접 만든 컨테이너 이미지. 통합 방식은 라이선스 파일이 마운트되는 위치를 제외하고는 변하지 않습니다.
Converter 플러그인을 사용하면 DocumentConverter.ConvertAsync()가 동일 프로세스에서 실행됩니다 — 별도 서비스, 임시 업로드, 왕복 전송이 없습니다.
통합
UserMayRead와 ResolvePath는 사용자의 코드입니다. 이것이 핵심이며, Doconut은 어떤 문서가 존재하는지 또는 누가 볼 수 있는지 절대 알지 못합니다.
지원되는 플랫폼
// Program.cs
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
});
builder.Services.AddSession(); // document security rides on session state
var app = builder.Build();
app.UseSession(); // call UseSession() before UseDoconut()
app.UseDoconutResources(); // must be registered before UseDoconut()
app.UseDoconut();
// Open the document server-side, behind your own authorization
app.MapPost("/api/open", async (Viewer viewer, HttpContext ctx, string documentId) =>
{
if (!await ctx.UserMayRead(documentId))
return Results.Forbid();
// The token is opaque — hand it to the widget, never log or persist it.
string token = await viewer.OpenDocumentAsync(ResolvePath(documentId));
return Results.Ok(new { token });
}).RequireAuthorization();세부 정보
예. 두 버전 모두 지원되며 동일한 DI+미들웨어 아키텍처를 사용합니다. 버전별 상세 정보가 필요하면 각각 전용 페이지가 있습니다.
아니요, 이는 의도된 설계입니다. 통합은 항상 미들웨어와 JavaScript 위젯으로 이루어져 Razor Pages, MVC, Web Forms, Blazor 모두에서 동일하게 유효합니다.
공유 렌더 캐시를 통해 웹 팜 및 분산 배포를 지원합니다. 한 노드에서 연 파일은 이후 요청이 다른 노드에 도달해도 읽을 수 있습니다.
아니요. 렌더링은 네이티브이며 Office 인터옵, 헤드리스 Word, COM 자동화가 필요하지 않습니다.