如何将大数据发送到Nginx + FastCGI上托管的ServiceStack?

时间:2013-11-20 15:30:28

标签: nginx mono servicestack chunked-encoding fastcgi-mono-server

我需要将大文件(1GB)流式传输到ServiceStack webservice,它将在Debian中的Nginx + FastCGI上托管。

我正在使用IRequiresRequestStream DTO来支持流式传输。

我使用HttpWebRequest

从客户端上传数据
req.AllowWriteStreamBuffering = true;
req.SendChunked = true;
req.ContentType = "multipart/form-data;

在IIS中部署时,一切都很好。

但是,当WS托管在NGinx + FastCGI上时,ServiceStack会收到格式错误(分块)的数据,如下所述:Binary data corrupted when hosting ServiceStack in Mono + FastCGI引用此错误:https://bugzilla.xamarin.com/show_bug.cgi?id=10001

提供解决方法(https://github.com/mono/mono/pull/752)的pull请求显然已合并到Mono的master分支中,但尽管如此,我仍然看到了这个问题。我认为它尚未部署在Mono的生产版本中。如果我正确理解了pull请求,它只提供了一种解决方法,并且不允许流式传输。

到目前为止,对我有用的唯一解决方法是指定:

req.ProtocolVersion = new Version("1.0");

并且不以流式传输数据,而是在发送到WS之前将其全部缓冲。对于大型文件,这不是一个可行的选择。

我尝试在nginx.conf中设置它,但它不会改变行为:

chunked_transfer_encoding on;
proxy_http_version 1.1;

有没有其他选择如何将大型文件流式传输到ServiceStack webservice? XSP是否支持分块编码? Apache上的mod_mono是否支持它?自托管控制台应用程序怎么样? 这需要足够稳定,以适应面向互联网的大型应用程序。

0 个答案:

没有答案