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

1 つのチャンクで 200MB を転送するソケットはありません。ほとんどの場合、1024 ~ 4096 バイトのチャンクでデータを受信します (設定によって異なります)。

  1. このデータをチャンクで読み取ります。
  2. サーバー上でファイルを再構築します。
  3. 次に、必要に応じて、バイトから組み立てられたこの受信ファイルを使用します。

asp.net Web サービスの場合:

Web サービスが大量のデータを受信できるようにする

アプリケーションの web.config ファイルに構成要素を追加して、SOAP メッセージの最大サイズと要求の実行が許可される最大秒数に対する ASP.NET の制限を増やします。次のコード例では、着信要求の最大サイズに対する ASP.NET 制限を 400MB に設定し、要求の実行が許可される最大時間を 5 分 (300 秒) に設定します。

これを web.config に入れます。

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

このリクエストが処理されている限り、スレッドをブロックしていることに注意してください。これは、多数のユーザーには対応しません。

于 2012-08-15T08:45:48.670 に答える