【发布时间】:2012-04-16 12:11:29
【问题描述】:
我正在使用 System.ServiceModel.WsHttpBinding 连接到 Tridion 核心服务。该服务将仅由经过身份验证的用户使用,并且可能仅由我控制的代码使用。我必须为以下选择值
- MaxBufferPoolSize(默认 524,288 字节)
- MaxReceivedMessageSize(默认 65,536 字节)
- ReaderQuotas.MaxArrayLength(默认 16384 字节)
- ReaderQuotas.MaxBytesPerRead(默认 4096 字节)
- ReaderQuotas.MaxNameTableCharCount(默认 16384 字节)
- ReaderQuotas.MaxStringContentLength(默认 8192 字节)
我看到的使用核心服务的代码示例总是将其中至少一些设置为大于默认值的值,例如 4Mb。这是因为使用其他值(例如默认值)时的已知问题吗?
MaxBufferPoolSize 可以让您防止过多的垃圾收集。这仅仅是监控 GC 并在此基础上进行调整的问题吗?
MaxReceivedMessageSize、MaxArrayLength 和 MaxBytesPerRead 是用来防御 Dos 攻击的,所以在我的场景中,也许我可以通过增加这些来提高吞吐量。一个很大的数字会有帮助吗?
MaxNameTableCharCount 似乎可以防止您可能不想不受控制地增长的东西不受控制地增长,所以也许保留默认值是一件好事。
有关 MaxStringContentLength 的文档没有指定如果超出配额会发生什么。大概 ReadContentAsString 会以某种方式失败,所以也许这个值应该很大。
那么 - 我应该将这些值保留为默认值吗?这会给我带来麻烦吗?我应该将它们增加到较大的值吗?这会有助于提高吞吐量等,还是更有可能导致其他问题?
【问题讨论】:
-
阅读了一些答案,我现在觉得调整这些设置似乎是如此必要(至少对于生产工作),也许零配置实现(即仅代码)可能是一个反模式。想法?