2013-07-19 65 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的拉取請求。

相關問題