2015-06-29 14 views
21

Ho un'applicazione ASP.NET MVC 5. Ha un modulo semplice e quando l'utente lo invia, il modulo viene archiviato nella cache e quindi viene chiamata un'altra azione del controller, questa azione restituirà il modello come una vista come PDF.Generazione Rotativa PDF che funziona localmente ma non su IIS 7

Non ho bisogno di salvarlo localmente, solo per mostrarlo nel browser in modo che l'utente possa scaricarlo.

Non è necessario neanche un database, è per questo che memorizzo il modello nella cache.

Localmente, su Visual Studio 2013, funziona correttamente. Ma quando lo pubblico su IIS 7 ottengo un Unhandled Execution Error. Ecco la traccia dello stack che torno:

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 

ho usato ActionAsPDF() ma ora ho anche cercato di utilizzare return new ViewAsPDF(). Entrambi danno lo stesso errore e traccia dello stack. Questo deve fare qualcosa con le autorizzazioni?

+0

e 'davvero lanciando 'System.Exception' e non una classe derivata? Sarebbe estremamente povero. – leppie

+0

Questo è tutto ciò che sto tornando e dato che non riesco a duplicarlo localmente non so come eseguirne il debug. – Robin

+0

La prima riga della pila ha comunque un parametro che sembra un nome di percorso, ho avuto problemi con i percorsi e IIS in precedenza, potrebbe essere un problema? – Robin

risposta

36

Questo errore è un pacchetto ridistribuibile C++ mancante per il file di Visual Studio 2013 denominato (MSVCP120.dll).

per risolvere il problema:

  1. Aprire il C++ Redistributable Package per Visual Studio 2013 link scaricabile qui sotto: download Visual C++ Redistributable Packages for Visual Studio 2013

  2. Fare clic su Download e scegliere il file (vcredist_x86.exe) anche se si eseguono la versione del server di bit X64.

  3. Installare il file.

Controllare Jalal W Hijazi Blog http://jwhijazi.blogspot.com/2015/05/solving-rotativa-unhandled-exception.html per ulteriori dettagli.

+8

Suggerimento (su il blog Jalal) che ha funzionato per me: "Ho appena copiato msvcp120.dll e msvcr120.dll nella cartella contenente wkhtmltopdf.exe e tutto ha funzionato bene" – HugoXP

+0

@HugoXP dovresti scrivere questa come risposta separata - fantastico! – fubo

+0

Current Rotativa richiede Visual C++ per Visual Studio 2015 – JoeyZero

5

Ho risolto il mio problema aggiornando i file wkhtmltopdf dal programma di installazione trovato here

enter image description here

Lavorare senza problemi ora!

+0

Oh..e questo è in esecuzione su una macchina in hosting blu. Sever 2012 VM non localmente sul mio laptop – jamdownian

-1

Ho affrontato questo problema due volte ed avere molte cause: 1- Forse non trovi il ridistribuibile C++ (MSVCP120.dll) ..

2- se si ospitano in una specifica applicazione click dominio piscina-> fai clic sul tuo dominio (esempio.net) -> impostazione anticipata -> Verifica identità in corso Modello: devi effettuare il login come Utente amministratore ..

se il tuo sito Web sul pool di applicazioni predefinito devi fare clic su Sito Web predefinito -> impostazione di base -> connetti come: amministratore Utente

5

Come menzionato nei commenti sul blog collegato nella risposta, è sufficiente copiare i 2 file dll seguenti nella cartella rotativa sul server se non si desidera/non è possibile installare facilmente le cose sul server.

msvcr120.dll
msvcp120.dll

Se si tratta di lavoro a livello locale, si dovrebbe avere due file dll a disposizione già. Hai bisogno delle versioni x86, se trovi versioni x64 pacchettizzate con vs 2015 non funzionano. Ho trovato le versioni corrette qui:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\x86\Microsoft.VC120.CRT 

Dopo l'aggiornamento a Rotativa 1.7.3 questo non funzionava più. Ho dovuto copiare alcune nuove DLL da Visual Studio 2017, li ho trovati qui questa volta:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT 

e ho dovuto copiare

msvcp140.dll
vcruntime140.dll

+0

Questo ha funzionato per me. Sul server, ho provato a includere le DLL x64. Tuttavia, non stavano risolvendo il problema. Così passato a x86 dll e hanno funzionato liek un fascino. Molte grazie. – shazia

1

Ho affrontato lo stesso problema . Anche il logger degli errori non registrava nulla.

Dopo alcune ricerche, ho provato a sostituire il wkhtmltopdf.exe con l'ultima versione disponibile nel sito Web wkhtmltopdf.org, ancora senza fortuna.

Infine copiato msvcp120.dll e msvcr120.dll nella cartella in cui avevo il excutable e ha funzionato. (Non c'è stato bisogno della versione più recente di wkhtmltopdf.exe, invece ha funzionato con la versione quello che ho ottenuto da Nuget.)

msvcp120.dll e msvcr120.dll erano disponibili nella directory di seguito in Windows 7.

C: \ Windows \ SysWOW64 \

4

La risposta accettata quasi ha lavorato per me. Mi mancava una versione più recente di C++ ridistribuibile, quindi l'installazione della vecchia versione non ha aiutato.

Il modo più semplice per scoprire ciò che ti manca è eseguire wkhtmltopdf.exe manualmente. Fornirà l'output della console (se funzionante) o una finestra di messaggio su ciò che manca.

mi mancava MSVCP140.dll, che è dal 2015 VS redist, disponibile qui: https://www.microsoft.com/en-gb/download/details.aspx?id=48145

1

Quando ho aggiornato da Rotativa 1.6.4 a 1.7.3 mia conversione PDF sul mio sito web app smesso di funzionare e dopo l'esecuzione del wkhtmltopdf.exe sul mio server di produzione ho notato che stava avendo un problema con il msvcp140.dll

soluzione era quella di installare Visual C++ Redistributable per Visual Studio 2015 https://www.microsoft.com/en-us/download/details.aspx?id=48145

Problemi correlati