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?

22
demandé sur Robin 2015-06-29 12:36:41

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:

  1. ouvrir le paquet redistribuable C++ pour Visual Studio 2013 lien téléchargeable ci-dessous: download Visual C++ redistribuable Packages for Visual Studio 2013

  2. cliquez sur Télécharger et choisissez le fichier (vcredist_x86.exe) même si vous utilisez x64 bit server version.

  3. 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.

41
répondu hgarg 2016-12-22 15:12:52

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

8
répondu 2018-01-12 11:05:27

j'ai corrigé mon problème en mettant à jour les fichiers wkhtmltopdf de l'installateur trouvé ici

enter image description here

fonctionne parfaitement maintenant!

7
répondu jamdownian 2017-01-23 11:26:55

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

4
répondu davesw 2017-07-12 12:35:42

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

3
répondu JoeyZero 2017-10-12 23:28:32

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\

1
répondu BRAHMADATH S MAMPAZHASSERY 2016-10-04 07:54:39

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.

0
répondu Diogo de Freitas nunes 2018-09-27 13:11:29

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

-1
répondu semaan 2016-03-21 09:08:04