2012-10-18 76 views
3

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

下方哪一个给出了更优化的性能

[OperationContract] 
    public void UploadFile(Stream inputsreaam); 

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

任何其他建议,欢迎

+1

客户将会使用哪些服务? – ChrisBint

+0

不能帮你吗?客户如何改变。 – Gerry

回答

4

如果您想上传真正大的文件,请使用Stream One。如果您以byte []形式传输2 GB文件,则会将其加载到服务器上的内存中,并且只能将其保存在某处。借助Stream,您可以从客户端流中读取数据,并在服务器上写入文件或数据库流,而实际内存中只有很少的数据块。返回性能:对于非常大的文件和多个客户端,由于缺少内存,byte []可能会冻结服务器。

您可能还会发现这个tutorial有帮助。

2

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

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