检查WCF是否有非常大的json字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查WCF是否有非常大的json字符串相关的知识,希望对你有一定的参考价值。
我需要在同步过程中发送超过20000篇文章,此过程由WCF以JSON格式发送。但序列化文章列表告诉我字符串对于该过程来说太大了。
我试过以下方式:
在我的REGEDIT中增加以下路径“Computer HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services HTTP Parameters”中的值“MaxFieldLength”和“MaxRequestBytes”
在我的Web配置中添加以下标记
<bindings>
<basicHttpBinding>
<binding maxBufferPoolSize = "2147483647" maxBufferSize = "2147483647" maxReceivedMessageSize = "2147483647" messageEncoding = "Text">
<readerQuotas maxDepth = "2000000" maxStringContentLength = "2147483647" maxArrayLength = "2147483647" maxBytesPerRead = "2147483647" maxNameTableCharCount = "2147483647" />
</ binding>
</ basicHttpBinding>
</ bindings>
另外,尝试使用scvutil urlServicio / Service1.svc生成Service类
我使用以下属性:
EndpointAddress endPoint = new EndpointAddress("urlServicio/Service1.svc");
BasicHttpBinding binding = CreateBasicHttp();
Service1Client cliente = new Service1Client(binding, endPoint);
private static BasicHttpBinding CreateBasicHttp()
{
BasicHttpBinding binding = new BasicHttpBinding
{
Name = "BasicHttpBinding_IService1",
MaxBufferSize = int.MaxValue,
MaxReceivedMessageSize = long.MaxValue
};
TimeSpan timeout = new TimeSpan(0, 0, 120);
binding.SendTimeout = timeout;
binding.OpenTimeout = timeout;
binding.ReceiveTimeout = timeout;
binding.Security.Mode = BasicHttpSecurityMode.None;
return binding;
}
但是他没有读给我绑定或端点
答案
您可能遇到与数据协定序列化程序相关的上限。检查这是否适用于您。
<system.runtime.serialization>
<dataContractSerializer maxItemsInObjectGraph="100000" />
</system.runtime.serialization>
另一组限制和上面没有提到的一些限制是您可能在Web服务器(IIS)中遇到的限制。上面的配置和您发布的配置与WCF和.NET序列化有关。下面的文章显示了Web服务器生成的大写字母。
Limits you can set in the System.Webserver config。
你从上面错过的另一件事是MaxBufferPoolSize
以上是关于检查WCF是否有非常大的json字符串的主要内容,如果未能解决你的问题,请参考以下文章