Laden...

Crystal Report als PDF speichern funktioniert aus dem VS heraus aber nicht im IIS

Erstellt von schuppsl vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.803 Views
S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 8 Jahren
Crystal Report als PDF speichern funktioniert aus dem VS heraus aber nicht im IIS

Hallo zusammen,

wieder einmal das alte Thema:

Innerhalb der Entwicklungsumgebung mit VS2013 läuft die Erstellung des Crystal Reports und das Erzeugen und speichern des PDF's einwandfrei.
Veröffentliche ich die ASP.NET Seite im IIS, geht es natürlich nicht - weder auf meinem Entwicklungsrechner, noch auf dem Zielserver.

Der Fehler:
Scheint eine EngineException zu sein.
Zwar habe ich alle möglichen Fehlermöglichkeitenabgefangen, aber es wird nur -256 angezeigt.
Er läuft also ins "else" rein, die FehlerID ist 256.
Leider finde ich so gar nichts im Internet dazu.

Fange ich die Exception allgemein ab, kommt die Meldung:

Fehlermeldung:
Fehler beim Öffnen der Verbindung. temp_dad71e64-5e79-4011-b37c-51401aa07196 2940_1756_{1EDBA7EA-D13F-4269-BB76-0320102BCA57}.rptSystem.Runtime.InteropServices.COMException (0x800002F4): Fehler beim Öffnen der Verbindung. Fehler beim Öffnen der Verbindung. temp_dad71e64-5e79-4011-b37c-51401aa07196 2940_1756_{1EDBA7EA-D13F-4269-BB76-0320102BCA57}.rpt at CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Export(ExportOptions pExportOptions, RequestContext pRequestContext) at CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext)

  • Crystalreport Viewer13 ist installiert.
  • IIS 8.5 auf Windoes Server 2012

Quellcode für das Erzeugen:

 public bool CreateCrystalPDF(ref string err, string pdf_name)
        {

            C_PumpTS ts = new C_PumpTS();
            ts.SetDatabaseLogon("User", "Password");
            ts.DataSourceConnections[0].IntegratedSecurity = false;

            // CrystalReportViewer1.ReportSource = ts;

            ts.SetParameterValue("Prüfnummer", GlobalVar.PruefNummer);

            ExportOptions CrExportOptions = new ExportOptions();
            DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();
            PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions();
            //CrDiskFileDestinationOptions.DiskFileName = CrystalReportViewer1.ReportSourceClassFactoryName;

            CrFormatTypeOptions.FirstPageNumber = 1; // Start Page in the Report
            CrFormatTypeOptions.LastPageNumber = 2; // End Page in the Report
            CrFormatTypeOptions.UsePageRange = true;

            CrDiskFileDestinationOptions.DiskFileName = pdf_name;

            CrExportOptions = ts.ExportOptions;
            CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
            CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
            CrExportOptions.ExportDestinationOptions = CrDiskFileDestinationOptions;

            CrExportOptions.ExportFormatOptions = CrFormatTypeOptions;

            try
            {
                ts.Export();
                return true;
            }
            catch(DataSourceException dsex)
            {
                err = "Eins:" + dsex.Message;
                if (dsex.InnerException != null)
                    err += dsex.InnerException;
                return false;
            }

                catch(EngineException enex)
            {
                    

                if (enex.ErrorID == EngineExceptionErrorID.DataSourceError)
                {

                    err = "An error has occurred while connecting to the database. ErrorCode: " + enex.ErrorID;
                }
                else if (enex.ErrorID == EngineExceptionErrorID.ExportingFailed)
                {

                    err = "ExportingFailed " + enex.ErrorID;
                }

                else if (enex.ErrorID == EngineExceptionErrorID.LogOnFailed)
                {

                    err = "Incorrect Logon Parameters. Check your user name and password. " + enex.ErrorID;
                }


                else if (enex.ErrorID == EngineExceptionErrorID.IndexOutOfBound)
                    err = "Indexoutofbound" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InternalError)
                    err = "Internal Error" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InvalidArgument)
                    err = "InvalidArgument" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InvalidExportOptions)
                    err = "InvalidExportOptions" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InvalidFormula)
                    err = "InvalidFormula" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InvalidParameterField)
                    err = "InvalidParameterField" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InvalidParameterValue)
                    err = "InvalidParameterValue" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InvalidPrintOptions)
                    err = "InvalidPrintOptions" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.LoadingReportFailed)
                    err = "LoadingReportFailed" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.LogOnFailed)
                    err = "LogOnFailed" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.MissingParameterFieldCurrentValue)
                    err = "MissingParameterFieldCurrentValue" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.OpenSubreportFailed)
                    err = "OpenSubreportFailed" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.OutOfLicense)
                    err = "OutOfLicense" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.PageFormattingFailed)
                    err = "PageFormattingFailed" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.PrintingFailed)
                    err = "PrintingFailed" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.SavingReportFailed)
                    err = "SavingReportFailed" + enex.ErrorID;

                else err = enex.ErrorID.ToString();


                return false; 

            }


            catch (Exception ex)
            {
                err = "else: "+ex.Message;
                if (ex.InnerException != null)
                    err += ex.InnerException;
                return false;
            }
            return true;
        }

In der Entwicklungsumgebung habe ich Crystal für VisualStudio installiert und den Report aus dem Werkzeugkasten "reingezogen".

Any suggestions?

K
60 Beiträge seit 2014
vor 8 Jahren

Ich vermute deine Anwendung hat Zugriffseinschränkungen.
Versuche folgendes: Im IIS ApplicationPool, Erweiterte Einstellungen setze die Identität auf LocalSystem.
2. im Ordner inetpub/wwroot,[deinProjekt], klicke mit rechter Maustaste auf den Ordner, Eigenschaften, Sicherheit, Bearbeiten, Hinzufügen und schreib da Jeder rein.
Anschließend dem Ordner Vollzugriff geben.

Seite neustarten und nochmal probieren.

Ein weiterer Punkt könnte sein, dass die rpt Dateien nicht geladen werden können. Ist der Pfad in den rpt Dateien korrekt?

16.842 Beiträge seit 2008
vor 8 Jahren

IIRC verwendet Crystal Reports viel Interop und das war noch nie eine gute Idee im IIS.
I.d.R. fährt man hier mit einem Windows Service, der die Reports generiert besser, als wenn man direkt in einem IIS Prozess mit Crystal Report arbeitet.

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 8 Jahren

Hallo und vielen Dank, hat leider alles nichts gebracht, es kommt immer noch Fehler -256 .
Im Internet ist nichts darüber zu lesen.

K
60 Beiträge seit 2014
vor 8 Jahren

Crystal Reports ist auch schon so gut wie gestorben. Wahrscheinlich ist es bei die eher so, dass du damit arbeiten musst als willst.
Kannst du die rpt Dateien mit einem rpt Viewer aufmachen? Sind die Pfade zur Datenbank korrekt?

S
schuppsl Themenstarter:in
789 Beiträge seit 2007
vor 8 Jahren
Lösung

Hallo Gemeinde,

CR soll auch abgeschafft werden, aber in diesem speziellen Fall muss ich daraus eine PDF erzeugen die dann archiviert wird.
Inzwischen funktioniert es auch, habe einige Tests gemacht.

Es lag wohl nur an der Datenbankverbindung, die nicht richtig konfiguriert war.
Warum weiss ich nicht, aber ich habe nun einen Datei DSN angelegt und nehme diesen als Verbindung zur Datenbank.

Also Vorgehensweise mit VS2013:

  • vorhandene CR Datei löschen (falls bereits vorhanden)
  • Neues Element hinzufügen->CR->CR Datei wählen
  • Datenbankfelder->Datenbankassistent
  • Hier dann die Datei auswählen, Daten eingeben und fertig.

Dann hier noch der geänderte Quellcode, falls es jemand helfen sollte:




   public bool CreateCrystalPDF(ref string err, string pdf_name)
        {

            CrystalReport1 ts = new CrystalReport1();
            ts.SetDatabaseLogon("User", "Passw","Server","Database");
            ts.DataSourceConnections[0].IntegratedSecurity = false;            

             crystalReportViewer1.ReportSource = ts;

                  ParameterFieldDefinitions parmFields = ts.DataDefinition.ParameterFields;
             foreach (ParameterFieldDefinition def in parmFields)
             {
                 if (!def.IsLinked())
                 {

                      switch (def.ValueType)
                     {
                         case CrystalDecisions.Shared.FieldValueType.StringField:
                             ts.SetParameterValue(def.Name, "", def.ReportName);
                             break;
                               
                         case CrystalDecisions.Shared.FieldValueType.NumberField:
                             ts.SetParameterValue(def.Name, 33090);
                             break;

                         default:
                             ts.SetParameterValue(def.Name, null, def.ReportName);
                             break;
                     }

                 }
             }

            ExportOptions CrExportOptions = new ExportOptions();
            DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();
            PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions();
            //CrDiskFileDestinationOptions.DiskFileName = CrystalReportViewer1.ReportSourceClassFactoryName;

            CrFormatTypeOptions.FirstPageNumber = 1; // Start Page in the Report
            CrFormatTypeOptions.LastPageNumber = 2; // End Page in the Report
            CrFormatTypeOptions.UsePageRange = true;

            CrDiskFileDestinationOptions.DiskFileName = pdf_name;

            CrExportOptions = ts.ExportOptions;
            CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
            CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
            CrExportOptions.ExportDestinationOptions = CrDiskFileDestinationOptions;

            CrExportOptions.ExportFormatOptions = CrFormatTypeOptions;

            try
            {
                ts.Export();
                return true;
            }
            catch (DataSourceException dsex)
            {
                err = "Eins:" + dsex.Message;
                if (dsex.InnerException != null)
                    err += dsex.InnerException;
                return false;
            }

            catch (EngineException enex)
            {
                if (enex.ErrorID == EngineExceptionErrorID.DataSourceError)
                {

                    err = "An error has occurred while connecting to the database. ErrorCode: " + enex.ErrorID;
                }
                else if (enex.ErrorID == EngineExceptionErrorID.ExportingFailed)
                {

                    err = "ExportingFailed " + enex.ErrorID;
                }

                else if (enex.ErrorID == EngineExceptionErrorID.LogOnFailed)
                {

                    err = "Incorrect Logon Parameters. Check your user name and password. " + enex.ErrorID;
                }


                else if (enex.ErrorID == EngineExceptionErrorID.IndexOutOfBound)
                    err = "Indexoutofbound" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InternalError)
                    err = "Internal Error" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InvalidArgument)
                    err = "InvalidArgument" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InvalidExportOptions)
                    err = "InvalidExportOptions" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InvalidFormula)
                    err = "InvalidFormula" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InvalidParameterField)
                    err = "InvalidParameterField" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InvalidParameterValue)
                    err = "InvalidParameterValue" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.InvalidPrintOptions)
                    err = "InvalidPrintOptions" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.LoadingReportFailed)
                    err = "LoadingReportFailed" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.LogOnFailed)
                    err = "LogOnFailed" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.MissingParameterFieldCurrentValue)
                    err = "MissingParameterFieldCurrentValue" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.OpenSubreportFailed)
                    err = "OpenSubreportFailed" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.OutOfLicense)
                    err = "OutOfLicense" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.PageFormattingFailed)
                    err = "PageFormattingFailed" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.PrintingFailed)
                    err = "PrintingFailed" + enex.ErrorID;
                else if (enex.ErrorID == EngineExceptionErrorID.SavingReportFailed)
                    err = "SavingReportFailed" + enex.ErrorID;

                else err = enex.ErrorID.ToString();


                return false;

            }


            catch (Exception ex)
            {
                err = "else: " + ex.Message;
                if (ex.InnerException != null)
                    err += ex.InnerException;
                return false;
            }
            return true;
        }