WCF URL长度导致IIS 400错误请求错误

WCF URL长度导致IIS 400错误请求错误,wcf,rest,iis-7,Wcf,Rest,Iis 7,我有一个wcf webHttp端点,今天注意到当使用长url调用httpGet时,总共364个字符(http://etc counted),IIS会抛出400个错误请求错误。在代码中抛出断点永远不会到达。如果我删除了一些参数,并且url为354,那么web服务将按预期运行 我不确定问题出在哪里,因为URL可能类似于2k。我没有发布任何数据,所以我不认为我达到了4mb的限制,就像从 有什么好处 下面是一些wcf xml内容 <behaviors> <end

我有一个wcf webHttp端点,今天注意到当使用长url调用httpGet时,总共364个字符(http://etc counted),IIS会抛出400个错误请求错误。在代码中抛出断点永远不会到达。如果我删除了一些参数,并且url为354,那么web服务将按预期运行

我不确定问题出在哪里,因为URL可能类似于2k。我没有发布任何数据,所以我不认为我达到了4mb的限制,就像从

有什么好处

下面是一些wcf xml内容

    <behaviors>
        <endpointBehaviors>
            <behavior name="REST">
                <webHttp/>
            </behavior>
        </endpointBehaviors>
    </behaviors>

<endpoint address="" behaviorConfiguration="REST" binding="customBinding" bindingConfiguration="jsonpBinding" contract="Interface"/>


<bindings>
        <customBinding>
            <binding name="jsonpBinding">
                <jsonpMessageEncoding/>
                <httpTransport manualAddressing="true"/>
            </binding>
        </customBinding>
    </bindings>
    <extensions>
        <bindingElementExtensions>
            <add name="jsonpMessageEncoding" type="Microsoft.Ajax.Samples.JsonpBindingExtension, service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
        </bindingElementExtensions>
    </extensions>
问题在于attributeList,它可以是逗号分隔的列表

所以用一个url调用,比如

它坏了。但是如果我缩短了返回属性文本,那么它就会正常工作

I've added I added the following entry into the registry: 
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters 
Class Name: <NO CLASS> 
Last Write Time: 1/25/2011 - 3:34 PM 
Value 0 
Name: UrlSegmentMaxLength 
Type: REG_DWORD 
Data: 0x200 

我在注册表中添加了以下条目:
关键字名称:HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
类名:
最后写入时间:2011年1月25日-下午3:34
值0
名称:URLSectionMaxLength
类型:REG_DWORD
数据:0x200
添加后我重新启动了机器,但仍然收到相同的错误。这是修改WCF和IIS正在使用的HTTP.sys设置的正确位置吗?有没有办法测试WCF是否受此注册表值的影响

这是一篇没有回答的相关帖子,但是说httpsys的东西没有修复我们正在使用的64位服务器


WCF使用HTTP.sys处理HTTP流量。HTTP.sys具有系统范围的设置来处理URL周围的各种限制。你可能在打其中一个

请参阅以下文章以了解这些设置:


您需要重新启动http服务和WCF服务。如果它托管在IIS中,请重新启动IIS。UrlSegmentMaxLength对于您的URI模板来说似乎很有趣。

为了解决我们的问题,我们必须使用.NET 4.0框架。我们将web服务移动到.NET4.0应用程序池下运行,并将目标框架更改为4.0。这导致网站吐出url太长的错误,而不仅仅是一个错误的请求。在中添加web配置项后

<system.web>

增加

<httpRuntime maxUrlLength="500" />


对于最大url长度,服务已按预期启动并运行。

是的,我打赌这是url段的最大长度。我明天会查看并通知您。我在注册表中添加了以下条目:Key Name:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters类名:上次写入时间:2011年1月25日-3:34 PM值0 Name:UrlSegmentMaxLength类型:REG\u DWORD数据:0x200 I添加后重新启动机器,我仍然收到相同的错误。这是修改HTTP.sys设置的正确位置吗?有没有办法测试WCF是否受到这个注册表值的影响?以前的文章,但最近遇到了这个问题。以上内容似乎只适用于IIS7。在IIS6上,唯一有效的解决方案是上面在另一个答案中引用的注册表设置
<httpRuntime maxUrlLength="500" />