【发布时间】:2015-05-23 11:49:30
【问题描述】:
我在 MVC4 Web 应用程序中实现了 RDLC 报告(返回 pdf 文件字节)。每当用户请求报告时,Web 应用程序都会停止所有用户的所有其他请求,除非呈现此报告。有些报告非常大,大约 100 页,因此 Web 服务器需要一段时间才能生成和呈现该报告。在此期间,Web 服务器不会处理其他请求。假设 Web 服务器正忙于呈现报告,在一个新选项卡中,我尝试请求一些其他数据,除非 RDLC 完成其操作,否则它不会显示。在开发机器中也会发生同样的情况。请有人建议这是我的网络应用程序中的设计缺陷还是这是默认行为?
有没有办法通过多线程或多任务来解决这个问题?
这是报表呈现代码,以防万一你想看。但我只是希望其他人分享他们的经验。
public byte[] RenderReport(PageType pageType, string ReportFormat, string ReportPath, ReportDataSource[] ReportDataModelList, out string mimeType, ReportParameter[] ReportParameters)
{
LocalReport lr = new LocalReport();
string path = Path.Combine(ReportPath);
lr.ReportPath = path;
foreach (ReportDataSource rds in ReportDataModelList)
{
lr.DataSources.Add(rds);
}
lr.EnableExternalImages = true;
lr.SetParameters(new ReportParameter("PrintedBy", PrintedBy));
foreach (ReportParameter rp in ReportParameters)
lr.SetParameters(rp);
string encoding;
string fileNameExtension;
string pageWidthHeight;
if (pageType == PageType.Portrait)
pageWidthHeight =
" <PageWidth>8.5in</PageWidth>" +
" <PageHeight>11in</PageHeight>";
else if (pageType == PageType.Landscape)
pageWidthHeight =
" <PageWidth>11in</PageWidth>" +
" <PageHeight>8.5in</PageHeight>";
else
pageWidthHeight =
" <PageWidth>8.5in</PageWidth>" +
" <PageHeight>11in</PageHeight>";
string deviceInfo =
"<DeviceInfo>" +
" <OutputFormat>" + ReportFormat + "</OutputFormat>" +
pageWidthHeight +
" <MarginTop>0.3in</MarginTop>" +
" <MarginLeft>0.3in</MarginLeft>" +
" <MarginRight>0.3in</MarginRight>" +
" <MarginBottom>0.3in</MarginBottom>" +
"</DeviceInfo>";
Warning[] warnings;
string[] streams;
byte[] renderedBytes;
renderedBytes = lr.Render(
ReportFormat,
deviceInfo,
out mimeType,
out encoding,
out fileNameExtension,
out streams,
out warnings);
return renderedBytes;
}
谢谢。
【问题讨论】:
-
请贴出相关代码,并准确说明问题出在哪里。
-
@learner 我已经发布了代码,但代码没有什么特别之处。我只想知道 mvc rdlc 的默认行为。
标签: c# multithreading asp.net-mvc-4 rdlc