Конфигурационные файлы WCF - и известная ошибка «длина строки содержимого строки (8192)» - PullRequest
6 голосов
/ 30 августа 2011

Народ,

Спасибо за вашу помощь с моей предыдущей проблемой файла конфигурации WCF.Вот новый.

Мой проект - это клиент приложения WinForms (.NET 4.0), который извлекает данные (и сохраняет их) из служб WCF, размещенных на IIS 7.0.Когда я сохраняю небольшую полезную нагрузку, все хорошо.Когда я пытаюсь сохранить полезную нагрузку более 8192 байт, возникает ошибка:

Программа форматирования выдавала исключение при попытке десериализации сообщения: при попытке десериализации параметра http://tempuri.org/:objEncounterType. произошла ошибкаСообщение InnerException было «Произошла ошибка при десериализации объекта типа PsychCoverage.Common.EncounterType.Максимальная квота длины строки содержимого (8192) была превышена при чтении данных XML.Эту квоту можно увеличить, изменив свойство MaxStringContentLength в объекте XmlDictionaryReaderQuotas, используемом при создании средства чтения XML.Строка 1, позиция 10809. '.Пожалуйста, смотрите InnerException для более подробной информации

Я подтвердил, что мой <binding name=""> совпадает с моим <endpoint bindingConfiguration="">.

Я установил для моих maxReceivedMessageSize и maxBufferPoolSize и maxBufferSize все 10 000 000 на моем клиенте app.config и на web.config.Я пытался сделать мои <readerQuota> значения очень высокими.

В моем web.config я установил <httpRuntime maxRequestLength="10000000" />

Это от моего клиента app.config:

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="wcfAdmin_binding"           
             maxReceivedMessageSize="10000000" 
             maxBufferPoolSize="10000000" 
             maxBufferSize="10000000" 
             messageEncoding="Text" 
             sendTimeout="00:05:00" 
             receiveTimeout="00:05:00"
             bypassProxyOnLocal="false" 
             hostNameComparisonMode="StrongWildcard"
             textEncoding="utf-8" 
             useDefaultWebProxy="true" 
             allowCookies="false"
             >
      <readerQuotas maxDepth="200" maxStringContentLength="10000000" maxArrayLength="16384" maxBytesPerRead="10000000" maxNameTableCharCount="16384" />
      <security mode="None"></security>
    </binding>
  </basicHttpBinding>
</bindings>
<client>
  <clear/>
  <endpoint address="http://localhost/PsychCoverage/Admin.svc" name="AdminUIClientEndpoint" binding="basicHttpBinding" bindingConfiguration="wcfAdmin_binding" contract="PsychCoverage.Common.IAdmin">
    <identity>
      <dns value="localhost" />
    </identity>
  </endpoint>
</client>

</system.serviceModel>

А это от моего сервиса web.config:

<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="False" ></serviceHostingEnvironment>
<bindings>
  <basicHttpBinding>
    <binding name="wcfAdmin_binding"  
             maxReceivedMessageSize="10000000" 
             maxBufferPoolSize="10000000" 
             maxBufferSize="10000000" 
             messageEncoding="Text" 
             sendTimeout="00:05:00" 
             receiveTimeout="00:05:00">
      <readerQuotas maxDepth="200" 
                    maxStringContentLength="10000000" 
                    maxArrayLength="16384" 
                    maxBytesPerRead="10000000" 
                    maxNameTableCharCount="16384" />
      <security mode="None"></security>
    </binding>
    <binding name="wcfClientWebPortal_binding" 
              maxReceivedMessageSize="10000000" 
              maxBufferPoolSize="10000000" 
              maxBufferSize="10000000" 
              messageEncoding="Text" 
              sendTimeout="00:05:00" 
              receiveTimeout="00:05:00">
      <readerQuotas maxDepth="200" 
                    maxStringContentLength="10000000" 
                    maxArrayLength="16384" 
                    maxBytesPerRead="10000000" 
                    maxNameTableCharCount="16384" />
      <security mode="None"></security>
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service behaviorConfiguration="wcfBehavior" name="PsychCoverage.WcfMT.Admin">
    <endpoint address="" 
              binding="basicHttpBinding" 
              bindingConfiguration="wcfAdmin_binding"
              name="AdminEndpoint" 
              bindingName="wcfAdmin_binding" 
              contract="PsychCoverage.Common.IAdmin">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
  </service>
  <service behaviorConfiguration="wcfBehavior" name="PsychCoverage.WcfMT.ClientWebPortal">
    <endpoint address="" 
              binding="basicHttpBinding"
              bindingConfiguration="wcfClientWebPortal_binding"
              name="ClientWebPortalEndpoint" 
              bindingName="wcfClientWebPortal_binding"
              contract="PsychCoverage.Common.IClientWebPortal">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="wcfBehavior">
      <!-- To avoid disclosing metadata information, 
      set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="False" />
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true.  Set to false before deployment 
      to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceThrottling maxConcurrentCalls="100" maxConcurrentSessions="100" maxConcurrentInstances="100" />
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>

Большое спасибо заранее.

...