Как настроить службу WCF для приема более длинного списка параметров? - PullRequest
1 голос
/ 19 июля 2011

При вызове службы WCF из Silverlight, которая работает для более мелких параметров, но не работает для более крупных (с ответом «400: Bad Request»), как настроить сервер для приема большего числа параметров?

Длинная версия: я пытаюсь вызвать службу WCF из Silverlight, и я передаю Список гидов, который содержит 2000 гидов.Служебный вызов работает до 1100 (точно), но все, что прошло, приведет к ошибке.Я посмотрел на ответ с Fiddler, и я получаю код ответа 400 (Bad Request).Я считаю, что это настраиваемый параметр, но я не уверен, какой параметр нужно изменить.Я не уверен на 100%, что мои настройки файла конфигурации применяются так, как я намереваюсь, поскольку я не знаю, как программно проверить, используются ли эти настройки.Однако я попытался установить maxRequestLength, maxQuestyStringLength и maxUrlLength элемента httpRuntime в system.web на чрезвычайно высокие значения без изменений.Я установил maxReceivedMessageSize, maxBufferPoolSize и maxBufferSize элемента httpTransport пользовательской привязки к высоким значениям без эффекта.Я установил maxDepth, maxArrayLength, maxBytesPerRead, maxNameTableCharCount и maxStringContentLength элемента readerQuota элемента basicHttpBinding также без эффекта.

Если это пока не очевидно, я беру случайные удары в темноте на основаниирекомендации из нескольких мест онлайн, но ничего не дало никакого эффекта.Если кто-то точно знает, какой атрибут мне следует установить, чтобы я мог попробовать еще раз, я был бы очень признателен за некоторые знающие советы.Также было бы особенно полезно, если бы у кого-то был совет о том, как я могу программно проверить, какие настройки используются из моего файла конфигурации, что, по крайней мере, позволило бы мне подтвердить, что то, что я уже пробовал, применяется так, как я думаю,are.

ОБНОВЛЕНИЕ: Если взглянуть на ситуацию немного ближе, моя проблема очень похожа на описанную в Сбой запроса большого веб-сервиса WCF с (400) HTTP Bad Request .Я не верил, что это будет той же проблемой, потому что я установил maxReceivedMessageSize, как описано в решении, и это не решило проблему.Тем не менее, я думаю, что мой web.config не применяется правильно, потому что я только что проверил размер сообщения в fiddler, и последний успешный вызов (1100 Guids) приводит к тому, что размер сообщения составляет 65481, и первый неудачный запрос происходит сразмер сообщения 65540. Таким образом, значение по умолчанию превышает 65536.

Вот мой текущий раздел web.config serviceModel:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="basicHttpBinding" closeTimeout="01:00:00"
                openTimeout="01:00:00" receiveTimeout="01:00:00"
                sendTimeout="01:00:00" maxBufferPoolSize="2147483647"
                maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
                    <readerQuotas maxDepth="2147483647"
                        maxStringContentLength="2147483647"
                        maxArrayLength="2147483647" />
            </binding>
        </basicHttpBinding>
    </bindings>
    <services>
        <service behaviorConfiguration="ReportDataServiceBehavior"
            name="DSTM.Reporting.ReportDataService">
            <endpoint address="" binding="basicHttpBinding"
                contract="DSTM.Reporting.IReportDataService" />
            <endpoint address="mex" binding="mexHttpBinding"
                contract="IMetadataExchange" />
        </service>
    </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="ReportDataServiceBehavior">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
                <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

Как я могу убедиться, что моя служба использует привязкучто я ожидаю?

Ответы [ 2 ]

2 голосов
/ 19 июля 2011

У вас есть binding="basicHttpBinding" в объявлении конечной точки, которое указывает службе использовать встроенную привязку WCF BasicHttpBinding.Однако он не будет использовать вашу настраиваемую привязку, если вы не добавите bindingConfiguration="basicHttpBinding" для ссылки на определенную привязку, которую вы определили.Возможно, вы также захотите изменить имя вашего <binding>, чтобы было ясно, что вы ссылаетесь на свою конфигурацию привязки, а не на сам базовый HttpBinding.

0 голосов
/ 19 июля 2011

Вы передаете параметры в URL как запрос GET или используете запрос POST?В IIS существует ограничение на длину URL-адреса для запроса GET.Если это так, вы можете изменить глагол webmethod для принятия вместо него POST.

...