通过 DTEXEC.EXE 从 Web 应用程序调用 SSIS 包。该包使用文件系统任务来制作 Excel 模板文件的副本以用作 Excel 目标文件。然后,数据流任务将记录从 OLE DB 源发送到 Excel 目标。然后将 Excel 目标文件流式传输回 Web 应用程序用户的浏览器。
当 Web 应用程序池标识是本地管理员帐户时,这可以正常工作。当 Web 应用程序池身份是一个碰巧也以交互方式登录的受限用户时,它也可以工作。
当 Web 应用程序池身份是未同时登录的受限用户时,会遇到问题。仍然正确返回小型 Excel 文件(几百行)。那里没问题。大型 Excel 文件(几万行)返回为空。返回给用户浏览器的流文件中没有行。写入服务器的目标文件也是空的。
SSIS 包没有发现错误,并报告数万条记录通过数据流。这不是 SQL Server 端的权限问题。当用户帐户被赋予 SQL Server 系统管理员时,它仍然无法将任何行写入更大的 Excel 目标文件。
这看起来像是 Windows 端的权限问题,可能涉及将缓冲区写入磁盘,这就是为什么只处理几百行时不会出现问题的原因。
希望可以通过增加DefaultBufferMaxRows (10,000 rows) 和 DefaultBufferSize (10 MB)的数据流任务设置来避免磁盘缓冲。但是,不幸的是,这不起作用。
这是一个已解决的问题,发布以帮助可能遇到类似问题的任何人。