它是 WCF 框架的默认设置。为了从 WCF REST 服务获取更大的数据集,您需要在客户端和服务器端增加 readerQuotas,如下所示:
<binding maxBufferPoolSize="655360" maxReceivedMessageSize="655360">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
<security mode="None" />
</binding>
还可以考虑将 maxItemsInObjectGraph 设置为较大的值,如下所示:
<behavior>
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
您可以通过代码实现上述功能,如下所示:
由于您通过代码配置所有内容,您甚至可以使用代码定义 readerQuotas,如下所示:
Binding binding = new WebHttpBinding();
binding.MaxBufferSize = 2147483647;
binding.MaxReceivedMessageSize = 2147483647;
var myReaderQuotas = new XmlDictionaryReaderQuotas();
myReaderQuotas.MaxStringContentLength = 2147483647;
myReaderQuotas.MaxDepth = 2147483647;
myReaderQuotas.MaxArrayLength = 2147483647;
myReaderQuotas.MaxBytesPerRead = 2147483647;
myReaderQuotas.MaxNameTableCharCount = 2147483647;
binding.GetType().GetProperty("ReaderQuotas").SetValue(binding, myReaderQuotas, null);
如果您尝试在浏览器中获取数据,那么我想如果您使用任何 .NET 应用程序作为客户端应该可以工作,那么您需要定义与为服务器指定的相同的 readerQuotas
您可以通过将 ServiceBehavior 属性添加到您的类来通过代码设置 maxItemsInObjectGraph,如下所示:
[ServiceContract]
[ServiceBehavior(MaxItemsInObjectGraph = 2147483647)]
public class Test
{
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
CatalogResults SearchBoxADO(string requestBox);
}