2009-10-20 91 views
2

我已经使用WCF的流式传输实现了文件上传。一切都按预期工作,但是我遇到了一个问题:我分配4kb缓冲区来读取传入流,但WCF只读取255个字节。这是我的上传功能:使用WCF流式传输上传文件,从流式传输中读取微小的文件

public UploadResponse UploadFile(FileDto fileDto) 
     { 
      using (var inStream = fileDto.FileStream) 
      using (var outStream = new FileStream("OutFile.txt", FileMode.Create)) 
      { 
       var buffer = new byte[4096]; 
       int count; 
       while ((count = inStream.Read(buffer, 0, buffer.Length)) > 0) 
       { 
        outStream.Write(buffer, 0, count); 
       } 
      } 
      return new UploadResponse {DocumentId = -1}; 
     } 

只有255个字节读在该行:而((计数= inStream.Read(缓冲液,0,buffer.Length))> 0)。有什么设置可以改变,还是我做错了什么?

+0

你可以发布你的wcf配置 – 2009-10-21 07:30:58

+0

和你的服务合同吗,谢谢! – 2009-10-22 05:53:01

+0

您是否找到解决方案? – 2014-03-05 17:31:05

回答

1

如果可以请发布您的配置。该配置应指定默认或重写的值,类似下面:

<binding name="FileTransferServicesBinding" 
    maxReceivedMessageSize="1048576" messageEncoding="Mtom"> 
     <readerQuotas maxArrayLength="1048576" maxBytesPerRead="1048576" 
    maxNameTableCharCount="1048576" maxStringContentLength="1048576"> </readerQuotas> 
    </binding> 

试试这个MSDN Link的家伙提到,他只获得255个字节同样的问题,他有标记的答案,似乎解决了问题。它指出:

“为了流传递给WCF方法,流参数必须是在操作的唯一参数(或在邮件正文中)......”

+0

我没有试过readerQuotas。谢谢你的样品。我会尝试一下并取得结果。 – 2009-10-20 15:37:26

+0

虽然maxBytesPerRead的默认值是4096,所以我不太确定那会是问题。 – 2009-10-20 17:07:12

+0

检查我的帖子中的链接:http://stackoverflow.com/questions/898168/supported-bindings-for-wcf-streaming-transfers/911371#911371 – Tanner 2009-10-21 07:00:31