C# 将数据集传递给通用处理程序(ashx)
如何将数据集传递给通用处理程序? 我不想用session或viewstate来做这件事 我试图返回一个从输入数据集转换而来的excel文件作为响应 我已经将数据集内容显示为一个网格中的报告,该网格使用用户设置的一些条件进行过滤。由于查询的开销很大,我不想在处理程序中也执行同样的查询C# 将数据集传递给通用处理程序(ashx),c#,asp.net,httpcontext,ashx,generic-handler,C#,Asp.net,Httpcontext,Ashx,Generic Handler,如何将数据集传递给通用处理程序? 我不想用session或viewstate来做这件事 我试图返回一个从输入数据集转换而来的excel文件作为响应 我已经将数据集内容显示为一个网格中的报告,该网格使用用户设置的一些条件进行过滤。由于查询的开销很大,我不想在处理程序中也执行同样的查询 如果我可以通过引用处理程序来传递数据集,那就更好了?如果不能传递数据集,则需要缓存结果 您不想使用会话的任何原因?除了创建已处理类的对象并分配给它之外,我找不到任何方法将数据集传递给ashx。然后我调用了对象的Pro
如果我可以通过引用处理程序来传递数据集,那就更好了?如果不能传递数据集,则需要缓存结果
您不想使用会话的任何原因?除了创建已处理类的对象并分配给它之外,我找不到任何方法将数据集传递给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应用程序中的某个位置可能不会花费太多时间,对吗?是否可以将数据集设置为处理程序的任何内部属性?我的意思是创建一个处理程序对象,分配数据集并调用它?我相信您可以在handle类中创建一个属性,要将handle转换为具体类型并分配您拥有的属性数据源convert dataset to xml schema并通过post将其发送给generic hendelar可能有效正如我在回复ArseMkrt时所评论的,数据集的大小很大,因此将其转换为xml schema,检索和处理excel转换都需要很多时间。。这就是为什么我喜欢把它作为参考。