Installation

Ajoutez Doconut à votre application web .NET Framework 4.7.2

Doconut.NETFramework héberge le visualiseur Doconut dans une application ASP.NET classique sur .NET Framework 4.7.2 — IIS ou IIS Express, MVC 5 ou Web Forms. L'installation comporte trois parties : le package NuGet, deux enregistrements dans Web.config, et un appel dans Global.asax. Cette page couvre les trois ; Démarrage rapide place ensuite un document sur une page.

Prérequis

  • Le projet web cible .NET Framework 4.7.2 ou une version ultérieure. Un projet 4.7 ne peut pas consommer ce package ; re‑ciblez‑le d'abord.
  • Le site s'exécute dans le pipeline intégré (la valeur par défaut pour les pools d'applications IIS et IIS Express).

Cette page couvre Doconut.NETFramework 26.9.0 et versions ultérieures. Les versions 26.8.0 et antérieures ciblaient .NET Framework 4.7 avec une API différente ; cette ligne est abandonnée. La mise à jour d'une application existante au‑delà de cette frontière est décrite dans Migration.

Installer le package

Depuis la console du gestionnaire de packages :

powershell
Install-Package Doconut.NETFramework

Ou, dans un projet de type SDK :

bash
dotnet add package Doconut.NETFramework

Le moteur de rendu est intégré au package : il n'existe aucune assembly de moteur distincte à référencer, copier ou déployer. Les fonctionnalités optionnelles sont livrées sous forme de packages séparés — par exemple Doconut.NETFramework.Converter et Doconut.NETFramework.Dicom — et chacun nécessite une licence qui le permet (voir Système de plugins).

Configurer Web.config

Doconut gère deux types de requêtes, et IIS les dirige toutes les deux via Web.config :

  • DocImage.axd — la page du visualiseur, la vignette, la recherche et le point de terminaison d'annotation, servis par Doconut.DocImageHandler.
  • /doconut-res/* — les scripts, feuilles de style et icônes propres au visualiseur, intégrés dans l'assembly et servis par Doconut.DoconutResourceModule.

Ajoutez les deux, ainsi que les paramètres dont ils dépendent :

xml
<configuration>
  <system.web>
    <!-- MVC 5 only: Razor compiles views at run time and needs the netstandard facade. -->
    <compilation targetFramework="4.7.2">
      <assemblies>
        <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
      </assemblies>
    </compilation>
    <!-- maxRequestLength is in KILOBYTES: 200 MB. -->
    <httpRuntime targetFramework="4.7.2" maxRequestLength="204800" />
    <!-- Read .cshtml and .aspx files as UTF-8, not as the server's ANSI code page. -->
    <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" />
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- maxAllowedContentLength is in BYTES: the same 200 MB. -->
        <requestLimits maxAllowedContentLength="209715200" />
      </requestFiltering>
    </security>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="DoconutResourceModule" type="Doconut.DoconutResourceModule, Doconut" />
    </modules>
    <handlers>
      <add name="DocImage" verb="GET,HEAD,POST" path="DocImage.axd"
           type="Doconut.DocImageHandler, Doconut" />
    </handlers>
  </system.webServer>
</configuration>

Chaque ligne empêche une défaillance qui ne génère aucune exception :

  • verb="GET,HEAD,POST" — conservez HEAD. Le visualiseur envoie une requête HEAD pour la page 1 afin de détecter les images animées. Sans ce verbe, IIS répond 404 avant que le gestionnaire ne s'exécute : les documents s'affichent toujours, mais la détection d'animation ne fonctionne jamais et la console du navigateur se remplit de 404.
  • runAllManagedModulesForAllRequests="true" — /doconut-res/*.js, .css et .png ressemblent à des fichiers statiques, et IIS les transmettrait à son gestionnaire de fichiers statiques avant que le module de ressources ne les voie. Le résultat est un visualiseur sans scripts ni icônes.
  • <globalization fileEncoding="utf-8"> — les fichiers de page enregistrés en UTF-8 sans marque d'ordre d'octets sont autrement lus avec la page de code ANSI du serveur, de sorte que chaque caractère non‑ASCII arrive au navigateur double‑encodé (un tiret cadratin apparaît comme —). Le fichier est correct sur le disque, et la page déclare toujours <meta charset="utf-8">.
  • L'assembly netstandard (MVC 5) — Razor compile les vues lors de leur première requête, avec sa propre liste de références qui n'inclut pas cette façade. Une vue qui fait quoi que ce soit de dynamique au‑delà d'un simple accès à un membre échoue alors avec CS0012 et renvoie un 500 vide, et seules les pages qui la déclenchent échouent. L'erreur du compilateur apparaît uniquement dans le journal des événements Windows (source ASP.NET). Les applications Web Forms n'ont pas besoin de cette ligne.
  • Limites de téléchargement — ASP.NET lit l'intégralité du corps de la requête avant que tout gestionnaire ne s'exécute, ainsi un téléchargement dépassant ces limites est rejeté par IIS avec sa propre page d'erreur. Gardez maxRequestLength (kilooctets) et maxAllowedContentLength (octets) synchronisés, et supérieurs au plus grand fichier que vos utilisateurs ouvrent ou téléchargent.

Deux autres paramètres sont importants, et les deux sont généralement déjà corrects :

  • L'état de session reste activé. Par défaut, une page n'est servie qu'à la session ASP.NET qui a ouvert le document, donc le site ne doit pas définir <sessionState mode="Off" />. Voir Sessions et sécurité.
  • Redirections de liaison. Conservez les redirections de liaison <runtime> que NuGet écrit dans Web.config. Dans un projet de type SDK, copiez‑les depuis le fichier généré bin\<YourApp>.dll.config, car ASP.NET classique ne lit les redirections que depuis Web.config. Une redirection qui indique une version absente du répertoire bin\ arrête toute l'application avec un 500 vide au démarrage.

Enregistrer Doconut dans Global.asax

Il n’y a pas de constructeur ni de pipeline middleware dans System.Web. Doconut est composé une fois par processus de travail par DoconutHost.Initialize dans Application_Start, et libéré par DoconutHost.Shutdown dans Application_End :

csharp
// Global.asax.cs
protected void Application_Start()
{
    Doconut.DoconutHost.Initialize(options =>
    {
        options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
    });
}

protected void Application_End()
{
    Doconut.DoconutHost.Shutdown();
}

DoconutHost.Initialize crée les services, le gestionnaire, le module de ressources et votre propre code. Votre code y accède via DoconutHost.Services (voir DoconutHost). Seul le premier appel configure quoi que ce soit ; un deuxième appel est ignoré. Dans une application MVC, gardez également les deux chemins Doconut hors du routage — Démarrage rapide montre le Application_Start complet.

Toutes les options

DoconutOptions accepte les propriétés réglables suivantes. Chacune est facultative.

PropriétéValeur par défautDescription
UnsafeModefalseLorsque false, DocImage.axd ne sert la page qu’à la session ASP.NET qui a ouvert le document. Lorsque true, toute requête portant le jeton est servie. Laissez‑le à false.
ShowDoconutInfofalseLorsque true, une requête DocImage.axd sans token renvoie une bannière de version au lieu de 404. Utile comme vérification rapide ; désactivez‑la en production.
ResourcesPath"/doconut-res"Où le module de ressources sert les scripts, styles et icônes embarqués. Modifiez‑le uniquement en même temps que le ResPath du visualiseur et tout IgnoreRoute MVC.
LicensePath""Chemin complet vers le fichier de licence. Une chaîne vide signifie passer à la source suivante, puis à la découverte automatique.
LicenseContent""Contenu brut de la licence — provenant d’une variable d’environnement, d’un magasin secret ou d’une base de données.
LicenseStreamnullLicence sous forme de flux, lue une fois au démarrage.
MiddlewarePath"/doconut"Non utilisé dans ce paquet. Le point de terminaison de la page est le gestionnaire DocImage.axd déclaré dans Web.config, quelle que soit la valeur définie ici. Il est néanmoins validé : il doit commencer par / et différer de ResourcesPath.
ResetLicensefalseNon utilisé dans ce paquet. La licence est lue une fois, dans DoconutHost.Initialize ; recyclez le pool d’applications après avoir remplacé le fichier de licence.

Lorsque plusieurs sources de licence sont définies, LicenseStream prime sur LicenseContent, qui prime sur LicensePath, qui prime sur la découverte automatique — voir Configuration de licence.

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.LicensePath     = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
    options.ResourcesPath   = "/doconut-res"; // où le visualiseur JS/CSS/images est servi
    options.UnsafeMode      = false;          // garder la sécurité de session activée
    options.ShowDoconutInfo = false;
});
// Le point de terminaison de la page n’est pas une option ici : c’est le gestionnaire DocImage.axd déclaré dans Web.config.

Prochaines étapes

Cette page était-elle utile ?