仅在部署时下载文件丢失数据

问题描述 投票:0回答:1

我支持的旧网站的一个功能是能够下载数据提取。使用 IIS Express 在本地运行代码,从四个可能的数据库中的任何一个下载都按预期工作,但是一旦部署应用程序,提取就会完成,但只包含标题的初始行,其余数据行是失踪了。
我已要求支持其部署的服务器的团队检查错误日志,甚至添加了一些基本日志记录,以便我可以看到发生了什么,但看起来它正在工作,即预期的行数正在写了,但显然不是。
这是我正在运行的代码的简要摘要:

var connStr =
$"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Windows\TEMP\tmp6AE5.XLSX;Extended Properties='Excel 12.0 xml;HDR=Yes'";
var objConn = new OleDbConnection(connStr);
objConn.Open();
var cmd = new OleDbCommand { Connection = objConn };
DumpTable(cmd, "usp_GetAllResultsData", "Results");
// Repeated for multiple stored procedures/tabs
objConn.Close();
var fileInfo = new FileInfo(exportFile);
var client = new WebClient();
var buffer = client.DownloadData(exportFile);
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=DataExtract.xlsx");
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.Flush();

过程 DumpTable 相当复杂,但基本上使用 OleDBCommand 从提供的工作表名称创建一个表,然后插入标题,后面跟着从数据库返回的每行数据。
如果有人认为它可能有帮助,很乐意提供简化版本。
我确实添加了一些日志记录,据我所知,从数据库检索的数据行数然后写入到工作表中,即
选项卡结果预计有 4,165 行(数据表中的行)
选项卡结果收到 4,165 行(执行行查询)
生成的总文件大小(取决于数据源)在 3 到 5MB 之间(我可以从日志记录中看到),即在测试数据库上,缓冲区长度为 3,022,621 字节。 Live 时约为 5.4MB。
我应该在网络服务器上检查什么明显的事情吗?我猜测,因为它确实创建了文件,所以这不是驱动程序问题,但同样,它在整个过程中根本没有失败,该过程大约需要 90 秒才能完成。

asp.net response oledb outputstream
1个回答
0
投票

最好的猜测是数据没有被拉到服务器上。代码看起来不错,并且如前所述,在本地测试期间可以正常工作。任何数据拉取和下载是否在服务器上有效?

我的意思是,显然生产中使用的连接路径将有很大的不同。您可能想使用一些按钮(例如“数据库连接测试”)向应用程序添加一些测试页面。或者使用拉动行的按钮,并将行数推入同一页面上的文本框中。

请记住,运行的生产 IIS 服务器版本必须与已安装的 Access 数据引擎版本的位大小相匹配。因此,如果您使用 Access x32,请启用 x32 位应用程序池。我

我也永远不会使用任何 cpu,而是强制项目以 x32 位运行,或强制项目以 x64 位运行。如前所述,如果强制项目以 x64 位运行,则必须在服务器上安装 x64 位版本的 Access 数据引擎。

© www.soinside.com 2019 - 2024. All rights reserved.