Большой строковый аргумент в вызове операции WCF - PullRequest
1 голос
/ 19 мая 2011

Я не могу передать строку в качестве аргумента для вызова операции WCF. Строка довольно большая (около 12000 символов).

Я увеличил maxStringContentLength в web.config и поиграл почти со всеми атрибутами, но проблема все еще остается.

Я нашел обходной путь - разделить строку на стороне клиента и объединить на стороне сервера. Это работает так.

Кто-нибудь может направить меня к правильному пути решения этой проблемы? Почему вызов операции WCF может принять тот же объем данных (разделенный на 2 строковых параметра), но выдает ошибку, когда эти данные передаются в одном строковом параметре? Где мы настраиваем ограничение размера аргументов операции WCF?

--------------------------------- CODE ------------- -------------------

TestService.Service1Client client = new TestService.Service1Client();
string str = "VERY LARGE STRING";

//DOES NOT WORK
client.TakeLargeStringParam(str);

//WORKS
client.TakeLargeStringParam2(str.Substring(0, 5000), str.Substring(5000));

----------------------- Web.config --------------------- -----

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="819200" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:30701/Service1.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService1" contract="TestService.IService1"
                name="BasicHttpBinding_IService1" />
        </client>
    </system.serviceModel>

1 Ответ

3 голосов
/ 26 мая 2011

Вам нужно увеличить maxStringContentLength на стороне сервера , а не на клиенте. В файле web.config есть только раздел <client>, и для настройки службы вам необходимо установить раздел <service>. Если в службе нет соответствующей конфигурации службы, она будет использовать конфигурацию по умолчанию, которая имеет значения квоты по умолчанию.

...