我们遇到以下错误:
将类型的对象反序列化时发生错误
Project.ModelType。最大字符串内容长度配额(8192)具有
读取XML数据时超出限制。此配额可能会增加
更改MaxStringContentLength属性
创建XML阅读器时使用的XmlDictionaryReaderQuotas对象。
有大量的文章,论坛帖子等,它们显示了如何增加WCF服务的MaxStringContentLength
大小。我遇到的问题是所有这些示例都使用Binding,而我们没有使用。我们的服务项目的web.config
中没有设置绑定或端点配置。我们使用的是.cs文件,而不是.svc文件。我们已经实现了RESTful WCF服务。
在客户端,我们使用WebChannelFactory
调用我们的服务。
ASP.NET 4.0
有任何想法吗?
最佳答案
您确实具有绑定,只是WebChannelFactory
为您自动设置了绑定。事实证明,此工厂始终创建带有WebHttpBinding
的终结点,因此您可以在从中创建第一个通道之前更改绑定属性-请参见下面的示例。
public class StackOverflow_7013700
{
[ServiceContract]
public interface ITest
{
[OperationContract]
string GetString(int size);
}
public class Service : ITest
{
public string GetString(int size)
{
return new string('r', size);
}
}
public static void Test()
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
WebServiceHost host = new WebServiceHost(typeof(Service), new Uri(baseAddress));
host.Open();
Console.WriteLine("Host opened");
WebChannelFactory<ITest> factory = new WebChannelFactory<ITest>(new Uri(baseAddress));
(factory.Endpoint.Binding as WebHttpBinding).ReaderQuotas.MaxStringContentLength = 100000;
ITest proxy = factory.CreateChannel();
Console.WriteLine(proxy.GetString(100).Length);
try
{
Console.WriteLine(proxy.GetString(60000).Length);
}
catch (Exception e)
{
Console.WriteLine("{0}: {1}", e.GetType().FullName, e.Message);
}
((IClientChannel)proxy).Close();
factory.Close();
Console.Write("Press ENTER to close the host");
Console.ReadLine();
host.Close();
}
}
关于asp.net - WCF + REST,增加MaxStringContentLength,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7013700/