ライセンス設定

IIS 下で Doconut がライセンスファイルを探す場所

Doconut がなくても、Doconut はドキュメントのレンダリングを続けます — 各ページには評価用の透かしが付与されます。このページでは、Global.asax でライセンスを供給する4つの方法、ライセンスを供給しない場合に Doconut がどこを探すか、そしてプラグインのライセンスが欠如している場合に何が起こるかを説明します。

ライセンスを供給する4つの方法

DoconutOptions には、ファイルパス、ストリーム、または生のコンテンツという3つの明示的なソースがあります — それらが設定されていない場合は自動検出が行われます。すべては DoconutHost.Initialize で一度だけ読み取られます。複数が設定されている場合、優先順位は次のとおり正確です:

LicenseStream > LicenseContent > LicensePath > 自動検出

パスで指定

LicensePath に完全なパスを指定してください。相対パスはプロセスの現在ディレクトリに対して解決され、IIS ではそれがワーカープロセス自身のフォルダーであり、サイトのフォルダーではありません。HostingEnvironment.MapPath はサイト相対パスを完全なパスに変換します:

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});

ファイルが存在しない場合、Doconut は例外をスローせず、自動検出にフォールバックもしません:ライセンスは読み込まれず、ビューアに透かしが表示されます。同じフォルダー内のプラグインごとのライセンスファイル(Doconut.Viewer.<Capability>.lic)も同時に読み込まれるため、LicensePath と AddPlugin<...>() はベースライセンスの隣にプラグインライセンスがある場合に連携して動作します。

ストリームで指定

LicenseStream は起動時に一度だけ読み取られます — ライセンスがディスク上のファイルではなく、埋め込みリソースやシークレットストアから取得される場合に便利です。

csharp
// 優先順位: LicenseStream > LicenseContent > LicensePath > 自動検索。
Doconut.DoconutHost.Initialize(options =>
{
    options.LicenseStream = licenseStream;
});

コンテンツで指定

LicenseContent はライセンステキストそのものを受け取ります — 環境変数、データベース、またはシークレットストアから取得できるため、サイトにライセンスファイルを配置する必要はありません。

csharp
// データベース、環境変数、またはシークレットストアから取得した License XML -
// ディスク上にファイルはありません。LicenseStream のみが上回ります。
Doconut.DoconutHost.Initialize(options =>
{
    options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});

自動検出

3つの設定をすべて行わない場合、Doconut は自らライセンスを検索します:

csharp
// 何も設定せず、Doconut がライセンスを自ら検索します。順序は以下の通りです:
//   1. {CurrentDirectory}\wwwroot
//   2. {AppContext.BaseDirectory}\wwwroot   (IIS の場合: サイトのルートフォルダー)
// まず Doconut.lic を探し、次に Doconut.Viewer.lic、さらに各プラグインごとの
// Doconut.Viewer.<Capability>.lic ファイルをそれと同じ場所で探します。
Doconut.DoconutHost.Initialize();

順番に検索される2つのフォルダーと対象ファイルは次のとおりです:

text
1. {CurrentDirectory}\wwwroot
2. {AppContext.BaseDirectory}\wwwroot

In each folder:
  Doconut.lic                        — if found, this is the only file read
  Doconut.Viewer.lic                 — base viewer license
  Doconut.Viewer.<Capability>.lic    — per-plugin licenses, read only next to Doconut.Viewer.lic

IIS および IIS Express では、AppContext.BaseDirectory は サイトのルートフォルダー です — Web.config を保持するフォルダーであり、bin フォルダーではありません。したがって、ライセンスはサイトルートの下の wwwroot に配置する必要があります:

text
MySite\
  Web.config
  Global.asax
  bin\
  wwwroot\
    Doconut.Viewer.lic
    Doconut.Viewer.Converter.lic

プロジェクト内では、wwwroot\*.lic を Web.config の隣に置き、サイトと共にフォルダーをデプロイしてください。ビルドステップでどこかにコピーする必要はありません。.lic を他の場所、例えば bin\、Web.config の隣、または wwwroot のサブフォルダーに置いても、決して読み込まれません。

ソース管理から .lic ファイルを除外してください。サイトと一緒にデプロイするか、シークレットストアから LicenseContent または LicenseStream を通じてライセンスを供給してください。

ライセンスがない場合の挙動

ライセンスが見つからなくても例外はスローされません。DoconutHost.Initialize は成功し、サイトは起動し、ビューアは動作しますが、すべてのページに評価用の透かしが付与され、オプション機能は付与されません。

見つかったが拒否されたライセンスファイルは別です。無効な署名、改ざん、またはライセンスのバージョンウィンドウ外でのビルドにより、OpenDocumentAsync は理由とともに LicenseException をスローします。

プラグインは起動時にライセンスが必要

DoconutHost.Initialize は Application_Start で例外をスローします:

text
InvalidOperationException: The Converter plugin is registered via AddPlugin but no active
license grants Converter. Remove the AddPlugin<...>() call or install a license (or
trial/demo) that includes Converter.

System.Web の下では、そのメッセージはブラウザに表示されません。サイトへのすべてのリクエストは空の 500 で応答します — エラーページもスタックトレースもなく、IIS のログにも何も記録されません。例外は Windows イベントログ(アプリケーションログ、ソース ASP.NET)にのみ記録されます。AddPlugin 行を追加した直後にサイト全体が応答しなくなった場合は、コードの前に wwwroot のライセンスファイルを確認してください:プラグインの Doconut.Viewer.<Capability>.lic は Doconut.Viewer.lic の隣に配置する必要があり、ベースライセンスがないとプラグインファイルはまったく読み込まれません。

読み込まれたライセンスの検証

IDoconutLicenseService は SDK が使用する同じ真実の情報源です。DoconutHost.Services から解決して認証済み診断エンドポイントを公開したり、機能フラグを制御したりします — ライセンス内容を返すことは決してしないでください:

csharp
// GET /License/Status
public ActionResult Status()
{
    var license = Doconut.DoconutHost.Services.GetRequiredService<IDoconutLicenseService>();

    return Json(new
    {
        viewer     = license.IsViewerLicensed || license.IsTemporary,
        temporary  = license.IsTemporary,
        search     = license.IsCapabilityGranted(LicenseCapability.Search),
        annotation = license.IsCapabilityGranted(LicenseCapability.Annotation),
        converter  = license.HasConverter,
        dicom      = license.HasDicom
    }, JsonRequestBehavior.AllowGet);
}

ライセンスは DoconutHost.Initialize で一度だけ読み取られます。ライセンスファイルを置き換えた後は、アプリケーションプールをリサイクル(または Web.config をタッチ)して、Application_Start が再度実行されるようにしてください。

トラブルシューティング

症状考えられる原因確認事項
ビューアは動作するが、すべてのページに透かしが入るライセンスが見つからなかった.lic は <site root>\wwwroot にありますか? 上記のステータスエンドポイントを呼び出してください
プラグイン追加直後、すべてのリクエストが空の 500 で応答する登録されたプラグインにライセンスが付与されていないWindows イベントログ、ソース ASP.NET;プラグインの .lic が Doconut.Viewer.lic の隣にあるか確認してください
LicensePath はローカルでは動作するがサーバーでは動作しないワーカープロセスフォルダーに対して相対パスが解決されているHostingEnvironment.MapPath("~/wwwroot/...") でビルドしてください
置き換えた .lic ファイルに効果がないアプリケーション起動時にライセンスが読み込まれたアプリケーションプールをリサイクルしてください
OpenDocumentAsync が LicenseException をスローするライセンスは見つかったが拒否された例外メッセージを確認してください;信頼できないクライアントには表示しないでください

次のステップ

このページは役に立ちましたか?