У меня есть конечная точка wcf webHttp, и сегодня я заметил, что при вызове httpGet с длинным URL-адресом ~ 364 символов (счетчик http: // и т. Д.) IIS выдает ошибку 400 неверных запросов.Создание точки останова в коде никогда не достигается.Если я удалю некоторые параметры и получу URL-адрес 354, веб-служба будет работать, как и ожидалось.
Я не уверен, где проблема, поскольку URL-адреса могут быть как 2k.Я не публикую никаких данных, поэтому я не думаю, что я достигаю ограничения в 4 Мб, как здесь
Что дает?
Вот некоторые вещи из 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>
Я только что удалил имя функции обратного вызова, что значительно уменьшило размер URL, и все равно выдало ошибку 400.Это заставляет меня думать, что существует ограничение размера WCF для текста, который может быть отправлен в виде строкового параметра.
здесь; некоторые контрактные вещи
[OperationContract]
[WebGet(UriTemplate = @"{userName}/layer({layerName})returnAttributes({attributeList})where({attributeName})({op})({attributeValue})", ResponseFormat = WebMessageFormat.Json)]
[JSONPBehavior(callback = "callback")]
DojoGrouping GetAttributes(string userName, string layerName, string attributeList, string attributeName, string attributeValue);
проблема в том,attributeList, который может быть разделенным запятыми списком.
, поэтому с URL-вызовом, например
http: //../demo/layer (OfficialsLookup) returnAttributes (USHOUSE, US_Photo, US_Web,US_Name, SENDIST, SEN_Name, SEN_Email, SEN_Party, SEN_Photo, REPDIST, REP_Name, REP_Email, REP_Party, REP_Web, REP_Photo) utmX (430) utmY (4502)
it busts.Но если я укорачиваю текст атрибута возврата, то он работает нормально.
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
Я перезагрузил компьютер после добавления и все еще получаю ту же ошибку.Это правильное место для изменения настроек HTTP.sys, которые используют WCF и IIS?Есть ли способ проверить, что это значение реестра влияет на WCF?
Вот сообщение, не содержащее ответа, но говорящее о том, что материал httpsys не исправил 64-битный сервер, который мы используем.
Похожие сообщения