Rotativa PDF generation fonctionne localement mais pas sur IIS 7
j'ai un ASP.NET MVC 5 application. Il a une forme simple et quand l'utilisateur la soumet, la forme est stockée dans le cache et alors une autre action de controller est appelée, cette action retournera le model comme une vue en 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'y a pas besoin d'une base de données non plus, c'est pourquoi je stocke le modèle dans le cache.
localement, sur Visual studio 2013, il fonctionne très bien. Mais quand je le publie à IIS 7 je reçois un Unhandled Execution Error
. Voici la trace de pile que je récupère:
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 même trace de pile. Est-ce que ça a un rapport avec les permissions?
8 réponses
cette erreur est un paquet redistribuable c++ manquant pour le fichier Visual Studio 2013 appelé (MSVCP120.DLL.)
Pour résoudre le problème:
ouvrir le paquet redistribuable C++ pour Visual Studio 2013 lien téléchargeable ci-dessous: download Visual C++ redistribuable Packages for Visual Studio 2013
cliquez sur Télécharger et choisissez le fichier (vcredist_x86.exe) même si vous utilisez x64 bit server version.
installez le fichier.
Consultez Le Blog De Jalal W Hijazihttp://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 à l' rotativa
dossier sur le serveur si vous ne voulez pas / ne peuvent pas facilement l'installer sur le serveur.
msvcr120.dll
msvcp120.dll
si cela fonctionne localement, vous devriez déjà avoir les deux fichiers dll disponibles. Vous avez besoin des versions x86, si vous trouvez des versions x64 empaquetées avec vs 2015 elles ne fonctionnent pas. J'ai trouvé les bonnes versions ici:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\x86\Microsoft.VC120.CRT
après la mise à niveau en Rotativa 1.7.3 cela n'a plus fonctionné. J'ai dû copier de nouveaux dlls de visual studio 2017, je les ai trouvés ici cette fois:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT
et j'ai dû copier sur
msvcp140.dll
vcruntime140.dll
j'ai corrigé mon problème en mettant à jour les fichiers wkhtmltopdf de l'installateur trouvé ici
fonctionne parfaitement maintenant!
la réponse acceptée presque a travaillé pour moi. Il me manquait une version plus récente du C++ redistribuable, donc l'installation de l'ancienne version n'a pas aidé.
la façon la plus simple de trouver ce que vous manquez est de lancer wkhtmltopdf.exe
manuellement. Il vous donnera soit la sortie de la console (si vous travaillez) ou une boîte de message sur ce qui manque.
MSVCP140 me manquait.dll, qui est de la VS 2015 redist, disponible ici: https://www.microsoft.com/en-gb/download/details.aspx?id=48145
quand je suis passé de 1.6.4 Rotativa à 1.7.3 ma conversion PDF sur mon application web a cessé de fonctionner et après avoir lancé le wkhtmltopdf.exe sur mon serveur de production, j'ai remarqué qu'il avait un problème avec msvcp140.dll
la Solution était d'installer Visual C++ redistribuable pour Visual Studio 2015 https://www.microsoft.com/en-us/download/details.aspx?id=48145
j'ai fait face au même problème. Même l'enregistreur d'erreurs n'enregistrait rien.
Après quelques recherches, j'ai essayé de remplacer le wkhtmltopdf.exe
avec la dernière version disponible à wkhtmltopdf.org site web, toujours pas de chance.
enfin copié msvcp120.dll
et msvcr120.dll
vers le dossier où j'ai eu l'excutable et ça a marché. (Il n'y avait pas besoin de la dernière version de wkhtmltopdf.exe, à la place ça a fonctionné avec la version ce que j'ai obtenu de Nuget.)
msvcp120.dll et msvcr120.dll étaient disponibles dans le répertoire dans Windows 7.
C:\Windows\SysWOW64\
j'ai installé Visual C ++ Redistributable Paquets pour Visual Studio 2015
https://www.microsoft.com/pt-br/download/details.aspx?id=48145
ceci résolu pour moi.
j'ai fait face à ce problème deux fois et il a de nombreuses causes: 1-peut-être que vous manquez c++ redistribuable (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 administrateur..
si votre site web sur le pool d'applications par défaut, vous devez cliquer sur site Web par défaut - > paramètres de base ->se connecter en tant que : administrateur