2010-09-02 2 views
1

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

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

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

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

1) Секция клиент не имеет имя моего bindingConfiguration в нем

<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

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

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

+0

+1 правильный ответ. –

+0

Спасибо. Приложение, которое использует мою службу WCF, не основано на .NET, и все работает нормально, когда я использую эту услугу в этом приложении. Отстой с точки зрения тестирования, но рад, что он работает. –

1

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

Смежные вопросы