我的WCF服务存储的大文件会损坏吗?

时间:2019-01-24 19:25:24

标签: .net wcf

这里的事情是,我有一个WCF服务来上传似乎可以与小文件一起工作的文件,但对于大文件来说,似乎会损坏或损坏它们,所以以后不能打开它们。

我希望它们的大小不超过5MB,所以我设置了绑定,就像我在许多帖子中看到的那样:

<bindings>
  <webHttpBinding>
    <binding name="httpsBinding"
             maxReceivedMessageSize ="5000000"
             maxBufferPoolSize ="5000000"
             maxBufferSize="5000000"
             transferMode ="Streamed">
      <readerQuotas  maxArrayLength="5000000" maxStringContentLength="5000000" />
      <security mode="None"/>
    </binding>
  </webHttpBinding>      
</bindings>

文件正在上载并存储在使用samba共享的lynux文件夹中。 一切正常,保存了任何类型的文件xlsx,png,jpg,pdf,txt,问题是当文件的大小大于(我不知道确切的限制)时,假设1MB我无法打开文件保存在服务器中。我已经测试了数百KB的文件并且可以正常工作,但是服务器中保存了3MB的excel文件和1.7MB的png图像,但是当我尝试使用链接打开这些文件时,我会提供文件或直接从文件夹打开出现一些消息。在excel文件中,出现有关未找到appdata时态文件的信息,并带有png消息,提示“似乎我们无法打开此类文件”。我不知道正确的单词是否已损坏,但是文件在流或保存过程中会以某种方式损坏吗?

感谢您的帮助。 我没有提供更多代码,因为在编译过程中或调用服务时没有错误消息,因此我没有堆栈跟踪来专门显示问题发生的位置。 文件大小与原始文件相同吗?是的!

1 个答案:

答案 0 :(得分:0)

因此,如果有人遇到相同的问题,请检查您的缓冲区大小。 我正在使用这种形式读取流:

Dim buffer As Byte() = New Byte(1000000) {}
Dim bytes_read As Integer = 0
Dim bytes_total As Integer = 0
Do
    bytes_read = invoice_stream.Read(buffer, 0, buffer.Length)
    bytes_total += bytes_read
Loop While bytes_read > 0

我将Web配置设置为5MB,但是我的缓冲区大小仅为1MB,这就是为什么当我尝试上传大于1MB的文件时遭到损坏或损坏的原因。 令人困惑的部分是,当保存的文件与原始文件具有相同的大小时,这是因为我使用这一行来调整字节数组的大小,以便我不会总是得到5MB的文件:

Array.Resize(buffer, bytes_total)

因此,基本上我只存储了流的最后一部分或最后1MB,并带有一串零以完成原始大小。