我需要将大文件(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是否支持它?自托管控制台应用程序怎么样? 这需要足够稳定,以适应面向互联网的大型应用程序。