ASP.Net Web服务大URL

时间:2013-05-25 09:19:17

标签: asp.net web-services url get

我们必须通过URL向ASP.Net Web服务发送一个大包。我们不能出于某些原因使用POST,所以我们是对XML包进行URL编码,我们向服务发出GET请求。

http://service.example.com/collect?content=AAAAAAAA...(+5000 characters)

服务以

响应
  

错误404 - 找不到文件或目录。

我已经读过没有超出max-content-length的错误代码,因此IIS会发回404错误。知道了,我已经按照以下方式更改了配置以允许大量请求:

更改了查询字符串长度,最大URL长度,最大请求长度和停用验证

<httpRuntime 
    requestValidationMode="2.0" 
    maxQueryStringLength="262144000" 
    maxUrlLength="262144000" 
    maxRequestLength="262144000" />
...
<pages validateRequest="false" />
...
<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="262144000" />
        </requestFiltering>            
    </security>
</system.webServer>

我仍然收到同样的错误。如何使用极大/长的URL向我的Web服务发出请求?

更新1

我不发送图片。内容类似于:

<packet date="1243235246436">
    <param type="1" id="45">
        5
    </param>
</packet>

没有新的换行符和URL编码。

更新2

在IIS请求过滤中将限制设置为较大的数字后,404现在转换为

  

HTTP错误400.请求标头的大小太长。

这是因为标题的大小现在太大了。试图通过添加MaxFieldLength和MaxRequestBytes注册表项来遵循this文章中的说明,但我仍然限制在16k URL长度。 我该怎么做才能发送1,000,000个长URL?这甚至可能吗?如何发送至少65k长的URL?这是标头可以拥有的最大长度,但我的设置不予考虑。

2 个答案:

答案 0 :(得分:1)

maxQueryStringLength的MSDN文档还讨论了在URL非常长的情况下进行IIS过滤。你检查过this了吗? 提到的属性名称略有不同:maxQueryStringmaxUrl

答案 1 :(得分:0)

GET请求仅受浏览器对URL字符串长度的限制。 在IE中它是2,083个字符,减去实际路径中的字符数。其他浏览器没有明确定义URL字符串长度的限制。这些文章可能对您有所帮助。

http://www.boutell.com/newfaq/misc/urllength.html

http://support.microsoft.com/kb/q208427

RFC 2616“超文本传输​​协议 - HTTP / 1.1”没有指定对URL长度的任何要求,因此浏览器可以自由地规定他们认为合适的内容。