DoconutHost
System.Web のコンポジションルート
DoconutHost (namespace Doconut) は、ワーカープロセス全体の Doconut のサービスを所有する静的クラスです。ASP.NET Core アプリケーションはそれらのサービスをフレームワーク自身のコンテナに組み込みますが、クラシック ASP.NET にはコンテナがないため、DoconutHost がコンテナを作成して保持します。DocImage.axd ハンドラとリソースモジュールはそれから必要なものすべてを解決し、あなたのコードも同様です。
| メンバー | 目的 |
|---|---|
static void Initialize(Action<DoconutOptions>? configure = null, Action<IServiceCollection>? configureServices = null) | サービスを構築します — 一度だけ |
static IServiceProvider Services { get; } | 構築されたコンテナ |
static bool IsInitialized { get; } | true が Initialize 実行された後に一度 |
static void Shutdown() | バックグラウンド作業を停止し、コンテナを破棄します |
初期化
Global.asax.cs の中の Application_Start から呼び出します:
// Global.asax.cs, Application_Start - ワーカープロセスごとに一度だけ。2回目の呼び出しは何もしません:
// 最初の呼び出しのオプションが優先されます。
Doconut.DoconutHost.Initialize(
options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
},
services =>
{
// 任意です。Doconut の独自登録の後、コンテナが構築される前に実行されます、
// そのため、サービスを追加したり、Doconut が登録したものを置き換えることができます。
services.AddMemoryCache();
});configureは DoconutOptions を受け取ります:ライセンス、セキュリティスイッチ、プラグイン、ウィジェット。configureServicesはオプションです。Doconut が独自のサービスを登録した後、コンテナが構築される前に実行されるため、サービスを追加できます — Web ファーム向けのAddDoconutDistributedが一般的です — または Doconut が行った登録を置き換えることができます。
最初の呼び出しが有効です。 Initialize は冪等です:2 回目の呼び出しはすぐに戻り、そのデリゲートは実行されません。これにより重複した Application_Start が無害になりますが、Initialize を再度呼び出して設定を変更することはできません — 代わりにアプリケーションプールをリサイクルしてください。
ここで例外がスローされます — ライセンスなしのプラグイン、無効なオプション、不完全なファーム構成 — これらは Application_Start 内で発生します。ASP.NET はその後、空の 500 で全てのリクエストに応答し、例外は Windows のイベントログ(アプリケーションログ、ソース ASP.NET)にのみ記録されます。
サービスと IsInitialized
System.Web にはコントローラ、ページ、ハンドラ向けのコンストラクタインジェクションがないため、Doconut のサービスは使用する場所で解決してください:
// System.Web にはコンストラクタ インジェクションがありません: 使用する場所で Doconut サービスを解決してください。
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();
// Converter プラグインが有効なときのみ登録されます(プラグインページを参照)。
var converter = Doconut.DoconutHost.Services.GetRequiredService<DocumentConverter>();Services は、Initialize の前に読み取られた場合、InvalidOperationException(DoconutHost.Initialize must be called in Application_Start (Global.asax) before any Doconut request is served.)をスローします。より早く実行される可能性のあるコード — モジュールや静的コンストラクタ — は、まず IsInitialized をチェックできます。
コードが通常解決するものは次のとおりです:
| サービス | ライフタイム | 役割 |
|---|---|---|
Viewer | Transient | 開く、閉じる、注釈、リソースヘルパー — Viewer を参照 |
DocumentConverter | Transient | 変換 — Converter プラグインでのみ登録 |
IDoconutLicenseService | Singleton | 読み込まれたライセンスとその機能 — Licensing を参照 |
DoconutOptions | Singleton | Initialize に渡されたオプション |
HealthCheckService | Singleton | 以下の "doconut" ヘルスチェックを実行 |
DoconutHost.Services から解決し、独自のコンテナからは決して解決しないでください。Doconut を別のコンテナに登録すると、ハンドラやモジュールが参照しない第二の独立したサービスセットが構築されます:それを通じて開かれたドキュメントは DocImage.axd からは認識されません。
シャットダウン
// Global.asax.cs, Application_End - バックグラウンド作業を停止し、コンテナを破棄します。
// 2回呼び出しても安全で、Initialize が実行されていなくても安全です。
Doconut.DoconutHost.Shutdown();Shutdown は Doconut のバックグラウンド作業(分散モードで使用)を停止し、コンテナを破棄します。2 回呼び出しても安全で、Initialize が実行されていない場合でも安全です — 例えば、最初のリクエストの前にアプリケーションプールがリサイクルされた場合などです。
ヘルスチェック
Doconut はライセンス状態を報告する "doconut" という名前のヘルスチェックを登録します。クラシック ASP.NET には独自のヘルスチェックエンドポイントがないため、コントローラから公開してください:
// GET /Health - Doconut は "doconut" ヘルスチェックを登録し、ライセンス状態を報告します:
// 正常 (有効)、低下 (トライアルまたはライセンスファイルなし)、異常 (期限切れ)。
public async Task<ActionResult> Index()
{
var health = Doconut.DoconutHost.Services.GetRequiredService<HealthCheckService>();
HealthReport report = await health.CheckHealthAsync();
Response.StatusCode = report.Status == HealthStatus.Unhealthy ? 503 : 200;
return Content(report.Status.ToString(), "text/plain");
}| ステータス | 意味 |
|---|---|
Healthy | 有効なライセンスがロードされています |
Degraded | トライアル、またはライセンスファイルが見つかりません |
Unhealthy | ライセンスが期限切れです |
ASP.NET Core 拡張メソッド
このパッケージには UseDoconut() と UseDoconutResources() も含まれており、ASP.NET Core パイプライン拡張として提供されています。これは、ASP.NET Core パッケージとコードを共有しているためです。このパッケージでは両方とも [Obsolete] とマークされており、使用されていません:System.Web アプリケーションには追加できるリクエストパイプラインがありません。代替として、Installation からの二つの Web.config 登録があります:
| ASP.NET Core | .NET Framework 4.7.2 |
|---|---|
builder.Services.AddDoconut(...) | DoconutHost.Initialize(...) は Application_Start 内で |
app.UseDoconut() | Doconut.DocImageHandler は DocImage.axd 上で Web.config 内で |
app.UseDoconutResources() | Doconut.DoconutResourceModule は Web.config 内で |
| コンストラクタ インジェクション | DoconutHost.Services.GetRequiredService<T>() |
| ホスト シャットダウン | DoconutHost.Shutdown() は Application_End 内で |
このページは役に立ちましたか?