我的MVC应用程序中有一个action方法,它根据在数据库中保存为blob的文件返回FileResult
。根本问题是,对于某些文件类型,请求文件返回空文件,即使我已经验证数据库具有在Content
列中编码的正确内容。
然而,真正奇怪的部分是我很难确切地确定造成这种情况的原因。这里有一些我无法理解的陷阱:
下载文本文件,例如*.txt
和*.csv
会返回一个空文件,同时下载例如{{1}}和{{1}} PDF正常工作
这只发生在我们的CI服务器上,我无法在本地工作站上重现它。这些是我能想到的唯一差异:
我如何解决这个问题?什么可能导致它?
答案 0 :(得分:0)
好的,正如编写问题的预期一样,这个问题对我们的设置非常具体,所以对我来说实际的修复可能不那么有趣。然而,为了(希望)有助于其他人遇到类似问题并找到他们的方式(欢迎!),我会发布一个故障排除活动的摘要,最终帮助我找到根本原因并修复它。 / p>
tl; dr:这种情况下的问题是自定义HTTP压缩 - 关闭时,一切正常。
您确定您的本地设置是否反映了生产/暂存环境的设置?不只是他们应该,而是他们 实际 做 - 如果你在重现错误时遇到问题,那几乎可以肯定由于这里的事情。
可能会有所不同的一些事情:
Debug
/ Release
/ OtherConf
设置?在IDE?Web.config
:我们有一个由开发人员使用的本地Web.config
文件,但是在我们的构建脚本中基于模板Web.config.erb
创建了生产版本。所有版本都匹配吗?text/html
数据(或任何失败的数据)的服务?您是否在本地使用相同的设置?
还没找到什么?好吧,除了手动之外,还有其他寻找差异的方法。
尝试支持CI构建过程,并将应用程序的本地(工作)版本发布到服务器。希望它可以揭示你错过的一些差异。
如果仍然找不到不同的设置,仍然无法在本地重现,可以在服务器上进行调试吗?如果您没有在服务器上安装VS,可以尝试Remote debugging。 (在找到问题之前我没有设法让它工作,主要是因为我们的设置速度极慢,但是值得一试......)