0

我的 MVC 应用程序中有一个操作方法,它FileResult基于在数据库中保存为 blob 的文件返回一个。根本问题是,对于某些文件类型,请求文件会返回一个空文件,即使我已经验证数据库在Content列中编码了正确的内容。

然而,真正奇怪的部分是,我很难确定到底是什么原因造成的。以下是一些我无法理解的问题:

  • 下载文本文件,例如*.txt*.csv返回一个空文件,同时下载例如 PDF 可以正常工作

  • 这只发生在我们的 CI 服务器上,我无法在本地工作站上重现它。这些是我能想到的唯一区别:

    • 我已经验证了在我的机器上工作的提交,在 CI 服务器上不起作用
    • 我尝试将本地工作站连接到 CI 服务器的数据库引擎,但无法重现。换句话说,问题出在代码中,而不是在数据库中(但正如所指出的,在本地工作的相同代码在 CI 服务器上不起作用......)。
    • CI 服务器运行 IIS7,而我在 Visual Studio 附带的 IIS Express 上进行本地测试

我该如何解决这个问题?什么可能导致它?

4

1 回答 1

0

好的,正如问题的编写方式所预期的那样,这个问题与我们的设置高度相关,所以对我来说实际的修复可能不是那么有趣。但是,为了(希望)对遇到类似问题并在这里找到方法的其他人有所帮助(欢迎!),我将发布最终帮助我找到根本原因并修复它的故障排除活动的摘要。

tl;dr:在这种情况下,问题是自定义 HTTP 压缩 - 关闭时,一切正常。

对此类问题进行故障排除 - 可以帮助我更快解决此问题的提示:

  1. 确定您的本地设置反映了生产/登台环境的设置吗?不仅他们应该这样做,而且他们确实这样做 - 如果您在重现错误时遇到问题,那么几乎可以肯定是由于这里的某些东西。

    一些可能会有所不同的事情:

    • 构建配置:Debug//构建脚本中的设置ReleaseOtherConf在IDE中?
    • Web.config:我们有一个Web.config供开发人员使用的本地文件,但在我们的构建脚本中基于模板创建生产版本Web.config.erb。所有版本都匹配吗?
    • IIS 设置:您在生产/登台服务器上的 IIS 中是否有一些自定义设置来处理非text/html数据(或任何失败的)服务?您是否在本地使用相同的设置?
       

    还是什么都没发现?好吧,除了手动之外,还有其他方法可以查找差异。

  2. 尝试避开 CI 构建过程,并将应用程序的本地(工作)版本发布到服务器。希望它可以揭示您错过的一些差异。

  3. 如果你仍然找不到不同的设置,并且仍然无法在本地重现它,你可以在服务器上调试吗?如果您的服务器上没有安装 VS,可以尝试远程调试。(在我发现问题之前我没能让它工作,主要是因为我们的设置速度非常慢,但值得一试......)

于 2014-10-22T08:31:01.437 回答