Поток был прерван исключение в отчетах Crystal - PullRequest
4 голосов
/ 23 января 2012

Мы получили, что Поток прерывается Исключение при экспорте отчета в PDF.

Приведенный ниже код, который мы использовали для экспорта отчета в PDF.

                    Response.Buffer = true;
                    Response.ClearContent();
                    Response.ClearHeaders();
                    Response.ContentType = "application/pdf";
                    myReportDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, Session["ReportName"].ToString());
                    Response.Flush();
                    Response.Close();

Пожалуйста, помогите мнекак разрешить это исключение.

Ответы [ 2 ]

4 голосов
/ 13 февраля 2012

SAP объясняет, что:

Причина

Проблема была обнаружена и зарегистрирована под идентификатором отчета о проблеме ADAPT00765364. Ошибка, вероятно, вызвана тем, что Response.End() используется внутри метода ExportToHttpResponse().
Это известная проблема, которая Reponse.End() вызывает прерывание потока. Это по замыслу.
См. Microsoft KB312629, статья для получения дополнительной информации.

Обход

....
 try
   {
   reportDocument.ExportToHttpResponse(format, Response, true, Page.Title);
   }
 catch (System.Threading.ThreadAbortException)
   {
   }
....

Разрешение

Вы можете написать собственный код для экспорта отчета Crystal Report напрямую в браузер в формате, таком как PDF, Word, Excel и т. Д. Вы должны убедиться, что используете соответствующий тип контента.

Пример кода для экспорта Crystal Report в веб-браузер в формате PDF

try
{
 boReportDocument.Load(Server.MapPath(@"MyReport.rpt"));
 System.IO.Stream oStream = null;
 byte[] byteArray = null;
 oStream = boReportDocument.ExportToStream (ExportFormatType.PortableDocFormat);
 byteArray = new byte[oStream.Length];
 oStream.Read(byteArray, 0, Convert.ToInt32(oStream.Length - 1));
 Response.ClearContent();
 Response.ClearHeaders();
 Response.ContentType = "application/pdf";
 Response.BinaryWrite(byteArray);
 Response.Flush();
 Response.Close();
 boReportDocument.Close();
 boReportDocument.Dispose();

}
catch (Exception ex)
{
 string s = ex.Message;
}
0 голосов
/ 23 января 2012

Ошибка возникает из-за вызова response.End () выполняется внутри ExportToHttpResponse. Удалите ваши вызовы Flush и Close ответа и поместите ваш вызов в ExportToHttpResponse внутри блока try / catch, чтобы перехватить и игнорировать исключение System.Threading.ThreadAbortException.

...