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