ライセンス
機能、ライセンス層、そしてライセンスサービス
このページは、ライセンスが Doconut の動作にどのように影響するかを示すランタイムリファレンスです。各ライセンス状態で何が許可されるか、機能がどのように付与されるか、そしてコードからそれらすべてを確認する方法を説明します。(ライセンスのロードについては、ライセンス設定 を参照してください。)
ライセンス状態とその機能
| 状態 | ドキュメントを開くか? | 透かし | 機能 |
|---|---|---|---|
| フル(有料)ライセンス(サブスクリプション/更新ウィンドウ内) | はい | なし | 購入されたもの(Has* フラグ) |
| 一時ライセンス(Developer/NFR — 評価ライセンス、期限日前) | はい | なし | すべて — 包括的付与(評価フネル) |
| 期限切れ(期限を過ぎた一時ライセンス、または更新日を過ぎた有料サブスクリプション) | はい | 評価用透かし | 付与なし |
| ライセンスファイルが全くない | はい | 評価用透かし | 付与なし |
| 見つかったが拒否(無効な署名、改ざん、ブラックリスト、またはライセンスのバージョンウィンドウより新しいビルド) | なし — すべてのオープンで LicenseException | — | — |
二つの重要なポイント:
- ライセンスがないことは一時ライセンスではありません。 ライセンスファイルがない場合、ページは透かし付きで表示され、機能(検索、注釈、プラグイン)はすべて無効になります。フル機能で透かしのない体験を得るには、実際の 一時ライセンス が必要です(取得する)。
- 拒否されたライセンスだけがオープンをブロックします。 カレンダー/サブスクリプションの期限切れは透かし付き表示に劣化しますが、ビルドがライセンスのバージョンウィンドウ より新しい 場合は拒否され、
LicenseExceptionで 即座に失敗 します。そのためデプロイ時に捕捉でき、透かし付き出力を黙って出荷することはありません。その例外(OpenDocumentAsyncから)はLicense.RejectionMessageの理由を保持します。
機能
Doconut はオプション機能を 機能(capability) で制御します。現在、オプトインの Converter と DICOM プラグイン、そして組み込みの Search と Annotation 機能があり、いずれもライセンスによって付与されます。ベースビューアは機能ではなく、前提条件であり、IsViewerLicensed として表れます:
bool viewerLicensed = lic.IsViewerLicensed; // 非TRIALライセンスが存在し、かつこのビルドのバージョンをカバーしているパイプライン全体で使用される唯一のゲートは IsCapabilityGranted です:
bool searchGranted = lic.IsCapabilityGranted(LicenseCapability.Search);そのロジックは実装からそのまま引用です:有効(期限切れでない)一時ライセンスは すべての 機能を付与します — まだ専用の購入フラグがない機能も含みます。実際に購入されたライセンスは Has* フラグ通りに付与し、未マッピングのものは デフォルトで拒否 します。(レガシーな TRIAL タイプのファイルは 権利 ではなく、未ライセンスとして扱われます:透かしが入り、何も付与されません。)
一時ライセンス
一時(Developer/NFR)ライセンスは ExpiryNote タグでマークされ、固定の有効期限を持ちます:
| メンバー | 意味 |
|---|---|
IsTemporary | ExpiryNote タグが存在する(検出はタグの有無で行い、ノートのテキストは一致させない、動的です) |
ExpiryNote | ライセンスに埋め込まれた情報テキスト |
LicenseExpiry | 固定の有効期限日 (DateTime?) |
有効期限の意味は層によって異なります:一時ライセンスは LicenseExpiry の 日付のみ で期限切れとなります(サブスクリプションウィンドウは無視されます;日付がない一時ライセンスは期限切れとして扱われ、安全策になります)。他のすべてのライセンスはサブスクリプション/更新ウィンドウの日付で期限切れになります。
IDoconutLicenseService リファレンス
IDoconutLicenseService(名前空間 Doconut.Core.Interfaces)を DoconutHost.Services から取得します。これはシングルトンで、ライセンスは DoconutHost.Initialize で一度だけ解析されます:
| メンバー | 意味 |
|---|---|
License | 完全な DoconutLicenseInfo スナップショット(以下) |
IsTrial | レガシーな TRIAL タイプのファイル(未ライセンスとして扱われ、権利ではありません) |
IsTemporary / ExpiryNote / LicenseExpiry | 一時ライセンスのマーカー |
IsExpired | 上記の層ルールに基づく期限切れ |
IsVersionValid | このビルドがライセンスのサポートウィンドウ内にあるか |
IsViewerLicensed | 非 TRIAL ファイルが見つかり、かつバージョンがカバーされている — 基本前提条件 |
IsCapabilityGranted(cap) | 唯一の機能ゲート |
HasSearch HasAnnotation HasConverter HasDicom | 機能ごとの購入フラグに基づきリリース — 一時ライセンス対応の回答には IsCapabilityGranted を使用 |
IsValidForDomain(host) | ホストのカバレッジ;V4 ライセンスはワイルドカード *.* を使用 |
LicenseRejectionReason | 空でない場合 ⇒ このメッセージでオープンがブロックされる |
DoconutLicenseInfo は管理パネル向けの表示しやすいスナップショットを公開します:Owner、Email、LicenseType、Domain、IsLicenseFileFound、IsVersionValid、IsTrial、IsExpired、Has* フラグ、一時ライセンスフィールド、そして RejectionMessage。
// GET /Features - SDK が使用する同じ真実のソースから UI を機能フラグ化
public ActionResult Index()
{
var lic = Doconut.DoconutHost.Services.GetRequiredService<IDoconutLicenseService>();
return Json(new
{
viewer = lic.IsViewerLicensed || lic.IsTemporary,
search = lic.IsCapabilityGranted(LicenseCapability.Search),
annotation = lic.IsCapabilityGranted(LicenseCapability.Annotation),
conversion = lic.HasConverter,
dicom = lic.HasDicom,
}, JsonRequestBehavior.AllowGet);
}ヘルスチェック
Doconut はライセンス状態を報告する "doconut" ヘルスチェックを登録します。従来の ASP.NET には独自のヘルスエンドポイントがないため、コントローラから公開します:
// GET /Health - Doconut がライセンス状態を報告する "doconut" ヘルスチェックを登録
// Healthy(有効)、Degraded(トライアルまたはライセンスファイルなし)、Unhealthy(期限切れ)。
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");
}これを監視に組み込み、期限切れのサブスクリプションはサポートチケットではなくアラートになります。DoconutHost でステータス値を確認してください。
バージョンアップグレード
ライセンスは バージョンウィンドウ をカバーします。NuGet パッケージをそのウィンドウより 新しい ビルドに更新すると、ライセンスはこのビルドに対して無効になり、IsVersionValid が false になり、LicenseException で オープンがブロック されます(理由は License.RejectionMessage にあります)— 故意に即座に失敗させることで、古いまたは未ライセンスのビルドがデプロイ時に捕捉され、製品出力が黙って透かし付くことを防ぎます。サブスクリプションを更新し、wwwroot の .lic を置き換え、アプリケーションプールをリサイクルして DoconutHost.Initialize が新しいライセンスをロードするようにします。
このページは役に立ちましたか?