2013-07-19 34 views
3

我有一个ServiceStack服务,它具有处理GET请求的方法。该方法返回二进制数据。在Mono + FastCGI中托管ServiceStack时,二进制数据损坏

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

在宿主是Windows中,它工作正常,但当我与单声道+ FastCGI的运行它在Linux中我下载的数据是不一样的。

我分析了几个文件的返回字节,并得出结论是有一个模式。数据正在以这种方式包装:

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建议的补丁,但它看起来是解决问题的正确方法,而不是像我一样避免它。

回答

2

我认为你受到this bug的影响。

如果附加到它的修补程序适用于您,那么您可以将其清理干净,并将其作为对github中的mono的拉取请求。

相关问题