Razor Pages、MVC、ミニマル API
ビューアはホスティングスタイルに縛られません。Razor ビューまたは静的ページからマウント div をレンダリングし、コントローラアクション、ページハンドラ、またはマッピングされたエンドポイントからドキュメントを開くことができます。
Doconut は、ASP.NET Core の他のすべてと同様に登録されます:コンテナ内のサービスとパイプライン内のミドルウェアです。認証、ロギング、DI グラフ、デプロイストーリーを継承します。これはそれらの内部で実行されているため、横にあるだけではありません。
問題
ほとんどのドキュメントビューアは別個のサービスとして提供されます。つまり、第二のデプロイユニット、第二の認証情報、ドキュメントが通過するネットワークホップ、そして深夜 2 時に誰かに連絡する別の課題が生じます。
Doconut はライブラリです。AddDoconut() はサービスコレクションに追加し、UseDoconut() はパイプラインに組み込みます。プロセスのアイデンティティで実行され、設定を参照し、ロガーに書き込み、アプリケーションをデプロイするものによってデプロイされます。
実際の結果として、認可は本来あるべき場所に残ります。独自の権限チェックの後に 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 のすべてで同じ統合が有効になるようにしています。
共有レンダーキャッシュにより、Web ファームおよび分散デプロイがサポートされます。あるノードで開いたドキュメントは、次のリクエストが別のノードに来ても読み取り可能です。
いいえ。レンダリングはネイティブで行われ、Office の相互運用やヘッドレス Word、COM 自動化は不要です。
一時ライセンスの取得には数分かかり、完全にご自身のマシン上で実行されます。重要なファイルは、現在のビューアで既に問題を起こしているものです。