我需要将大文件(1GB)流式传输到 ServiceStack 网络服务,该服务将托管在 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)显然已合并到 Mono 的 master 分支中,但尽管如此,我仍然看到这个问题。我认为它尚未部署在 Mono 的生产版本中。如果我正确理解了拉取请求,它只提供了一种解决方法并且不允许流式传输。
到目前为止,唯一对我有用的解决方法是指定这个:
req.ProtocolVersion = new Version("1.0");
并且不将数据作为流式发送,而是在发送到 WS 之前将其全部缓冲。对于大文件,这不是一个可行的选择。
我尝试在 nginx.conf 中设置它,但它不会改变行为:
chunked_transfer_encoding on;
proxy_http_version 1.1;
还有其他选项如何将大文件流式传输到 ServiceStack 网络服务?XSP 是否支持分块编码?Apache 上的 mod_mono 是否支持它?自托管控制台应用程序怎么样?对于面向互联网的大型应用程序,这需要足够稳定。