Включение readerQuotas в WCF GZip Encoder Custom Binding - PullRequest
2 голосов
/ 13 июля 2010

Я включил сжатие моей службы WCF, внедрив образец Кодировщик GZip , включенный в MSDN, и все работает отлично, однако теперь мне нужно перенести квоты моего читателя на эту привязку, как я ранее делал они настроены, когда я использовал wsHttpBinding.

Это моя привязка GZip, как объявлено в моей Web.config службы wcf:

  <customBinding>
    <binding name="BufferedHttpCompressionBinding" closeTimeout="00:00:15"
      openTimeout="00:00:15" receiveTimeout="00:00:15" sendTimeout="00:00:15">
      <gzipMessageEncoding innerMessageEncoding="textMessageEncoding">
      </gzipMessageEncoding>
      <httpTransport maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
        maxBufferSize="2147483647">
        <extendedProtectionPolicy policyEnforcement="Never" />
      </httpTransport>
    </binding>
  </customBinding>

Как вы можете видеть без квот для читателя, теперь вот квоты для читателя, которые я хотел бы добавить:

<readerQuotas
              maxDepth="64"
              maxStringContentLength="1048576"
              maxArrayLength="1048576"
              maxBytesPerRead="1048576"
              maxNameTableCharCount="1048576" />   

Я попытался вставить этот узел как дочерний элемент элемента <binding />, а также увидел в сети пример его между элементом <gzipMessageEncoding />, ни один из этих двух способов не помог мне вернуть ошибку:

System.Configuration.ConfigurationErrorsException: Unrecognized element 'readerQuotas'.

Есть мысли? Можно ли использовать квоты читателей с пользовательскими привязками? Я полагаю, что так и должно быть, но может ли это быть изменение класса или простой способ пройти через конфигурацию? Надеюсь, что некоторые из них помогут вам:)

Большое спасибо, Graham.

Ответы [ 2 ]

2 голосов
/ 16 ноября 2010

Посмотрите на эту тему http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/633c5dc8-c134-40c9-9dfc-41a4b1cd3279/

Вы должны изменить GZipMessageEncodingElement и GZipMessageEncodingBindingElement, чтобы выставить читателя Quotas ...

0 голосов
/ 04 апреля 2014

Я смог сделать это программно:

var gzipBindingElement = new GZipMessageEncodingBindingElement();
myBinding.ReaderQuotas.CopyTo((TextMessageEncodingBindingElement)gzipBindingElement.InnerMessageEncodingBindingElement).ReaderQuotas);
...