File.WriteAllBytes导致错误"系统资源不足,无法完成所请求的服务"

Cra*_*lla 9 .net soap web-services

我有一个带WebMethod的标准SOAP Web服务,它接受一个字节数组,然后执行一个

[WebMethod(true)]
WriteFile(byte[] Data, string FilePath)
{

    File.WriteAllBytes(FilePath, Data);
}
Run Code Online (Sandbox Code Playgroud)

如果这个过程传递了一个大文件,例如2兆字节,则会发出以下错误消息:

存在不足的系统资源来完成所请求的服务

看看我得到的堆栈跟踪:

  • System.IO.File.WriteAllBytes
  • System.IO.FileStream.Write
  • System.IO.FileStream.WriteCore
  • System.IO .__ Error.WinIOError
  • System.IO.IOException:存在不足的系统资源来完成所请求的服务

我已经尝试了所有显而易见的事情,例如将maxrequestlength和执行超时设置为更真实的设置:

<httpRuntime maxRequestLength="409600" executionTimeout="900"/>
Run Code Online (Sandbox Code Playgroud)

它仍然似乎与上述故障.如果你发送一个较小的文件,它会保存到磁盘上.所以这是文件大小或时间问题.

有谁知道我还能做些什么来解决这个问题?

谢谢

戴夫

Jer*_*Gee 0

maxRequestLength 为 409600 会将数据大小限制为大约 400Kb,因此 2Mb 文件将大大超过此值。

GuidanceShare的人们很好地讨论了这种情况。简而言之:

  • 如有必要,请增加 maxRequestLength,如您所讨论的。
  • 考虑实施流式传输。在.NET 1.1中,使用实现IList的类作为数据传输对象,并HttpContext.Current.Response.BufferOutput=false;在客户端代码中设置。.NET 会自动将列表中的元素一一发送,因此列表中的每个元素可能是一个 1K 字节缓冲区。
  • 如果您可以使用.NET 2或更高版本,请考虑WCF。这会自动实现 HTTP 绑定的流式传输。

好吧,那是一条红鲱鱼!谢谢各位的评论,看来是我错了。