使用WCF上传文件

我需要一个WCF服务来按用户上传大文件。

下面哪一项给出了更优化的性能

[OperationContract] public void UploadFile(Stream inputsreaam); 

要么

  [OperationContract] public void UploadFile(byte[] buffer); 

欢迎任何其他建议

如果要上传非常大的文件,请使用Stream one。 如果将2 Gb文件作为byte []传输,则会将其加载到服务器上的内存中,而不是将其保存到某处。 使用Stream,您可以从客户端流中读取并在服务器上写入文件或数据库流,实际上只有少量数据存储在内存中。 回到性能:对于非常大的文件和多个客户端,byte []很可能因内存不足而冻结服务器。

您可能还会发现本教程很有帮助。

通常,第一个( Stream参数)。 如果您正在使用Stream参数,并且您正在使用具有WebHttpBinding / WebHttpBehavior的端点(即Web或REST端点),则Stream参数将绑定到整个请求主体,而不进行编码。 在这种情况下,如果您使用第二个( byte[] ),则必须根据格式将参数编码为数组(对于XML,编码为base64的字节;对于JSON,表示字节的实际数字数组) )。

但是,如果您没有使用Web端点(即,您正在使用SOAP端点),则两者非常相似,因为Stream或byte []参数将绑定到SOAP主体 ,并且SOAP消息已经编码。