переплет конфигурации не читается должным образом - PullRequest
1 голос
/ 02 сентября 2010

У меня есть служба WCF, которая возвращает много данных. Настолько, что мне нужно было увеличить maxBufferSize и maxReceivedMessageSize. Моя конечная точка и привязка выглядят так:

<endpoint 
    address=""
    binding="basicHttpBinding"
    bindingConfiguration="ExtendedBinding"
    contract="NAThriveExtensions.INableAPI"
/>

<bindings>
  <basicHttpBinding>
    <binding
       name="ExtendedBinding"
       maxBufferSize="655360"
       maxReceivedMessageSize="655360" >
    </binding>
  </basicHttpBinding>
</bindings>

Насколько я могу судить, вышеприведенное настроено правильно. Когда я получаю доступ к своему веб-серверу через WCFTestClient (с хостингом службы в VS или IIS), я проверяю конфигурацию и

1) В клиентском разделе нет имени моей привязки конфигурации в ней

<client>
    <endpoint
       address="http://wikittybam/NAThriveExtensions/NableAPI.svc"
       binding="basicHttpBinding" 
       bindingConfiguration="BasicHttpBinding_INableAPI"
       contract="INableAPI" name="BasicHttpBinding_INableAPI" />
</client>

2) Привязка, которая всасывается в клиент, не имеет обновленных maxZBufferSize или maxReceivedMessageSize, а заглушки безопасности транспорта и сообщений каким-то образом переносятся.

<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_INableAPI" 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="8192" maxArrayLength="16384"
         maxBytesPerRead="4096" maxNameTableCharCount="16384" />
         <security mode="None">
           <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="" />
           <message clientCredentialType="UserName" algorithmSuite="Default" />
         </security>
    </binding>
  </basicHttpBinding>
</bindings>

Я знаю, что bindingConfiguration работает, так как я смог проверить безопасность транспорта через WCFTestClient. Любое понимание будет оценено.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 02 сентября 2010

Насколько я помню, эта деталь параметров привязки не публикуется в опубликованных метаданных. Единственная причина, по которой служебные прокси-серверы, созданные с использованием VS / Svcutil, содержат все это, потому что они очень глупы и сериализуют конфигурации привязки со всеми значениями, даже если все они содержат стандартные значения по умолчанию!

Итак, вам придется вручную настроить конфигурацию клиента.

1 голос
/ 02 сентября 2010

Не все параметры привязки передаются. Настройка размера сообщения Morover является защитой от атаки типа «отказ в обслуживании», поэтому каждая служба и клиент могут иметь свою собственную конфигурацию, и будет плохо, если эта конфигурация перезаписывается при каждой регенерации прокси-сервера. Он называется maxReceiveMessageSize, поэтому он проверяет только размер входящих сообщений . Вы должны установить для этого параметра ожидаемый размер сообщения на принимающей стороне. Например, если вы планируете загружать только большой набор данных из службы, вам не нужно настраивать высокое значение на этой стороне службы, поскольку он не получит этот набор данных, он отправит его. На стороне клиента вы должны установить этот параметр, иначе сообщение не будет обработано.

...