Поток был прерван исключение в отчетах Crystal

Мы получили Поток был прерван Исключение при экспорте отчета в 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();

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

3 ответа

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;
}

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

Ошибка возникает из-за ответа.End(), созданного внутри ExportToHttpResponse. Поскольку ваш код может вызывать ExportToHttpResponse, а затем выполнять какие-то другие действия, возникает исключение прерывания потока. Поэтому избегайте любой строки кода после вызова ExportToHttpResponse. Даже при обертке try-catch возникает исключение прерывания.

Поэтому убедитесь, что ваша последняя строка в методе события содержит ExportToHttpResponse.

идти от

      private void some_Command(object source, CommandEventArgs e)
        {
          try
          {
            //some other code her
    repDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "Some title ");
          }
          Catch
          {
          }
        }

к

          private void some_Command(object source, CommandEventArgs e)
    {
      try
      {
        //some other code here
      }
      catch
      {
      }
      repDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "Some title ");
    }
Другие вопросы по тегам