如何将数据集传递到通用处理程序? 我不想使用会话或视图状态来做到这一点。将数据集传递给通用处理程序(ashx)
我想返回一个从输入数据集转换为excel文件作为响应。
我已经将数据集内容显示为一个网格中的报告,并按用户设置的某些条件过滤。由于查询很昂贵,我不想在处理程序中执行相同的操作。
它甚至会更好,如果我可以参照处理程序传递数据集?
如何将数据集传递到通用处理程序? 我不想使用会话或视图状态来做到这一点。将数据集传递给通用处理程序(ashx)
我想返回一个从输入数据集转换为excel文件作为响应。
我已经将数据集内容显示为一个网格中的报告,并按用户设置的某些条件过滤。由于查询很昂贵,我不想在处理程序中执行相同的操作。
它甚至会更好,如果我可以参照处理程序传递数据集?
我找不到任何方式将数据集传递给ashx,除了创建处理类的对象并分配给它。然后我调用该对象的ProcessRequest方法。它运行良好,构建成功。但是当我尝试发布网站时,代码错误地发现无法找到类名。代码就像下面给出的一样。
//this is working fine in VS (build succeeded and ProcessRequest returned the file!)
//but didn't compile only on publishing
MyHandler handlerObj = new myHandler();
handlerObj.DataSource = myDataset;
handlerobj.ProcessRequest(Context);
我解决了这个问题,用通用的处理程序替换了一个普通的c#类,它有一个接受上下文和数据集的方法。然后我在类中调用了方法,在那里我将文件流写入Context.Response中,它工作得很好。这个类就是这样做一样的处理程序,并无需从IHttpContext
public void ProcessDownload(HttpContext context, DataSet DataSource)
{
context.Response.Clear();
context.Response.ContentType = "application/vnd.ms-excel";
MemoryStream file = getExcelMemStream(DataSource);
context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "myFile.xls"));
context.Response.BinaryWrite(file.GetBuffer());
context.Response.End();
}
有谁知道我为什么只在发布时出错? –
你无法通过它,你需要缓存的结果
你不想使用会话的原因吗?
我希望数据集只传递一次,数据集的大小也会变大。所以我觉得将它添加到会话或HttpContext项目是不是一个好主意,因为它可能会保持,直到会话结束。 –
你知道,我想大发回的数据集将其转换到Excel并寄回将需要更长的时间,而不是用相同的条件下运行服务器端的查询,或到高速缓存,并重新发送...如果你不这样做想在会话缓存,因为内存的使用,你可以转储到文件,并在同一个屏幕上的下一个请求删除文件...... –
我可以把从已绑定GridView的数据源的数据集。因此,将相同的对象传递到同一个Web应用程序中的某个地方可能不需要太多时间,对吧? –
转换数据集继承到XML模式,并通过邮寄发送到通用hendelar可能是它的工作原理 –
正如我在回答评论到ArseMkrt,数据集是大尺寸的,所以将其转换为xml模式,检索它并处理excel转换都需要很多时间..这就是为什么我想将它作为参考传递的原因。 –