获取响应状态代码并不表示成功:如果文件太大,则为 500

Getting Response status code does not indicate success: 500 if file is too large

我正在尝试使用 HttpClient 将大量 XML 数据(~10mb)发送到我的本地 IIS 服务器,但总是收到 500 错误:Response status code does not indicate success: 500

StringContent content = new StringContent(xmlData, Encoding.UTF8, "application/xml");

var request = new HttpRequestMessage(HttpMethod.Post, redirectedAddress) { Content = content };

HttpClient client = new HttpClient();
        client.SendAsync(request).ContinueWith(
          postTask =>
          {
              var status = postTask.Result.EnsureSuccessStatusCode();
          });

所以 EnsureSuccessStatusCode 方法抛出 500 错误,但是如果我发送一个小得多的文件,比如 50kb,它可以正常工作。

我做了一些研究,有人建议在我的 IIS 配置中增加数据的最大大小,所以我做了:

<system.web>
<compilation targetFramework="4.5" />
<httpRuntime executionTimeout="360" 
             maxRequestLength="65536"
             useFullyQualifiedRedirectUrl="false"
             minFreeThreads="8"
             minLocalRequestFreeThreads="4"
             appRequestQueueLimit="100"
             enableVersionHeader="true" />

<system.webServer>
<security >
  <requestFiltering>
    <requestLimits maxAllowedContentLength="1000000000000" />
  </requestFiltering>
</security>
</system.webServer>

但仍然不走运,一旦数据大小超过 5mb,我就得到异常。我还需要设置什么吗?

您还需要增加 maxRequestLength。目前它设置为 65536,大约 6 mb,您需要将其加倍以满足您的需要。详情见此:https://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.maxrequestlength(v=vs.110).aspx