netHttpBinding: максимальная квота длины содержимого строки - PullRequest
0 голосов
/ 04 марта 2019

Я получаю это исключение, хотя я буквально скопировал конфигурацию привязки с сервера в конфигурацию клиента.

Сторона клиента:

<client>
  <endpoint 
    address="http://localhost/ConfiguratorServer" 
    binding="netHttpBinding" 
    bindingConfiguration="BindingConfiguratorServer" 
    contract="<redacted>.IConfiguratorServer" />
</client>

<bindings>
  <netHttpBinding>
    <binding 
        name="BindingConfiguratorServer" 
        messageEncoding="Binary" 
        transferMode="Streamed" 
        maxReceivedMessageSize="1000000000" 
        openTimeout="00:00:30" 
        closeTimeout="00:00:30" 
        sendTimeout="00:10:00" 
        receiveTimeout="00:10:00">
      <readerQuotas maxStringContentLength="1000000000" maxArrayLength="1000000000" />
      <security mode="None" />
      <webSocketSettings transportUsage="WhenDuplex" />
    </binding>
  </netHttpBinding>
</bindings>

Сторона сервера:

<services>
  <service name="<redacted>.ConfiguratorServer">
    <endpoint 
       address="" 
       binding="netHttpBinding" 
       bindingConfiguration="BindingConfiguratorServer" 
       contract="<redacted>.IConfiguratorServer" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost/ConfiguratorServer" />
      </baseAddresses>
    </host>
  </service>
</services>

<bindings>
  <netHttpBinding>
    <binding 
        name="BindingConfiguratorServer" 
        messageEncoding="Binary" 
        transferMode="Streamed" 
        maxReceivedMessageSize="1000000000" 
        openTimeout="00:00:30" 
        closeTimeout="00:00:30" 
        sendTimeout="00:10:00" 
        receiveTimeout="00:10:00">
      <readerQuotas maxStringContentLength="1000000000" maxArrayLength="1000000000" />
      <security mode="None" />
      <webSocketSettings transportUsage="WhenDuplex" />
    </binding>
  </netHttpBinding>
</bindings>

1) Это работает для многих соединений, но не для тех, которые могут заподозрить нарушение предполагаемого предела 8192.

2) Я создаю дуплексный канал из кода, и привязка фабрики дуплексных каналов (на стороне клиента) содержит maxStringContentLength = 1000000000.Я не понимаю.

Что здесь не так?

Полное исключение:

Произошла ошибка десериализации объекта типа System.Объект.Максимальная квота длины строки содержимого (8192) была превышена при чтении данных XML.Эту квоту можно увеличить, изменив свойство MaxStringContentLength в объекте XmlDictionaryReaderQuotas, используемом при создании средства чтения XML.

РЕДАКТИРОВАТЬ:

Теперь я переключил messageEncoding на Text и это работает.Я озадачен.

РЕДАКТИРОВАТЬ 2:

В тестовом сценарии.Я отправляю массивы байтов произвольной длины от 10 до 20 тысяч.Я определил, что предел составляет 16384 , а не 8192 .Binary + Streamed (или StreamedResponse) не работает должным образом для размеров выше 16k.Это какое-то ограничение?

...