WCF maxReceivedMessageSize не читается из конфигурации

У меня есть следующий сервер app.config на стороне сервера для службы WCF:

  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="default" maxReceivedMessageSize="5000000">
          <readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" />
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="Core.TOAService.Service1Behavior"
        name="Core.TOAService.TOAService">
        <endpoint address="" binding="wsHttpBinding" contract="Core.TOAService.ITOAService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8732/Design_Time_Addresses/Core.TOAService/TOAService/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Core.TOAService.Service1Behavior">
          <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="True"/>
          <!-- 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" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

Когда я пытаюсь передать эту службу довольно большому файлу (всего ~ 250 КБ), я получаю исключение, зарегистрированное в файле svclog:

Максимальная квота размера сообщения для входящие сообщения (65536) были превышены. Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize соответствующий связывающий элемент.

Как вы можете видеть из раздела привязки в верхней части конфигурации, я попытался установить maxReceivedMessageSize на 5000000, но служба по-прежнему считает, что он установлен по умолчанию 65536. Любые идеи относительно того, что не так или что "подходящий" связующий элемент?

Ответы

Ответ 1

Там больше настроек:-) Попробуйте "maxBufferPoolSize" и "maxBufferSize" в теге <binding>.

Но самая большая проблема заключается в том, что ваша конечная точка ссылается на не ссылку на обязательную конфигурацию!

<endpoint address="" 
          binding="wsHttpBinding" contract="Core.TOAService.ITOAService">

Вам нужно добавить ссылку на нее, чтобы она стала полезна - просто называть ее "default" не работает.....

<endpoint address="" 
          binding="wsHttpBinding" 
          bindingConfiguration="default"
          contract="Core.TOAService.ITOAService">

Вы опережаете свое время;-) В WCF 4 (с .NET 4.0 - иногда в этом году 2009) вы сможете определить "конфигурации привязки по умолчанию", не указывая явно и ссылаясь на них - но на данный момент вам нужно создать связь между вашей конечной точкой и ее привязкой и любой имеющейся у вас конфигурацией привязки (или поведения).

Марк

Ответ 2

Если вы все еще получаете это сообщение об ошибке при использовании тестового клиента WCF, это связано с тем, что у клиента есть отдельный параметр MaxBufferSize.

Чтобы исправить проблему:

  • Щелкните правой кнопкой мыши файл Config node в нижней части дерева
  • Выберите "Редактировать" с помощью SvcConfigEditor

Появится список редактируемых настроек, включая MaxBufferSize.

Примечание. Автогенерированные прокси-клиенты также устанавливают MaxBufferSize на 65536 по умолчанию.

Ответ 3

Есть несколько мест, которые необходимо установить для размера. В вашем случае я думаю, что вам нужно добавить квитанцию ​​чтения. Вот пример:

  <basicHttpBinding>
    <binding name="httpBasicBinding_Service" closeTimeout="00:03:00"
      openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00"
      maxBufferSize="2000001"
      maxBufferPoolSize="2000001" maxReceivedMessageSize="2000001">
      <readerQuotas maxDepth="2000001" maxStringContentLength="2000001"
        maxArrayLength="2000001" maxBytesPerRead="2000001" maxNameTableCharCount="2000001" />
    </binding>
  </basicHttpBinding>