gpt4 book ai didi

json - HTTP 数据包中可以返回的数量是否有限制?或者这是 WCF JSON 限制?

转载 作者:可可西里 更新时间:2023-11-01 16:22:13 27 4
gpt4 key购买 nike

我正在使用自托管(不在 IIS 中)WCF 数据服务,该服务通过 GET 接收 REST 调用并返回 JSON。

我可以返回 3800 条记录,但是当我转到 3900 时它失败了。如果我没有收到来自 WCF 或 .NET 的错误或警告事件,应用程序将继续完美运行以应对新请求。它只是静静地丢弃结果,并没有将数据序列化为 JSON:

这是 3800 条记录的返回值:

HTTP/1.1 200 OK
Content-Length: 1958039
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Access-Control-Allow-Origin: *
Date: Thu, 07 Jun 2012 14:28:39 GMT

{"count":3800,"results":[{"bbox":"18.57544760000000,- ......

这是服务契约(Contract):

    [OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
CatalogResults SearchBoxADO(string requestBox);

在调试器中,SearchBoxADO 返回 3900 条记录没有问题,但它没有被序列化,也没有生成 HTTP 响应(Fiddler 说没有响应请求)。

最佳答案

它是 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);
}

关于json - HTTP 数据包中可以返回的数量是否有限制?或者这是 WCF JSON 限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10934189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com