Rotativa la génération de PDF de travail en local, mais pas sur IIS 7
J'ai un ASP.NET MVC 5 application. Il a une forme simple et lorsque l'utilisateur soumet le formulaire sont stockées dans la mémoire cache, puis un autre contrôleur de l'action est appelée, cette action sera de retour le modèle comme une vue au format PDF.
Je n'ai pas besoin de l'enregistrer localement, juste pour l'afficher dans le navigateur de sorte que l'utilisateur peut le télécharger.
Il n'est pas nécessaire pour une base de données, c'est pourquoi je stocker le modèle dans le cache.
Localement, sur Visual studio 2013, il fonctionne très bien. Mais quand je la publie pour IIS 7-je obtenir une Unhandled Execution Error
. Voici la trace de la pile que je serai de retour:
Unhandled Execution Error
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Exception:
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[Exception]
Rotativa.WkhtmltopdfDriver.Convert(String wkhtmltopdfPath, String switches, String html) +1364
Rotativa.WkhtmltopdfDriver.ConvertHtml(String wkhtmltopdfPath, String switches, String html) +70
Rotativa.ViewAsPdf.CallTheDriver(ControllerContext context) +1986
Rotativa.AsPdfResultBase.BuildPdf(ControllerContext context) +380
Rotativa.AsPdfResultBase.ExecuteResult(ControllerContext context) +69
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +109
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +890
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +97
System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +241
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +19
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +51
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34248
J'ai d'abord utilisé ActionAsPDF()
mais maintenant, j'ai aussi essayé d'utiliser return new ViewAsPDF()
. Les deux donnent la même erreur et la trace de la pile. Est-ce que avez à faire quelque chose avec les autorisations?
- Est-il vraiment jeter
System.Exception
et non pas une classe dérivée? Ce serait extrêmement pauvres. - C'est tout ce que je suis de retour et depuis je ne peux pas le reproduire localement, je ne sais pas comment déboguer à travers elle.
- La première ligne de la pile a cependant un paramètre qui sonne comme il est un nom de chemin d'accès, j'ai eu des problèmes avec les chemins et IIS avant, cela pourrait-il être un problème?
- Peut-être que le VC++ redist est manquante sur le serveur, comme indiqué ici
- Merci cela a résolu le problème en effet!
- Cela m'a aidé à résoudre le problème: stackoverflow.com/a/39084558/6727296
- J'ai eu le même problème et cela m'a aidé à résoudre stackoverflow.com/a/39084558/6727296
Vous devez vous connecter pour publier un commentaire.
Cette erreur est un manque de C++ redistributable Package pour Visual Studio 2013 fichier appelé (MSVCP120.dll).
Pour résoudre le problème:
Ouvrir le C++ redistributable Package pour Visual Studio 2013 lien de téléchargement ci-dessous:
télécharger Visual C++ Redistributable Paquets pour Visual Studio 2013
Cliquez sur Télécharger et choisir le fichier (vcredist_x86.exe même si vous exécutez 64 bit version du serveur.
Installer le fichier.
Vérifier Jalal W Hijazi Blog http://jwhijazi.blogspot.com/2015/05/solving-rotativa-unhandled-exception.html pour plus de détails.
Comme mentionné dans les commentaires sur le blog lié à la réponse, vous pouvez simplement copier les 2 fichiers dll suivants à la
rotativa
dossier sur le serveur si vous ne voulez pas /ne peuvent pas facilement l'installer sur le serveur.msvcr120.dll
msvcp120.dll
Si ça fonctionne localement, vous devriez avoir les deux fichiers dll d'ores et déjà disponibles.
Vous devez les versions x86, si vous trouvez des versions x64 emballés avec vs 2015, ils ne travaillent pas. J'ai trouvé le droit à des versions ici:
Après la mise à niveau de Rotativa 1.7.3 ce n'est plus travaillé. J'ai dû copier sur certains nouveaux dll à partir de visual studio 2017, j'ai trouvé ici ce temps:
et j'ai dû copier sur
msvcp140.dll
vcruntime140.dll
J'ai résolu mon problème en mettant à jour le wkhtmltopdf fichiers du programme d'installation ici
Fonctionne parfaitement maintenant!
La accepté de répondre à presque a fonctionné pour moi. J'ai été absent une version plus récente du C++ redistributable donc l'installation de l'ancienne version n'a pas aidé.
Le moyen le plus facile pour trouver ce qui vous manque est d'exécuter
wkhtmltopdf.exe
manuellement. Il va vous donner de la sortie de la console (si travail) ou une boîte de message à propos de ce qu'il manque.J'ai été absent MSVCP140.dll qui est de la VS 2015 redist, disponible ici: https://www.microsoft.com/en-gb/download/details.aspx?id=48145
Quand j'ai mis à niveau à partir Rotativa 1.6.4 à 1.7.3 ma conversion en PDF sur mon site web, application a cessé de travailler et après l'exécution de la wkhtmltopdf.exe sur mon serveur de production, j'ai remarqué qu'il avait un problème avec msvcp140.dll
Solution était d'installer Visual C++ Redistribuable Visual Studio 2015
https://www.microsoft.com/en-us/download/details.aspx?id=48145
J'ai connu le même problème. Même l'erreur d'enregistreur n'était pas rien journalisation.
Après quelques recherches, j'ai essayé de remplacer le
wkhtmltopdf.exe
avec la dernière version disponible dans wkhtmltopdf.org site, toujours pas de chance.Enfin copié
msvcp120.dll
etmsvcr120.dll
dans le dossier où j'ai eu le excutable et cela a fonctionné. (Il n'y avait pas besoin de la dernière version de wkhtmltopdf.exe en revanche, elle a travaillé avec la version que j'ai reçu de Nuget.)msvcp120.dll et msvcr120.dll étaient disponibles dans le répertoire dans Windows 7.
J'ai installé Visual C ++ Redistributable Paquets pour Visual Studio 2015
https://www.microsoft.com/pt-br/download/details.aspx?id=48145
Cela a résolu pour moi.
J'ai été confronté à ce problème deux fois et avoir de nombreuses causes:
1 - Peut-être que vous êtes absent de C++ redistributable (MSVCP120.dll)..
2 - si vous accueillent dans un domaine spécifique sur pool d'applications->cliquez sur votre nom de domaine(example.net)->paramètres avancés ->Vérifier votre identité dans le Modèle de processus:vous devez vous connecter en tant que d'Utilisateur de l'administrateur..
si votre site web sur le pool d'applications par défaut, cliquez sur Site Web par Défaut->réglage de base ->se connecter en tant que : d'Utilisateur de l'administrateur