3

次のコードを使用して、WinForms アプリから Web API にデータを送信しています。

private string SendBatch(string URL, string POSTdata)
{
    string responseData = "";
    try
    {
        HttpWebRequest hwrequest = (HttpWebRequest)WebRequest.Create(URL);
        hwrequest.Timeout = 600000;
        hwrequest.KeepAlive = true;
        hwrequest.Method = "POST";
        hwrequest.ContentType = "application/x-www-form-urlencoded";

        byte[] postByteArray = System.Text.Encoding.UTF8.GetBytes("data=" + POSTdata);

        hwrequest.ContentLength = postByteArray.Length;

        System.IO.Stream postStream = hwrequest.GetRequestStream();
        postStream.Write(postByteArray, 0, postByteArray.Length);
        postStream.Close();

        HttpWebResponse hwresponse = (HttpWebResponse)hwrequest.GetResponse();
        if (hwresponse.StatusCode == System.Net.HttpStatusCode.OK)
        {
            System.IO.StreamReader responseStream = new System.IO.StreamReader(hwresponse.GetResponseStream());
            responseData = responseStream.ReadToEnd();
        }
        hwresponse.Close();
    }
    catch (Exception e)
    {
        responseData = "An error occurred: " + e.Message;
    }
    return responseData;

    }
}

少量のデータを送信すると、API は問題なくデータを受信します。しかし、大量のデータ (30MB 以上) を送信しようとすると、不正な形式のデータを送信したという API からのエラーが発生します。

タイムアウトを 10 分に設定しましたが、約 2 分後にエラーが表示されます。

SO で行った質問によると、投稿サイズに制限はなく、API にも制限はありません。

私は解決策を見つけるために数日間試みてきたので、どんなポインタでも大歓迎です。

ありがとう!

4

3 に答える 3

2

IIS では、http ポストのデフォルトの最大サイズは 4Mg に設定されています。これを変更して、より大きなストリームを許可する必要があります。

http://support.microsoft.com/default.aspx?scid=kb;EN-US;295626

この制限を増やす方法の例を次に示します。

IIS 7 の httpruntime maxRequestLength の制限は 2097151 です

于 2013-10-09T03:22:11.917 に答える
1

サイト チェックアウト IIS リクエスト制限を所有している場合

http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="4294967295" />
于 2013-10-09T04:14:48.057 に答える