Конфигурация клиента для использования WCF - PullRequest
1 голос
/ 14 декабря 2009

из моего приложения Silverlight 3 я использую WCF-сервис. Я передаю список целых чисел в службу. Этот список может получить довольно большой> 10 тыс. Записей. В конце концов, я получаю сообщение от службы, когда список становится большим.

Я знаю, я могу установить значение, чтобы разрешить передачу большего количества данных в файл ServiceReference.ClientConfig, но я не знаю, где и какое свойство устанавливать.

Поскольку настройка выполняется на сервере, я теперь отображаю конфигурацию сервера:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<appSettings>
     ...
</appSettings>

<system.web>
<compilation debug="true" />
    <httpRuntime maxRequestLength="1048576"
                             executionTimeout="200" />
</system.web>
<system.serviceModel>
<extensions>
  <behaviorExtensions>
    <add name="silverlightFaults" type="DiscoDataSource.SilverlightFaultBehavior, DiscoDataSource, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  </behaviorExtensions>
</extensions>
<bindings>
  <basicHttpBinding>
            <binding name="MyBinding" closeTimeout="10:00:00" openTimeout="10:00:00"
      receiveTimeout="10:00:00" sendTimeout="10:00:00" maxBufferSize="6553600"
      maxBufferPoolSize="6553600" maxReceivedMessageSize="6553600" >
                <readerQuotas maxArrayLength="2147483647"/>
            </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service behaviorConfiguration="DiscoDataSource.Service1Behavior"
    name="DiscoDataSource.Service1">
    <endpoint address="" behaviorConfiguration="DiscoBehavior" binding="basicHttpBinding"
      bindingConfiguration="MyBinding" name="standardEndPoint" contract="DiscoDataSource.IService1">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8731/Design_Time_Addresses/DiscoDataSource/Service1/" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="DiscoBehavior">
      <dataContractSerializer maxItemsInObjectGraph="2147483646" />
                <silverlightFaults />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="DiscoDataSource.Service1Behavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="True" />
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>

РЕДАКТИРОВАТЬ: я экспериментировал с размером списка, который я отправляю (это словарь с объектом всегда нулевым). После 60 тыс. Элементов (~ 0,5 МБ) возникает ошибка. Что ДЕЙСТВИТЕЛЬНО беспокоит меня, так это то, что ошибка - печально известная NotFound-Error - хотя я изменил поведение сообщения об ошибках (которое работает для исключений, которые вызываются кодом службы)

Я уже добавил ответы bnkdev и marc_s, но, к сожалению, похоже, есть еще один барьер.

Кто-нибудь может мне помочь?

Спасибо заранее, Frank

Ответы [ 2 ]

1 голос
/ 14 декабря 2009

Поскольку вы используете http, возможно, стоит взглянуть на maxRequestLength httpRuntime, например,

<httpRuntime maxRequestLength="2097151"/>
0 голосов
/ 14 декабря 2009

В <ReaderQuotas> есть также дополнительный параметр maxArrayLength, который определяет максимальное количество элементов в массиве - по умолчанию 8192.

<bindings>
    <basicHttpBinding>
        <binding name="standardBindingPoint" closeTimeout="10:00:00"
            openTimeout="10:00:00" receiveTimeout="10:00:00" sendTimeout="10:00:00"
            maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
            <readerQuotas maxArrayLength="15000"/>
            <security mode="None" />
        </binding>
    </basicHttpBinding>
</bindings>

Увеличьте это значение до значения по умолчанию, достаточно большого, чтобы вместить ваш самый большой список целых.

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