尝试将大量数据发送到 Web 服务时如何修复 404 'Not Found' 错误
How to fix 404 'Not Found' error when attempting to send large amount of data to web service
我有一个 Web 服务,它允许客户端从数据库中获取查询,并 运行 在客户端计算机上进行查询,将结果发回 Web 服务。这些结果从数据表解析为 xml,然后使用 WebClient.UploadValues 发送。我可以发送和接收 queries/results 只要它们很小(只返回几千行),但是当查询 returns 几十万个结果时, xml 字符串变得相当大(我现在使用的特别是 70mb) 和 Web 服务 returns 404 Not Found.
我已经在 web.config 中增加了 Web 服务的 maxAllowedContentLength、maxRequestLength 和 executionTimeout。看起来客户端在收到该错误之前甚至没有尝试将数据推送到 Web 服务。有什么方法可以判断真正的问题是什么(xml 字符串变量的限制?)?将数据发送到网络服务的代码如下。
Using wc As New WebClient()
Try
Dim nvc As New NameValueCollection
nvc.Add("params", myParameters)
wc.UploadValues(URI, nvc)
Catch ex As WebException
eLog.WriteEntry("Application", My.Application.Info.AssemblyName + " - " + ex.Message)
End Try
End Using
我也试过这个方法:
Try
Dim client As New HttpClient()
client.Timeout = TimeSpan.FromSeconds(300)
Dim request As New HttpRequestMessage(HttpMethod.Post, URI)
request.Content = New StringContent(myParameters)
Dim response = client.SendAsync(request, HttpCompletionOption.ResponseContentRead)
Catch ex As HttpRequestException
eLog.WriteEntry("Application", My.Application.Info.AssemblyName + " - " + ex.Message)
End Try
6 小时后,我随机决定重新排列 web.config 中的 maxAllowedContentLength 并解决了问题。我不知道 "security" 标签的正确定位,但这样放置解决了我的问题:
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" maxRequestLength="2097152" executionTimeout="3600" />
</system.web>
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="Home.html" />
</files>
</defaultDocument>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483648" />
</requestFiltering>
</security>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
我有一个 Web 服务,它允许客户端从数据库中获取查询,并 运行 在客户端计算机上进行查询,将结果发回 Web 服务。这些结果从数据表解析为 xml,然后使用 WebClient.UploadValues 发送。我可以发送和接收 queries/results 只要它们很小(只返回几千行),但是当查询 returns 几十万个结果时, xml 字符串变得相当大(我现在使用的特别是 70mb) 和 Web 服务 returns 404 Not Found.
我已经在 web.config 中增加了 Web 服务的 maxAllowedContentLength、maxRequestLength 和 executionTimeout。看起来客户端在收到该错误之前甚至没有尝试将数据推送到 Web 服务。有什么方法可以判断真正的问题是什么(xml 字符串变量的限制?)?将数据发送到网络服务的代码如下。
Using wc As New WebClient()
Try
Dim nvc As New NameValueCollection
nvc.Add("params", myParameters)
wc.UploadValues(URI, nvc)
Catch ex As WebException
eLog.WriteEntry("Application", My.Application.Info.AssemblyName + " - " + ex.Message)
End Try
End Using
我也试过这个方法:
Try
Dim client As New HttpClient()
client.Timeout = TimeSpan.FromSeconds(300)
Dim request As New HttpRequestMessage(HttpMethod.Post, URI)
request.Content = New StringContent(myParameters)
Dim response = client.SendAsync(request, HttpCompletionOption.ResponseContentRead)
Catch ex As HttpRequestException
eLog.WriteEntry("Application", My.Application.Info.AssemblyName + " - " + ex.Message)
End Try
6 小时后,我随机决定重新排列 web.config 中的 maxAllowedContentLength 并解决了问题。我不知道 "security" 标签的正确定位,但这样放置解决了我的问题:
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" maxRequestLength="2097152" executionTimeout="3600" />
</system.web>
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="Home.html" />
</files>
</defaultDocument>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483648" />
</requestFiltering>
</security>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>