Ошибки Web приложения

отредактировано 11:08 Раздел: FastReport .NET
При использовании Web компоненты разработали свой Web - сервер отчетности
при выполнении отчета на Web - сервере получаем ошибки
1. Object reference not set to an instance of an object. at FastReport.ReportSettings.18lk7VUa9(Report )
at FastReport.Engine.ReportEngine.hvc6XnaPk(Boolean , Boolean , ReportPage )
at FastReport.Engine.ReportEngine.bnEGWGqgP(Boolean , Boolean )
at FastReport.Report.Prepare(Boolean append)
at FastReport.Report.Prepare()
at FastReportProcessor.Workers.Items.PrepareReportWorker.RunWork(Dictionary`2 inParameters, Dictionary`2& outParameters) in D:\Project\_NET\FRActual\FastReportsServer\FastReportProcessingService\Workers\Items\PrepareReportWorker.cs:line 361


2. Exception has been thrown by the target of an invocation. System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Convert.ToInt32(String value)
at FastReport.ReportScript._StartReport(Object sender, EventArgs e) at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at vSkFQfrBvqqiacxMpN.Rqksuc4ueUwOiE0iNV.FNv8QB9HS(Object[] )
at egvTwCN3NjLtmqKTZU.KIuEsGqo8JRYP0Btwt.YKCN9f1Ac(String , Object[] )
at FastReport.Report.InvokeEvent(String name, Object[] parms)
at FastReport.Report.OnStartReport(EventArgs e)
at FastReport.Engine.ReportEngine.hvc6XnaPk(Boolean , Boolean , ReportPage )
at FastReport.Engine.ReportEngine.bnEGWGqgP(Boolean , Boolean )
at FastReport.Report.Prepare(Boolean append)
at FastReport.Report.Prepare()
at FastReportProcessor.Workers.Items.PrepareReportWorker.RunWork(Dictionary`2 inParameters, Dictionary`2& outParameters) in D:\Project\_NET\FRActual\FastReportsServer\FastReportProcessingService\Workers\Items\PrepareReportWorker.cs:line 361

При повторном запуске отчета с теми же параметрами ошибки нет.
В чем может быть причина такого поведения?

Комментарии

  • отредактировано 11:08
    Добрый день.
    Выявлен баг при работе с WebReport. Отчет загружается/просматриватеся нормально, но при попытке экспорта выдает ошибку, что запрошенный url не найдет. При узучение исходного кода решил следующим образом:
    файл WebReport.cs

    private void ResponseExport(string guid, WebExportItem ExportItem, bool displayInline)
    {
    //не стал вносить ExportItem в кеш, поскольку смысла этого не вижу, тк этот элемент создается заного при каждом
    //новом запросе экспорта.
    /*
    ExportItem.FileName = GetExportFileName(ExportItem.Format);
    CacheAdd(string.Format("frxExport{0}", guid), ExportItem, null, 5);
    //вот по этой юрл и не находило файл, если честно я так и не понял как он там должен оказаться тк записи фалй на
    // диск с потока ExportItem.File нигде не производится.
    string url = string.Format("~/{0}.fre?ID={1}&displayinline={2}", ExportItem.FileName, guid, displayInline);
    Page.Response.Redirect(url, true);
    */

    //вот этот код замечательно работает!
    //Передаём отчёт в качестве ответа на запрос
    Page.Response.Clear();
    Page.Response.ContentType = ExportItem.ContentType;
    Page.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", ExportItem.FileName));
    Page.Response.BinaryWrite(ExportItem.File.ToArray());
    Page.Response.End();
    //думаю в пояснениях не нуждается, тут все довольно просто.
    }
  • отредактировано 11:08
    Ошибка возникает в процессе выполнения отчета, а не в процессе экспорта
  • отредактировано 11:08
    Добавилась еще одна ошибка
    Exception of type 'System.OutOfMemoryException' was thrown. at System.Data.Common.DoubleStorage.SetCapacity(Int32 capacity)
    at System.Data.RecordManager.set_RecordCapacity(Int32 value)
    at System.Data.RecordManager.GrowRecordCapacity()
    at System.Data.RecordManager.NewRecordBase()
    at System.Data.DataTable.NewRecordFromArray(Object[] value)
    at System.Data.DataTable.LoadDataRow(Object[] values, Boolean fAcceptChanges)
    at System.Data.ProviderBase.SchemaMapping.LoadDataRow()
    at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)
    at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
    at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
    at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
    at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
    at FastReport.Data.DataConnectionBase.FillTableData(DataTable table, String selectCommand, CommandParameterCollection parameters)
    at FastReport.Data.DataConnectionBase.FillTable(TableDataSource source)
    at FastReport.Data.TableDataSource.LoadData(ArrayList rows)
    at FastReport.Data.DataSourceBase.HgCQhtHA6()
    at FastReport.Data.DataSourceBase.HnaElR5wn(Relation , String , SortCollection , Boolean )
    at FastReport.Data.DataSourceBase.y2U50FTkn(DataSourceBase , String , SortCollection , Boolean )
    at FastReport.DataBand.InitDataSource()
    at FastReport.Engine.ReportEngine.E5ETQu8AJ(DataBand )
    at FastReport.Engine.ReportEngine.mBJ8GhfdZv(BandCollection )
    at FastReport.Engine.ReportEngine.aQm8WgUeFP(ReportPage )
    at FastReport.Engine.ReportEngine.IZ68C0SwwX()
    at FastReport.Engine.ReportEngine.FmHCiI8fI(ReportPage )
    at FastReport.Engine.ReportEngine.hvc6XnaPk(Boolean , Boolean , ReportPage )
    at FastReport.Engine.ReportEngine.bnEGWGqgP(Boolean , Boolean )
    at FastReport.Report.Prepare(Boolean append)
    at FastReport.Report.Prepare()
    at FastReportProcessor.Workers.Items.PrepareReportWorker.RunWork(Dictionary`2 inParameters, Dictionary`2& outParameters) in D:\Project\_NET\FRActual\FastReportsServer\FastReportProcessingService\Workers\Items\PrepareReportWorker.cs:line 370
  • отредактировано 11:08
    Не большая правка, иначе имя файла не передается
    Zymosis написал: »
    private void ResponseExport(string guid, WebExportItem ExportItem, bool displayInline)
    {
    //эту строчку коммитеть не надо
    ExportItem.FileName = GetExportFileName(ExportItem.Format);
    /*
    CacheAdd(string.Format("frxExport{0}", guid), ExportItem, null, 5);
    string url = string.Format("~/{0}.fre?ID={1}&displayinline={2}", ExportItem.FileName, guid, displayInline);
    Page.Response.Redirect(url, true);
    */

    //Передаём отчёт в качестве ответа на запрос
    Page.Response.Clear();
    Page.Response.ContentType = ExportItem.ContentType;
    Page.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", ExportItem.FileName));
    Page.Response.BinaryWrite(ExportItem.File.ToArray());
    Page.Response.End();
    }
  • отредактировано 11:08
    Прочитал в файле изменений версий, что чтобы заработали картинки и экспорт/сохранение, надо добавить:
    <system.web>
    ....
    <httpHandlers>
    <add path="*.fre" verb="*" type="FastReport.Web.Handlers.WebExport"/>
    ....
    </httpHandlers>
    </system.web>

    Добавил в своем проекте. Такое чувство, что хендлер не отрабатывает и метод FastReport.Web.Handlers.WebExport.ProcessRequest() не вызывается.
    пробовал в разных вариациях и
    <add path="*.fre" verb="*" type="FastReport.Web.Handlers.WebExport"/>
    и
    <add path="*.fre*" verb="*" type="FastReport.Web.Handlers.WebExport"/>
    и
    <add path="*.fre" verb="*" type="FastReport.Web.Handlers.WebExport"/>
    и
    <add verb="*" path="*.fre" type="FastReport.Web.Handlers.WebExport, FastReport.Web, Version=1.5.29.0, Culture=neutral, PublicKeyToken=null"/>

    Все равно не работает. Где может быть ошибка?
  • отредактировано 11:08
    Zymosis написал: »
    Не большая правка, иначе имя файла не передается

    Подскажи детальнее че с этим делать то???? Куда эту процедуру или сам файл с ней нужно кинуть????

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.