Konfiguracja licencji

Gdzie Doconut szuka pliku licencji w IIS

Bez licencji Doconut nadal renderuje dokumenty — każda strona po prostu zawiera znak wodny oceny. Ta strona opisuje cztery sposoby dostarczenia licencji w Global.asax, gdzie Doconut szuka, gdy nie podasz żadnej, oraz co się dzieje, gdy brakuje licencji wtyczki.

Cztery sposoby dostarczenia licencji

Istnieją trzy wyraźne źródła w DoconutOptions — ścieżka do pliku, strumień lub surowa zawartość — plus automatyczne wykrywanie, gdy żadne z nich nie jest ustawione. Wszystkie są odczytywane raz, w DoconutHost.Initialize. Gdy ustawione jest więcej niż jedno, kolejność ma znaczenie:

LicenseStream ma pierwszeństwo przed LicenseContent, które ma pierwszeństwo przed LicensePath, które ma pierwszeństwo przed automatycznym wykryciem.

Za pomocą ścieżki

Podaj LicensePath pełną ścieżkę. Ścieżka względna jest rozwiązywana względem bieżącego katalogu procesu, a w IIS jest to folder własny procesu roboczego, a nie twojej witryny. HostingEnvironment.MapPath zamienia ścieżkę względną względem witryny na pełną:

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

Jeśli plik nie istnieje, Doconut nie zgłasza wyjątku i nie przechodzi do automatycznego wykrycia: nie ładuje żadnej licencji, a przeglądarka wyświetla znak wodny. Pliki licencji dla poszczególnych wtyczek w tym samym folderze (Doconut.Viewer.<Capability>.lic) są odczytywane razem z nią, więc LicensePath i AddPlugin<...>() działają razem, gdy licencje wtyczek znajdują się obok licencji podstawowej.

Za pomocą strumienia

LicenseStream jest odczytywany raz, przy uruchamianiu — przydatny, gdy licencja pochodzi z zasobu osadzonego lub tajnego magazynu, a nie z pliku na dysku.

csharp
// Priorytet: LicenseStream > LicenseContent > LicensePath > auto-wyszukiwanie.
Doconut.DoconutHost.Initialize(options =>
{
    options.LicenseStream = licenseStream;
});

Za pomocą treści

LicenseContent przyjmuje sam tekst licencji — z zmiennej środowiskowej, bazy danych lub tajnego magazynu — więc nie trzeba wdrażać pliku licencji wraz z witryną.

csharp
// XML licencji z bazy danych, zmiennej środowiskowej lub magazynu tajemnic -
// Zastępowany tylko przez LicenseStream.
Doconut.DoconutHost.Initialize(options =>
{
    options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});

Automatyczne wykrywanie

Nie ustawiając żadnego z trzech, Doconut sam wyszukuje licencję:

csharp
// Nie konfigurować nic, a Doconut sam wyszukuje licencję w następującej kolejności:
//   1. {CurrentDirectory}\\wwwroot
//   2. {AppContext.BaseDirectory}\\wwwroot   (w IIS: katalog główny witryny)
// Najpierw szuka Doconut.lic, potem Doconut.Viewer.lic, oraz wszelkich per-plugin
// Pliki Doconut.Viewer.<Capability>.lic obok niego.
Doconut.DoconutHost.Initialize();

Dwa foldery, w kolejności, oraz szukane pliki:

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

W każdym folderze:

W IIS i IIS Express, AppContext.BaseDirectory jest folderem głównym witryny — tym, który zawiera Web.config — a nie jego folderem bin. Dlatego licencja powinna znajdować się w wwwroot w folderze głównym witryny:

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

W projekcie, trzymaj wwwroot\*.lic obok Web.config i wdrażaj folder wraz z witryną. Żaden krok budowania nie musi go kopiować. .lic w innym miejscu — w bin\, obok Web.config lub w podfolderze wwwroot — nigdy nie jest odczytywany.

Trzymaj pliki .lic poza kontrolą wersji. Wdrażaj je razem z witryną lub dostarcz licencję przez LicenseContent lub LicenseStream z twojego tajnego magazynu.

Co się dzieje bez licencji

Brak licencji nie powoduje wyjątku. DoconutHost.Initialize kończy się sukcesem, witryna uruchamia się, a przeglądarka działa, ale każda strona zawiera znak wodny oceny i nie przyznano żadnych opcjonalnych funkcji.

Plik licencji, który zostanie znaleziony, ale odrzucony, to inna sytuacja. Nieprawidłowy podpis, manipulacja lub kompilacja poza oknem wersji licencji powodują, że OpenDocumentAsync zgłasza LicenseException z podanym powodem.

Wtyczki potrzebują swojej licencji przy uruchamianiu

Zarejestrowanie wtyczki, której funkcjonalność nie jest przyznana przez licencję, zatrzymuje aplikację przy uruchamianiu. DoconutHost.Initialize zgłasza wyjątek w 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.

W System.Web nie widzisz tej wiadomości w przeglądarce. Każde żądanie do witryny zwraca pusty 500 — brak strony błędu, brak stosu wywołań, nic w logu IIS. Wyjątek jest rejestrowany tylko w dzienniku zdarzeń Windows (dziennik aplikacji, źródło ASP.NET). Jeśli cała witryna przestaje odpowiadać zaraz po dodaniu linii AddPlugin, sprawdź pliki licencji w wwwroot przed kodem: Doconut.Viewer.<Capability>.lic wtyczki musi znajdować się obok Doconut.Viewer.lic, a bez licencji podstawowej pliki wtyczki nie są w ogóle odczytywane.

Zweryfikuj wczytaną licencję

IDoconutLicenseService jest tym samym źródłem prawdy, którego używa SDK. Rozwiąż go z DoconutHost.Services, aby udostępnić uwierzytelniony punkt diagnostyczny lub sterować flagami funkcji — nigdy nie zwracaj treści licencji:

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);
}

Licencja jest odczytywana raz, w DoconutHost.Initialize. Po zastąpieniu pliku licencji, zrecykluj pulę aplikacji (lub dotknij Web.config), aby Application_Start uruchomił się ponownie.

Rozwiązywanie problemów

ObjawPrawdopodobna przyczynaSprawdź
Przeglądarka działa, ale każda strona ma znak wodnyNie znaleziono licencjiCzy .lic znajduje się w <site root>\wwwroot? Wywołaj powyższy punkt statusu
Każde żądanie zwraca pusty 500 zaraz po dodaniu wtyczkiZarejestrowana wtyczka nie ma przyznanej licencjiDziennik zdarzeń Windows, źródło ASP.NET; .lic wtyczki obok Doconut.Viewer.lic
LicensePath działa na twoim komputerze, ale nie na serwerzeŚcieżka względna rozwiązywana względem folderu procesu roboczegoZbuduj to przy użyciu HostingEnvironment.MapPath("~/wwwroot/...")
Zastąpiony plik .lic nie ma efektuLicencja została odczytana przy uruchamianiu aplikacjiZrecykluj pulę aplikacji
OpenDocumentAsync zgłasza LicenseExceptionLicencja została znaleziona, ale odrzuconaPrzeczytaj komunikat wyjątku; nie pokazuj go nieufnym klientom

Kolejne kroki

Czy ta strona była pomocna?