Длина URL WCF, вызывающая ошибку неверного запроса IIS 400 - PullRequest
2 голосов
/ 12 декабря 2010

У меня есть конечная точка 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-битный сервер, который мы используем.

Похожие сообщения

Ответы [ 2 ]

3 голосов
/ 01 февраля 2011

Чтобы исправить нашу проблему, нам пришлось использовать .NET 4.0 framework.Мы переместили веб-службу для работы в пуле приложений .net 4.0 и изменили целевую среду на 4.0.Это привело к тому, что сайт выложил слишком длинную ошибку вместо просто неправильного запроса.После добавления записи веб-конфигурации в

<system.web>

, добавленной

<httpRuntime maxUrlLength="500" />

для максимальной длины URL, служба работает и работает, как и ожидалось.

1 голос
/ 19 января 2011

WCF использует HTTP.sys для обработки HTTP-трафика. HTTP.sys имеет общесистемные настройки для обработки различных ограничений вокруг URL. Вы можете ударить одного из них.

См. Следующую статью, чтобы узнать эти настройки: http://support.microsoft.com/kb/820129

Вам нужно будет перезапустить службу http и службу WCF. Если он размещен в IIS, перезапустите IIS. UrlSegmentMaxLength представляется интересным для вашего шаблона URI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...