DoconutHost
Le point d'entrée de composition pour System.Web
DoconutHost (namespace Doconut) est une classe statique qui possède les services de Doconut pour l'ensemble du processus de travail. Les applications ASP.NET Core intègrent ces services dans le conteneur propre du framework ; le ASP.NET classique n'a pas de conteneur, donc DoconutHost en crée un et le conserve. Le gestionnaire DocImage.axd et le module de ressources résolvent tout ce dont ils ont besoin à partir de celui‑ci, tout comme votre code.
| Membre | Objectif |
|---|---|
static void Initialize(Action<DoconutOptions>? configure = null, Action<IServiceCollection>? configureServices = null) | Construit les services — une fois |
static IServiceProvider Services { get; } | Le conteneur construit |
static bool IsInitialized { get; } | true une fois que Initialize a été exécuté |
static void Shutdown() | Arrête le travail en arrière‑plan et libère le conteneur |
Initialiser
Appelez‑le depuis Application_Start dans Global.asax.cs :
// Global.asax.cs, Application_Start - une fois par processus de travail. Un deuxième appel est un no-op :
// les options du premier appel l'emportent.
Doconut.DoconutHost.Initialize(
options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
},
services =>
{
// Optionnel. S'exécute après les enregistrements propres de Doconut et avant que le conteneur ne soit construit,
// afin qu'il puisse ajouter des services ou remplacer un service enregistré par Doconut.
services.AddMemoryCache();
});configurereçoit le DoconutOptions : licence, commutateurs de sécurité, plugins, widgets.configureServicesest optionnel. Il s'exécute après que Doconut a enregistré ses propres services et avant que le conteneur ne soit construit, il peut donc ajouter des services —AddDoconutDistributedpour une ferme web est le plus courant — ou remplacer un enregistrement effectué par Doconut.
Le premier appel l'emporte. Initialize est idempotent : un second appel retourne immédiatement, et aucun de ses délégués ne s'exécute. Cela rend un Application_Start dupliqué inoffensif, mais cela signifie aussi que la configuration ne peut pas être modifiée en rappelant Initialize — recyclez le pool d'applications à la place.
Une exception levée ici — un plugin sans licence, des options invalides, une configuration de ferme incomplète — se produit à l'intérieur de Application_Start. ASP.NET répond alors à chaque requête avec un 500 vide, et l'exception n'est enregistrée que dans le journal d'événements Windows (journal Application, source ASP.NET).
Services et IsInitialized
System.Web ne propose pas d'injection de constructeur pour les contrôleurs, les pages ou les gestionnaires, donc résolvez les services de Doconut là où vous les utilisez :
// System.Web ne supporte pas l'injection de constructeur : résolvez les services Doconut là où vous les utilisez.
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();
// Enregistré uniquement lorsque le plugin Converter est (voir la page du plugin).
var converter = Doconut.DoconutHost.Services.GetRequiredService<DocumentConverter>();Services lève InvalidOperationException (DoconutHost.Initialize must be called in Application_Start (Global.asax) before any Doconut request is served.) lorsqu'il est lu avant Initialize. Le code qui peut s'exécuter plus tôt — un module, un constructeur statique — peut vérifier IsInitialized d'abord.
Ce que votre code résout généralement :
| Service | Durée de vie | Rôle |
|---|---|---|
Viewer | Transitoire | Ouvrir, fermer, annotations, aides de ressources — voir Viewer |
DocumentConverter | Transitoire | Conversion — enregistré uniquement avec le plugin Converter |
IDoconutLicenseService | Singleton | La licence chargée et ses capacités — voir Licensing |
DoconutOptions | Singleton | Les options transmises à Initialize |
HealthCheckService | Singleton | Exécute le contrôle de santé "doconut" (ci‑dessous) |
Résolvez depuis DoconutHost.Services, jamais depuis votre propre conteneur. Enregistrer Doconut dans un autre conteneur crée un deuxième ensemble de services séparé que le gestionnaire et le module ne voient jamais : les documents ouverts via celui‑ci sont inconnus de DocImage.axd.
Arrêt
// Global.asax.cs, Application_End - arrête le travail en arrière-plan et libère le conteneur.
// Sûr d'appeler deux fois, et sûr lorsque Initialize n'a jamais été exécuté.
Doconut.DoconutHost.Shutdown();Shutdown arrête le travail en arrière‑plan de Doconut (utilisé par le mode distribué) et libère le conteneur. Il est sûr de l'appeler deux fois, et sûr lorsque Initialize ne s'est jamais exécuté — par exemple lorsque le pool d'applications se recycle avant la première requête.
Contrôle de santé
Doconut enregistre un contrôle de santé nommé "doconut" qui rapporte l'état de la licence. Le ASP.NET classique n'a pas de point de terminaison de contrôle de santé propre, donc exposez‑le depuis un contrôleur :
// GET /Health - Doconut enregistre un contrôle de santé "doconut" qui rapporte l'état de la licence :
// Sain (valide), Dégradé (essai ou aucun fichier de licence), Insalubre (expiré).
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");
}| Statut | Signification |
|---|---|
Healthy | Une licence valide est chargée |
Degraded | Essai, ou aucun fichier de licence trouvé |
Unhealthy | La licence a expiré |
Les méthodes d'extension ASP.NET Core
Le paquet contient également UseDoconut() et UseDoconutResources(), les extensions du pipeline ASP.NET Core, car il partage son code avec les paquets ASP.NET Core. Dans ce paquet, les deux sont marqués [Obsolete] et ne sont pas utilisés : une application System.Web n'a pas de pipeline de requêtes auquel les ajouter. Leurs remplacements sont les deux enregistrements Web.config provenant de Installation :
| ASP.NET Core | .NET Framework 4.7.2 |
|---|---|
builder.Services.AddDoconut(...) | DoconutHost.Initialize(...) in Application_Start |
app.UseDoconut() | Doconut.DocImageHandler on DocImage.axd in Web.config |
app.UseDoconutResources() | Doconut.DoconutResourceModule in Web.config |
| Constructor injection | DoconutHost.Services.GetRequiredService<T>() |
| Host shutdown | DoconutHost.Shutdown() in Application_End |
Cette page était-elle utile ?