mono - 在 Mono + FastCGI 中托管 ServiceStack 时二进制数据损坏

标签 mono servicestack binary-data chunked

我有一个 ServiceStack 服务,它具有处理 GET 请求的方法。此方法返回二进制数据。

public object Get(DownloadFile request) {
  return new HttpResult(new FileInfo("some file"), "application/octet-stream", asAttachment: true);
}

当主机是 Windows 时,它工作正常,但当我在 Linux 中使用 Mono+FastCGI 运行它时,我下载的数据不一样。

我分析了一些文件的返回字节,并得出结论认为存在一种模式。数据以这种方式包装:

original data size + \r\n + original data + \r\n\r\n0\r\n\r\n

为什么会发生这种情况以及如何解决?

编辑:

原来这是由于 HTTP 1.1 的一部分的分块传输。

Knocte 的回答为我指明了正确的方向,我能够通过强制我的请求使用 HTTP 1.0 来解决这个问题:

var req = (HttpWebRequest)WebRequest.Create(url);
req.ProtocolVersion = new Version("1.0");

我不需要尝试 knocte 建议的补丁,但看起来这是解决问题的正确方法,而不是像我那样避免它。

最佳答案

我认为您受到了 this bug 的影响.

如果附加到它的补丁适合你,那么你可以清理它,并将它作为拉取请求提交到 github 中的 mono。

关于mono - 在 Mono + FastCGI 中托管 ServiceStack 时二进制数据损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17755322/

相关文章:

asp.net-mvc-4 - 潜在危险请求服务堆栈

c# - 如何使用ServiceStack实现删除服务调用

servicestack -/auth/twitter 未找到

c# - 比较并识别特定位置的位置和值并打印

ruby - Ruby net/scp,从变量上传文件

c# - 找不到 Microsoft.DiaSymReader.Native.x86.dll

c# - 单声道开发 : Assembly 'System.Deployment' not found

MonoDroid使用Beta,MonoTouch使用Release?

c# - 在根目录中获取文件数组的最有效方法(如果存在)

java - 直接从 Windows 剪贴板获取二进制数据