라이선스

기능, 라이선스 티어 및 라이선스 서비스

이 페이지는 라이선스가 Doconut의 동작을 어떻게 형성하는지에 대한 런타임 레퍼런스입니다. 각 라이선스 상태가 허용하는 내용, 기능이 부여되는 방식, 그리고 코드에서 이를 모두 검사하는 방법을 설명합니다. (라이선스를 로드하는 방법은 라이선스 설정을 참고하십시오.)

라이선스 상태 및 동작

상태문서 열기 가능?워터마크기능
전체 (유료) 라이선스 (구독/업데이트 기간 내)예없음구매된 항목 (Has* 플래그)
임시 라이선스 (Developer/NFR — 평가 라이선스, 만료일 이전)예없음전체 — 일괄 부여 (평가 퍼널)
만료 (만료일이 지난 임시 라이선스 또는 갱신일이 지난 유료 구독)예평가 워터마크부여된 기능 없음
라이선스 파일 없음예평가 워터마크부여된 기능 없음
발견되었지만 거부됨 (잘못된 서명, 변조, 블랙리스트, 또는 라이선스 버전 윈도우보다 최신 빌드)아니오 — 모든 열기에서 LicenseException——

두 가지 중요한 점:

  • 누락된 라이선스는 임시 라이선스가 아닙니다. 라이선스 파일이 없으면 페이지에 워터마크가 표시되고 기능(검색, 주석, 플러그인)이 활성화되지 않습니다. 전체 기능을 갖춘 워터마크 없는 경험을 위해서는 실제 임시 라이선스가 필요합니다 (구매하기).
  • 거부된 라이선스만 열기를 차단합니다. 캘린더/구독 만료는 워터마크가 있는 렌더링으로 낮아지지만, 라이선스 버전 윈도우보다 새로운 빌드를 배포하면 거부되고 LicenseException과 함께 빠르게 실패합니다. 따라서 배포 시에 이를 포착할 수 있으며, 워터마크된 출력을 조용히 배포하는 것이 아닙니다. 해당 예외(OpenDocumentAsync에서 발생)는 License.RejectionMessage의 이유를 포함합니다.

기능

Doconut는 기능을 통해 선택적 기능을 제어합니다. 현재는 선택 가능한 Converter와 DICOM 플러그인 및 내장 Search와 Annotation 기능이며, 각각 라이선스에 의해 부여됩니다. 기본 뷰어는 기능이 아니라 전제 조건이며, IsViewerLicensed로 표시됩니다:

csharp
bool viewerLicensed = lic.IsViewerLicensed; // 비TRIAL 라이선스가 존재하고 이 빌드 버전을 포함함

전체 파이프라인이 사용하는 단일 게이트는 IsCapabilityGranted입니다:

csharp
bool searchGranted = lic.IsCapabilityGranted(LicenseCapability.Search);

그 로직은 구현에서 그대로 가져온 것입니다: 활성(만료되지 않은) 임시 라이선스는 모든 기능을 부여합니다 — 아직 전용 구매 플래그가 없는 기능도 포함합니다; 실제 구매된 라이선스는 정확히 Has* 플래그만 부여하며 매핑되지 않은 항목에 대해서는 기본 거부합니다. (레거시 TRIAL 유형 파일은 권한이 아니며 라이선스가 없는 것으로 처리됩니다: 워터마크가 적용되고, 아무 것도 부여되지 않음.)

임시 라이선스

임시(Developer/NFR) 라이선스는 ExpiryNote 태그로 표시되며 강제 만료 날짜를 가집니다:

멤버의미
IsTemporaryExpiryNote 태그가 존재함 (탐지는 태그 존재 여부로 이루어지며, 메모 텍스트와 일치시키지 않음, 동적임)
ExpiryNote라이선스에 포함된 정보 텍스트
LicenseExpiry강제 만료 날짜 (DateTime?)

만료 의미는 티어에 따라 다릅니다: 임시 라이선스는 LicenseExpiry 날짜만 기준으로 만료됩니다(구독 윈도우는 무시됩니다; 날짜가 없는 임시 라이선스는 만료된 것으로 간주되어 안전하게 처리됩니다). 다른 모든 라이선스는 구독/업데이트 윈도우 날짜에 따라 만료됩니다.

IDoconutLicenseService 레퍼런스

IDoconutLicenseService(네임스페이스 Doconut.Core.Interfaces)를 DoconutHost.Services에서 해결합니다. 이는 싱글톤이며, 라이선스는 DoconutHost.Initialize에서 한 번 파싱됩니다:

멤버의미
License전체 DoconutLicenseInfo 스냅샷 (아래)
IsTrial레거시 TRIAL 유형 파일 (라이선스가 없는 것으로 처리 — 권한이 아님)
IsTemporary / ExpiryNote / LicenseExpiry임시 라이선스 표시자
IsExpired위 티어 규칙에 따라 만료됨
IsVersionValid이 빌드가 라이선스 지원 윈도우 내에 있음
IsViewerLicensedTRIAL이 아닌 파일이 발견되고 버전이 포함 — 기본 전제 조건
IsCapabilityGranted(cap)단일 기능 게이트
HasSearch HasAnnotation HasConverter HasDicom각 기능별 구매 플래그에 따라 제공 — 임시 라이선스를 고려한 답변은 IsCapabilityGranted 사용
IsValidForDomain(host)호스트 적용 범위; V4 라이선스는 와일드카드 *.* 사용
LicenseRejectionReason비어 있지 않음 ⇒ 이 메시지로 열기가 차단됨

DoconutLicenseInfo는 관리자 패널을 위한 표시 친화적인 스냅샷을 제공합니다: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, Has* 플래그, 임시 라이선스 필드, 그리고 RejectionMessage.

csharp
// 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에는 자체 헬스 엔드포인트가 없으므로 컨트롤러에서 이를 노출합니다:

csharp
// 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가 새 라이선스를 로드하도록 합니다.

이 페이지가 도움이 되었나요?