Превышен максимальный размер сообщения для входящих сообщений (очевидное исправление не помогло) - PullRequest
6 голосов
/ 10 апреля 2011

У меня есть приложение, которое загружает большие файлы, используя WCF с netTcpBinding. Для определенного файла я получаю сообщение об ошибке:

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

Вот моя привязка к клиентскому файлу web.config (клиент является веб-сайтом ASP.NET):

    <binding name="DataImportEndpoint" closeTimeout="00:20:00" openTimeout="00:01:00"
      receiveTimeout="00:20:00" sendTimeout="00:20:00" transferMode="Buffered"
      hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288"
      maxBufferSize="5242880" maxReceivedMessageSize="5242880">
      <readerQuotas maxDepth="32" maxStringContentLength="524288" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="Transport">
        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
      </security>
    </binding>

Я понял, что мне также нужно изменить свойство maxReceivedMessageSize для конфигурации службы. Поэтому я добавил эту привязку:

<bindings>
  <netTcpBinding>
    <binding name="NetTcpLarge"
             maxReceivedMessageSize="5242880" maxBufferSize="5242880">
      <readerQuotas maxStringContentLength="524288"/>
    </binding>
  </netTcpBinding>
</bindings>

и изменил мою конечную точку:

<endpoint address="DataImportService" binding="netTcpBinding"
       name="DataImportEndpoint" bindingConfiguration="NetTcpLarge"
       contract="IDataImportService" />

Это исправило проблему, когда я запускаю себя в Visual Studio. Но на экземпляре, работающем на IIS 7, я все еще получаю ту же ошибку, что было превышено 65536. Я что-то здесь упускаю? я даже добавил это к своей конфигурации службы в экземпляре IIS 7, но безрезультатно:

<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="5242880" />
        </requestFiltering>
    </security>
</system.webServer>

Ответы [ 2 ]

6 голосов
/ 10 апреля 2011

Если исключение остается тем же с IIS, оно не имеет ничего общего с <requestLimits>, исключение ясно указывает на превышение maxReceivedMessageSize.Я бы перехватил трассировки WCF на подробном уровне и проверил, какая конфигурация привязки применяется к конечной точке.

Я бы предложил вам перепроверить конфигурацию клиента и сервиса и, если все еще нет подсказки, перехватить трассировки для сервиса и клиентана многословном уровне.

0 голосов
/ 10 августа 2011

Похоже, вы превышаете размер буфера IIS "maxRequestLength".Размер по умолчанию ... как вы уже догадались, 65536. Попробуйте добавить следующие строки в ваш файл web.config:

<system.web>
    <compilation debug="true"/>
    <httpRuntime maxRequestLength="5242880"/>
</system.web>
...