我使用System.ServiceModel.WsHttpBinding连接到Tridion核心服务。该服务仅供经过身份验证的用户使用,可能仅由我控制的代码使用。我必须为以下
选择值我看到的使用核心服务的代码示例总是将其中一些设置为大于默认值的值,例如4Mb。这是因为在使用其他值(例如默认值)时存在已知问题吗?
MaxBufferPoolSize允许您防止过多的垃圾收集。这只是监控GC和基于此调整的问题吗?
MaxReceivedMessageSize,MaxArrayLength和MaxBytesPerRead可以防御Dos攻击,所以在我的场景中,也许我可以通过增加这些来提高吞吐量。真的有大量帮助吗?
MaxNameTableCharCount似乎是为了防止你可能不想不受控制地增长的东西的不受控制的增长,所以也许保留默认值是一件好事。
MaxStringContentLength上的文档没有说明超出配额会发生什么。据推测,ReadContentAsString会以某种方式失败,因此这个值可能很大。
那么 - 我应该将这些值保留为默认值吗?这会给我带来麻烦吗?我应该将它们增加到大值吗?这有助于吞吐量等,还是更有可能导致其他问题?
答案 0 :(得分:7)
一般规则是让这些值尽可能小,足以让代码工作。如果您将查看CoreService.dll附带的默认配置,它会增加一些值。
例如,如果您希望获得大型XML列表(或搜索结果),则应增加MaxReceivedMessageSize
。请注意,您可以使用过滤器的BaseColumns
属性控制列表的大小。
如果您希望在其XML对应项上使用GetList,GetSystemWideList和GetSearchResults方法,则可能必须与ReaderQuotas.MaxArrayLength
一起增加MaxReceivedMessageSize
。但请注意,大型数组将存储在内存中。
我不确定你想要增加任何这些值,直到你达到极限。 WCF非常适合指向你必须调整的参数。
答案 1 :(得分:6)
我担心这不是你问题的真正答案......但是,根据我的经验,我将值增加到超过默认值。我已经建议使用4MB。这是因为我在与核心服务进行通信时遇到了错误。它们与超出分配大小的请求/响应大小有关。
此外,在Core Service事务性的情况下,我看到了更多这些异常。在使用事务时,请求/响应的大小似乎增加了很多。就我而言,我在一个大型交易中创建了一批组件。如果一个组件无法创建,我将回滚整个事务。
希望这有帮助。
答案 2 :(得分:4)
我最近一直在尝试使用Core Service,并且在尝试使用以下代码打开大型TBB(C#片段)时发生了XmlReader异常:
using(var client = new CoreService.CoreService2010Client())
{
var item = client.Read(tcmId,new ReadOptions());
//More code
}
System.Xml.XmlException:读取XML数据时已超出最大字符串内容长度配额(8192)。这个配额可能是 通过更改上的MaxStringContentLength属性来增加 创建XML阅读器时使用的XmlDictionaryReaderQuotas对象。 第1行,第9201位。
正如消息中所说,我不得不将ReaderQuotas.MaxStringContentLength解决这个问题。因此,如果您正在使用任何内容大于8KB的构建块,则会出现此错误。