2

我已经编写了以下代码,但它不起作用。将文件上传到 Web 服务时出现以下错误:

1.An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full

2.The underlying connection was closed: An unexpected error occurred on a send.

我已将以下代码用于 Web 服务,当文件大小超过 90 mb 时出现错误:

LocalService.IphoneService obj = new LocalService.IphoneService();
byte[] objFile = FileToByteArray(@"D:\Brijesh\My Project\WebSite5\IMG_0010.MOV");
int RtnVal = obj.AddNewProject("demo", "demo", "demo@demo.com", "demo@demo.com", 1, 2,    29, "IMG_0010.MOV", objFile,"00.00.06");

public byte[] FileToByteArray(string fileName)
{
    byte[] fileContent = null;
    System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
    System.IO.BinaryReader binaryReader = new System.IO.BinaryReader(fs);
    long byteLength = new System.IO.FileInfo(fileName).Length;
    //byteLength = 94371840;
    fileContent = binaryReader.ReadBytes((Int32)byteLength);
    fs.Close();
    fs.Dispose();
    binaryReader.Close();
    return fileContent;
}
4

1 回答 1

1

没有套接字会在一个块中传输 200MB。您将接收到的数据块大多在 1024 到 4096 字节之间(取决于您的设置)。

  1. 分块读取这些数据。
  2. 在服务器上重新组装您的文件。
  3. 然后根据需要使用这个接收到的文件,由字节组装而成。

对于 asp.net 网络服务:

使webservice能够接收大量数据

通过将配置元素添加到应用程序的 web.config 文件,增加 ASP.NET 对 SOAP 消息的最大大小和允许执行请求的最大秒数的限制。下面的代码示例将 ASP.NET 对传入请求的最大大小的限制设置为 400MB,并将允许执行请求的最长时间设置为 5 分钟(300 秒)。

把它放在你的 web.config 中。

<configuration>
  <system.web>
  <httpRuntime maxMessageLength="409600"
    executionTimeoutInSeconds="300"/>
  </system.web>
</configuration>

请记住,只要处理此请求,您就会阻塞线程。这不适用于大量用户。

于 2012-08-15T08:45:48.670 回答