У меня есть метод службы WCF, который я реализовал, который получает IEnumerable
[OperationContract]
List<Item> GetItems(DateTime sinceDate, IEnumerable<Guid> idList);
Метод работает должным образом при передаче IEnumerable размером 1000 или меньше; служба возвращается с ожидаемым ответом. В какой-то момент переданный массив слишком велик (видно на 2000 элементов), и выдается System.ServiceModel.ProtocolException
, "{"The remote server returned an unexpected response: (400) Bad Request."}"
Я не уверен, что управляет ограничением размера массива. Я знаю о разделе readerQuotas привязки, а для параметра maxArrayLength установлено значение по умолчанию 16384. Размер моего буфера достаточно велик, но я не уверен, почему вызов службы не работает. Есть ли ограничение на basicHttpBinding для переданных размеров массива? Что нужно изменить в моей конфигурации, чтобы я мог передавать большие массивы?
Вот мой app.config на стороне клиента. Серверная сторона эквивалентна.
<binding name="BasicHttpBinding_IMyService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="20000000" maxBufferPoolSize="524288" maxReceivedMessageSize="20000000"
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>