Отправка таблицы записей с фотографиями превышает квоту

Настройки кода

<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding>
<binaryMessageEncoding />
<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
</binding>
</customBinding>
<basicHttpBinding>
<binding maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="SilverlightApplication2.Web.EpriscriptionSrv">
<endpoint address="" binding="customBinding"
contract="SilverlightApplication2.Web.EpriscriptionSrv" />
<endpoint address="mex" binding="customBinding" contract="IMetadataExchange" />
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>

Отображаемая справка по ошибке введите здесь описание изображения

Посетите, но не ответил

Wcf-максимум превышена квота на размер входящих сообщений (65536)?

введите здесь описание изображения


person user1039134    schedule 07.05.2015    source источник


Ответы (2)


Ваш файл конфигурации хоста службы не совпадает с конфигурацией вашего клиентского приложения.

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

Чтобы получать сообщения большего размера, необходимо увеличить атрибут maxReceivedMessageSize в конфигурации на стороне клиента.

Поскольку вы в настоящее время используете тестовый клиент WCF, я приведу пару скриншотов, как это сделать там:

  1. При запуске тестового клиента WCF. Перейдите вниз к «Файлу конфигурации», щелкните правой кнопкой мыши и выберите «Редактировать с помощью SvcConfigEditor».
  2. В новом окне редактора конфигурации: разверните меню «Привязки» и выберите свою привязку. Затем отредактируйте атрибут MaxReceivedMessageSize. Экран утилиты настройки службы
  3. Нажмите Файл -> Сохранить и закройте редактор.
  4. На тестовом клиенте WCF. Теперь должно появиться новое всплывающее окно с сообщением о том, что конфигурация была изменена внешним редактором, и с предложением выполнить перезагрузку. Нажмите «Да», чтобы сделать это. Меню перезагрузки тестового клиента WCF
  5. Меню «Файл конфигурации» в тестовом клиенте WCF теперь должно отражать новые изменения. Теперь выполните тестовый вызов в тестовом клиенте WCF как обычно.

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

person cmcquillan    schedule 10.05.2015
comment
Хороший ответ - я не смотрел файл конфигурации, который использовал тестовый клиент, но думаю, вы его нашли :) - person Tim; 11.05.2015

Вы также можете попробовать увеличить значения квоты чтения в своей пользовательской привязке.

<bindings>
  <customBinding>
    <binding>
      <binaryMessageEncoding>
        <readerQuotas maxDepth="2147483647"
                      maxStringContentLength="2147483647"
                      maxArrayLength="2147483647"
                      maxBytesPerRead="2147483647"
                      maxNameTableCharCounts="2147483647" />
        </readerQuotas>
        <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
    </binding>
  </customBinding>

Кроме того, вы можете увеличить свойство maxItemsInGraph для DataContractSerializer с помощью поведения:

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" 
                       httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
      <dataContractSerializer maxItemsInGraph="2147483647" />
    </behavior>
  </serviceBehaviors>
</behaviors>
person Tim    schedule 07.05.2015
comment
Внутренний Исключение: превышена квота на максимальный размер входящих сообщений (65536). Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize соответствующего элемента привязки. - person user1039134; 09.05.2015
comment
Можете ли вы уточнить свой вопрос о том, как вы создаете прокси и выполняете вызов GetAll_Patients()? Пользовательская привязка должна быть по умолчанию (поскольку атрибута name нет), но что-то заставляет не принимать повышенные значения. - person Tim; 09.05.2015
comment
[OperationContract] public List‹Patients› GetAll_Patients() { List‹Patients› obj_Lst_t; используя (var ctx = new EpriscriptionContext()) { ctx.Configuration.ProxyCreationEnabled = false; obj_Lst_t = ctx.Пациенты.ToList(); } вернуть obj_Lst_t; } - person user1039134; 10.05.2015
comment
публичный частичный класс Пациенты { public int Id { get; задавать; } общедоступная строка FName { получить; задавать; } публичная строка LName { получить; задавать; } общедоступная строка FatherName { получить; задавать; } общедоступная строка IdentityNo { получить; задавать; } публичная строка NationalNo { получить; задавать; } общественный DateTime BirthDate { получить; задавать; } общественность Пол Пол {получить; задавать; } общественное ActiveStatus ActiveStatus { получить; задавать; } - person user1039134; 10.05.2015
comment
публичная строка BirthLocation {получить; задавать; } общедоступная строка ExportLocation { получить; задавать; } public Nullable‹int› EducationalLevelId { get; задавать; } общедоступный образовательный уровень образовательный уровень { получить; задавать; } общедоступная строка Род занятий { получить; задавать; } общественного MarritalStatus MarritalStatus { получить; задавать; } [NotMapped] public string[] Tel2 { get; задавать; } общедоступная строка Тел { получить; задавать; } открытый адрес строки { получить; задавать; } открытый байт [] PatientImage { получить; задавать; } [NotMapped] public string[] PatientImageAddr { get; задавать; } общедоступная строка MedicalRecNo { получить; задавать; } - person user1039134; 10.05.2015
comment
[NotMapped] общедоступная строка[] FamilyTel2 { get; задавать; } общедоступная строка FamilyTel { получить; задавать; } public ICollection‹Страхование пациентов›Страхование пациентов { get; задавать; } публичный интервал? FamilyDoctorId { получить; задавать; } общественные терапевты FamilyDoctor { получить; задавать; } [NotMapped] public int current { get; задавать; } [NotMapped] public int total { get; задавать; } } - person user1039134; 10.05.2015
comment
Во время настройки файла конфигурации программы не применяются - person user1039134; 10.05.2015
comment
проблема :public ICollection‹Страхование пациентов›Страхование пациентов { get; задавать; } - person user1039134; 10.05.2015
comment
@ user1039134 - Пожалуйста, отредактируйте исходный вопрос, чтобы опубликовать код, не публикуйте его в комментариях, так как он не будет правильно отформатирован. Что нам действительно нужно, так это код, который вы используете для создания прокси (на стороне клиента). То есть это должно выглядеть примерно так Service1Client client = new Service1Client();. Нам нужно увидеть, делает ли код что-то, что обходит настройки в конфигурации. - person Tim; 10.05.2015