我有一个Web服务,该服务允许客户端从数据库获取查询并在客户端计算机上运行它们,并将结果发布回Web服务。这些结果从数据表解析为xml,然后使用WebClient.UploadValues发送。只要它们很小(仅返回几千行),我就可以发送和接收查询/结果,但是当查询返回成千上万的结果时,xml字符串就变得很大(特别是我现在正在使用的那个)是70mb),Web服务会返回404 Not Found。
我已经在Web服务的web.config中增加了maxAllowedContentLength,maxRequestLength和executionTimeout。似乎客户端甚至没有尝试在收到错误之前将数据推送到Web服务。有什么办法可以说明真正的问题是什么(xml字符串变量的限制吗?)?将数据发送到Web服务的代码如下。
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
答案 0 :(得分:0)
6小时后,我随机决定重新排列web.config中的maxAllowedContentLength并解决了该问题。我不知道“安全”标签的正确位置,但是这样放置可以解决我的问题:
<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>