Se produjo un error durante el procesamiento del informe. -RDC informes en ASP.NET MVC

Tengo esta acción para generar informes:

public ActionResult Report(string id) { LocalReport lr = new LocalReport(); string path = Path.Combine(Server.MapPath("~/Report"), "Person.rdlc"); if (System.IO.File.Exists(path)) { lr.ReportPath = path; } else { return View("Index"); } List cm = new List(); var viewModel = new PersonIndexData(); viewModel.People= db.Person .Include(k => k.Groups) .OrderBy(k => k.Name); cm = viewModel.People.ToList(); ReportDataSource rd = new ReportDataSource("PersonDataSet", cm); lr.DataSources.Add(rd); string reportType = id; string mimeType; string encoding; string fileNameExtension; Warning[] warnings; string[] streams; byte[] renderedBytes; renderedBytes = lr.Render( reportType, null, out mimeType, out encoding, out fileNameExtension, out streams, out warnings); return File(renderedBytes, mimeType); } 

Cuando llamo a esta acción de esta manera: (mysite / person / report / pdf), obtengo esta excepción:

Se produjo un error durante el procesamiento del informe. Indicando esta línea:

  renderedBytes = lr.Render( reportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warnings); 

¿Puedes decirme por qué estoy recibiendo esta excepción en este código? No da ningún error y la excepción no es muy explicativa. Estoy usando código EF primero. Gracias.

¿Has intentado así después de agregar un TableAdapter? Está funcionando perfectamente para mí.

 public FileResult Report(string id) { PersonTableAdapter ta = new PersonTableAdapter(); PersonDataSet ds = new PersonDataSet(); //for avoiding "Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints." error ds.Person.Clear(); ds.EnforceConstraints = false; ta.Fill(ds.Person, id); //You might customize your data at this step ie applying a filter ReportDataSource rds = new ReportDataSource(); rds.Name = "ReportingDataSet"; rds.Value = ds.Person; ReportViewer rv = new Microsoft.Reporting.WebForms.ReportViewer(); rv.ProcessingMode = ProcessingMode.Local; rv.LocalReport.ReportPath = Server.MapPath("~/Report/Person.rdlc"); // Add the new report datasource to the report. rv.LocalReport.DataSources.Add(rds); rv.LocalReport.EnableHyperlinks = true; rv.LocalReport.Refresh(); byte[] streamBytes = null; string mimeType = ""; string encoding = ""; string filenameExtension = ""; string[] streamids = null; Warning[] warnings = null; streamBytes = rv.LocalReport.Render("PDF", null, out mimeType, out encoding, out filenameExtension, out streamids, out warnings); return File(streamBytes, mimeType, "Person" + "_" + id + ".pdf"); } 

Espero que esto ayude…

No estoy seguro de cuál te ayudará, así que los incluyo de la siguiente manera:

  1. Intente eliminar el origen de datos del menú Informe y luego vuelva a agregarlo
  2. Verifique los requisitos de la función Render antes de la acción, por lo que puede verificar los valores de los parámetros de out y out .
  3. Intente ver algunos ejemplos en LocalReporter para estar más al tanto de cómo usar esta herramienta.

Y finalmente, la línea que arroja la excepción no es lo mismo que el código principal, ¡ya que coloca null lugar de deviceInfo ! Saludos.

Mi solución para rdlc se basa en ReportViewer.

  byte[] bytes = null; string attachmentName = string.Empty; Warning[] warnings; string[] streamids; string mimeType; string encoding; string extension; /*GetReportDataSources(logicResult, spec);*/ var reportPath = GetReportExecutionPath(); ReportViewer viewer = new ReportViewer(); /*viewer.LocalReport.SubreportProcessing += new Microsoft.Reporting.WinForms.SubreportProcessingEventHandler(LocalReport_SubreportProcessing);*/ viewer.LocalReport.ReportPath = reportPath; /*viewer.LocalReport.SetParameters(parameters);*/ viewer.LocalReport.EnableExternalImages = true; viewer.RefreshReport(); viewer.LocalReport.DisplayName = "displayName"; bytes = viewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings); 

/ * algo de lógica * /

  return new StreamResponse(() => { var pdfOutput = new MemoryStream(bytes); pdfOutput.Seek(0, SeekOrigin.Begin); return pdfOutput; }, "application/pdf").WithHeader("Content-Disposition", "attachment; filename=" + attachmentName); 

También necesita agregar la ruta del informe y las fonts de datos (mi solución es complicada y la utilizo para ese LocalReport_SubreportProcessing).

PS El uso de rdlc con ASP.MVC tiene 1 problema. Debe configurar en el Pool de aplicaciones del ISS “Identity = LocalSystem”, eso está bien en Intranet, pero no está bien en Internet.