【问题标题】:ServiceStack: The maximum array length quota (16384) has been exceeded while reading XML dataServiceStack:读取 XML 数据时已超出最大数组长度配额 (16384)
【发布时间】:2014-02-26 12:55:46
【问题描述】:

我已经设置了 ServiceStack 来为我的 MVC 4 网站提供 Web 服务。我只会将 Soap1.2 与 Web 服务一起使用,到目前为止它运行良好。

除非我尝试发送一个太大的字节数组,然后我收到以下错误:

读取 XML 数据时已超出最大数组长度配额 (16384)。可以通过更改创建 XML 阅读器时使用的 XmlDictionaryReaderQuotas 对象的 MaxArrayLength 属性来增加此配额。

在客户端,我为绑定设置了 readerQuotas,它似乎可以正确提取它,因此问题似乎出在服务器端。通常会在 web.config 中添加 Web 服务的绑定设置,但我不确定如何为 ServiceStack 执行此操作。

如果是 ServiceStack 导致了问题。

如何将大量数据发送到使用 ServiceStack 创建的 Soap1.2 Web 服务? (不幸的是使用了字节数组)

【问题讨论】:

  • 检查这是否能解决您的问题:groups.google.com/forum/#!topic/servicestack/4z6ckmKOSRo
  • 感谢 cvbarros。您是否有一个示例,说明如何在不更改 ServiceStack 代码的情况下设置 DataContractSerializer 实例?我认为它必须在配置中完成?我似乎无法设置它。
  • 您可以在应用程序初始化代码(引导程序)中简单地执行此操作:DataContractSerializer.Instance = new DataContractSerializer(new XmlDictionaryReaderQuotas { MaxStringContentLength = /* new value */ };,有效地设置单例实例。
  • 太棒了!谢谢cvbarros。我将它添加到 init 中,并将 MaxArrayLength、MaxBytesPerRead 和 MaxNameTableCharCount 设置为更大的值(我必须稍微调整一下这些值才能使它们完美),但它现在可以工作了。
  • 谢谢斯科特。我将其标记为已回答。

标签: c# servicestack soap1.2


【解决方案1】:

@cvbarros 所述,该值可以在应用程序初始化代码中指定:

DataContractSerializer.Instance = new DataContractSerializer(new XmlDictionaryReaderQuotas
{  
    MaxStringContentLength = /* new value */; 
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-05
    • 2011-03-05
    • 2011-01-30
    • 2011-02-15
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多