Dépannage
Diagnostiquer les erreurs courantes
De nombreuses erreurs System.Web ne lèvent aucune exception visible : la page renvoie un 500 vide, une icône renvoie 404, ou une requête ne revient jamais. Cette page est organisée selon ce que vous observez. Les messages entre guillemets sont le texte littéral produit par Doconut.
Symptômes d'un coup d'œil
| Ce que vous voyez | Cause la plus probable | Solution |
|---|---|---|
Chaque requête renvoie un 500 vide | Une exception dans Application_Start : un plugin sans licence, une option invalide, une configuration de ferme incomplète — ou une redirection de liaison nommant une version qui n'est pas dans bin\ | Journal des événements Windows, Application, source ASP.NET. Voir Échecs de démarrage |
Certaines pages MVC renvoient un 500 vide | Razor compile les vues à l'exécution : la façade netstandard est manquante dans <compilation>, ou la vue utilise du C# plus récent que 5 (?., $"...", nameof) | Ajoutez la façade (Installation) ; déplacez la logique de la vue vers le contrôleur |
Les pages affichent —, … ou similaire au lieu des tirets et accents | Les fichiers de page sans marque d'ordre des octets sont lus avec la page de code ANSI du serveur | <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" /> |
La console du navigateur montre 404 pour HEAD /DocImage.axd?...&page=1 | Le gestionnaire est enregistré sans le verbe HEAD | verb="GET,HEAD,POST" sur le gestionnaire |
| Le document s'affiche, mais les icônes de la barre d'outils et le spinner de chargement sont absents | ResPath pointe vers la racine des ressources, ou commence par / | ResPath: 'doconut-res/images' |
Les requêtes /doconut-res/... renvoient 404 | Le module de ressources n'est pas enregistré, runAllManagedModulesForAllRequests est désactivé, ou le routage MVC intercepte le chemin | L'entrée <modules>, et routes.IgnoreRoute("doconut-res/{*pathInfo}") |
Le visualiseur signale The viewer handler could not be reached (no response). | BasePath commence par / ('/myapp' devient //myapp/…, autre hôte) | BasePath: '/' à la racine du site ; 'myapp' dans un répertoire virtuel |
Le visualiseur signale Please make sure your middleware is configured. | DocImage.axd a répondu 404 : le gestionnaire n'est pas dans Web.config, le routage MVC l'a intercepté, ou BasePath pointe ailleurs | L'entrée <handlers>, routes.IgnoreRoute("{resource}.axd/{*pathInfo}"), et BasePath |
Chaque page montre You Are Not Authorized To View This Page. | Le document a été ouvert dans une requête sans état de session, l'état de session est désactivé, ou le cookie de session n'atteint pas DocImage.axd | Voir Non autorisé |
| Une conversion Web Forms ne renvoie jamais | La page se bloque sur ConvertAsync — un interblocage | Async="true" + RegisterAsyncTask (Converter Plugin) |
| Chaque page porte un filigrane d'évaluation | aucune licence n'a été trouvée — elle n'est pas dans <site root>\wwwroot | Configuration de licence |
Un widget se charge, mais sa première action renvoie 404 | Le widget n'est pas activé, ou son basePath n'est pas '/DocImage.axd' | options.Add…Widget(), et basePath: '/DocImage.axd' |
| Le premier document après le démarrage ou le recyclage du site prend une minute ou plus ; les suivants sont rapides | Les moteurs de documents se chargent lors de la première ouverture, et l'antivirus en temps réel les scanne pendant le chargement | Réchauffez le site et maintenez le pool en fonctionnement — voir Le premier document après un démarrage |
| Un gros téléchargement affiche une page d'erreur IIS | Le téléchargement dépasse maxRequestLength (KB) ou maxAllowedContentLength (octets) | Augmentez les deux au-dessus de votre fichier ou capacité de widget maximale |
Échecs de démarrage
Une exception levée dans Application_Start n'atteint pas le navigateur : chaque requête renvoie un 500 vide, et le journal IIS n'affiche rien d'utile. L'exception se trouve dans le journal des événements Windows (Observateur d'événements → Journaux Windows → Application, source ASP.NET). Les habituelles :
Un plugin sans licence :
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.Le Doconut.Viewer.<Capability>.lic du plugin doit être dans wwwroot, à côté de Doconut.Viewer.lic. Une licence manquante et un fichier TRIAL hérité n'accordent aucune capacité au plugin.
Options invalides :
DoconutOptions.MiddlewarePath must be a non-empty path starting with '/'.
DoconutOptions.ResourcesPath must be a non-empty path starting with '/'.
DoconutOptions.MiddlewarePath and ResourcesPath must be different paths.Une assembly qui ne peut pas être chargée. ASP.NET charge chaque assembly dans bin\ au démarrage de l'application, ainsi une redirection de liaison dans Web.config qui nomme une version absente de bin\ arrête tout le site. Copiez les redirections générées par NuGet (pour un projet de type SDK, depuis bin\<YourApp>.dll.config) au lieu de les modifier manuellement, et copiez-les à nouveau après les mises à jour de paquets.
Vous n'êtes pas autorisé à afficher cette page.
La page est refusée parce que la session ASP.NET demandante n'a jamais reçu le document. Vérifiez, dans l'ordre :
- L'ouverture s'est déroulée avec l'état de session. Les contrôleurs MVC et les pages Web Forms en disposent. Un custom
IHttpHandlerqui ouvre des documents doit implémenterSystem.Web.SessionState.IRequiresSessionState, sinon il n'a aucune session à accorder. - L'état de session est activé.
<sessionState mode="Off" />refuse chaque page. - Le cookie atteint le gestionnaire. Les requêtes même origine du widget transportent
ASP.NET_SessionId; un script, un appel serveur‑à‑serveur ou une page cross‑origin sans cookies ne le font pas. - Ferme web : l'ouverture lie le navigateur (
DocOptions.BrowserId) et la page transmet le ticket (objViewer.View(token, access)) ; chaque nœud utilise la même clé de signature.
Le refus est une image servie avec le statut 200, d'environ 2 KB. Un moniteur qui ne vérifie que les codes d'état la compte comme une page.
Session du document introuvable. Veuillez rouvrir le document.
Le jeton a expiré (fenêtre glissante, DocOptions.TimeOut, 60 minutes par défaut), le document a été fermé, ou — sur un serveur unique — le pool d'applications a été recyclé. Un recyclage se produit selon le planning, à chaque modification Web.config, et après le délai d'inactivité du pool (20 minutes par défaut dans IIS). Ouvrez à nouveau le document pour obtenir un nouveau jeton.
L'ouverture d'un document échoue
LicenseException avec une raison de rejet — le fichier de licence a été trouvé mais rejeté (signature invalide, falsification, mise sur liste noire, ou une version hors de la fenêtre de version de la licence). L'ouverture est bloquée plutôt que filigranée.
LicenseException :
This document type requires the 'Dicom' plugin license.L'extension n'est prise en charge que par un plugin (ici DICOM) dont la capacité n'est pas accordée.
FormatNotSupportedException — aucun visualiseur (intégré, plugin ou personnalisé) ne revendique l'extension. DoconutOptions.RegisterViewer peut en ajouter un pour vos propres formats.
InvalidDataException — le contenu est corrompu ou ne correspond pas à son extension (un fichier renommé). Validez les téléchargements avant l'ouverture.
InvalidOperationException :
No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().DocumentConverter a été résolu sans enregistrer le plugin Converter.
La sortie semble incorrecte
Les pages portent un filigrane — aucune licence n'a été trouvée, ou elle a expiré ou ne couvre pas cette version. Sous IIS, la licence doit se trouver dans wwwroot sous la racine du site (AppContext.BaseDirectory\wwwroot), pas dans bin\. Vérifiez IDoconutLicenseService (License.IsLicenseFileFound, IsExpired, IsVersionValid, License.RejectionMessage).
Les documents hérités affichent du texte illisible — enregistrez les encodages de pages de code une fois, au démarrage :
// Global.asax.cs, Application_Start - avant DoconutHost.Initialize.
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);Polices incorrectes ou substituées — le serveur ne possède pas les polices du document. Un Windows Server sans Office dispose de beaucoup moins de polices qu'une machine de développement. Installez les polices, ou pointez FontFolders (sur WordConfig et PptConfig) vers un dossier qui les contient.
Une annotation d'image apparaît dans le visualiseur mais l'exportation montre une boîte « Image bloquée » — l'hôte de l'image possède une adresse privée ou de bouclage, que le serveur refuse de récupérer. Voir Annotations.
La fonctionnalité fonctionnait en évaluation, silencieuse en production
Une licence Temporaire active accorde toutes les capacités ; votre licence achetée n'accorde que ce que vous avez acheté. Sans une capacité, ses fichiers de Recherche ou d'Annotation ne sont pas générés, et un plugin enregistré empêche le site de démarrer. Comparez IsCapabilityGranted(...) avec chaque fonctionnalité que vous utilisez avant le déploiement.
La recherche ne trouve rien (ou très peu)
- Pour un PDF,
AllowSearchn'était pas activé lors de l'ouverture du document — il utilise par défautfalse. Word, Excel et PowerPoint exposent le même commutateur. - Le contenu est numérisé ou uniquement image, il n'existe donc aucune couche de texte à faire correspondre.
- HTML et Microsoft Project (MPP) ne sont pas recherchables par défaut : définissez
DefaultRender = falseafin qu'ils soient rendus via une projection PDF avec texte. objViewer.CanSearch()estfalseaprès l'initialisation : le format résolu n'a aucun chemin de recherche. Ceci est distinct de la licence de Recherche ; vérifiez les deux.- La page lit la valeur de retour de
objViewer.Search(...)— le compte arrive dans son troisième argument, un rappel.
Toujours bloqué ?
Reproduisez le problème avec la configuration minimale de Démarrage rapide. S’il se reproduit là, contactez le support avec le document, votre Global.asax.cs, les parties Doconut de Web.config, et l’entrée du journal d’événements Windows s’il y en a une.
Cette page était-elle utile ?