Отправка словаря с использованием WCF, WSBinding - PullRequest
0 голосов
/ 02 ноября 2011

В настоящее время я пытаюсь создать веб-сервис в приложении winform, используя WCF, WShttpBinding. Один из методов возвращает словарь. На стороне клиента RTD-сервер будет вызывать этот метод для получения словаря.

По какой-то причине, когда словарь становится слишком большим (0,6 МБ +), возникает исключение связи. Я попытался увеличить размер следующих параметров как на стороне клиента, так и на стороне сервера, но он все равно не будет работать. Может кто-нибудь сказать мне, что я делаю не так? Спасибо.

binding.MaxReceivedMessageSize
binding.MaxBufferPoolSize
binding.SendTimeout 
binding.OpenTimeout
binding.ReceiveTimeout 
binding.ReaderQuotas.MaxStringContentLength 
binding.ReaderQuotas.MaxDepth 
binding.ReaderQuotas.MaxBytesPerRead

1 Ответ

3 голосов
/ 02 ноября 2011

Добавить конфигурацию behavior в файлы App.config:

  • На сервере:

<behaviors>
    <serviceBehaviors>
        <behavior name="MyServiceBehavior">
            <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
    </serviceBehaviors>
</behaviors>
  • На клиенте:

<behaviors>
    <endpointBehaviors>
        <behavior name="MyClientBehavior">
            <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
    </endpointBehaviors>
</behaviors>

Обратите внимание, что 2147483647 является максимальным значением, и, возможно, вам не нужно так много.


И не забывайте ссылаться на поведение в ваших службах и конечных точках:

  • На вашем сервере (и на вашем клиенте, если на нем размещены некоторые службы):

<service name="SomeService" behaviorConfiguration="MyServiceBehavior">
    <endpoint binding="WShttpBinding" 
              bindingConfiguration="MyBindingConf" 
              contract="SomeContract"/>
</service>
  • На вашем клиенте:

<endpoint binding="WShttpBinding" 
          bindingConfiguration="MyBindingConf"
          behaviorConfiguration="MyServiceBehavior" 
          contract="SomeContract" 
          name="SomeName" />
...