2012-04-02 53 views
14

我使用System.ServiceModel.WsHttpBinding连接到Tridion核心服务。该服务只能由经过身份验证的用户使用,并且可能只能由我控制的代码使用。我必须选择值以下我应该如何确定Tridion核心服务绑定的配额?

我看到了使用总是设定中的至少一些这些为比默认值更大的值,例如4Mb的核心服务的代码示例。这是因为使用其他值(例如默认值)时存在已知问题?

MaxBufferPoolSize允许您防止过多的垃圾回收。这只是一个监测GC并基于此进行调整的问题?

MaxReceivedMessageSize,MaxArrayLength和MaxBytesPerRead有防御Dos攻击,所以在我的情况下,也许我可以通过增加这些来提高吞吐量。会有很多人帮忙吗?

MaxNameTableCharCount似乎有防止一些不可控的增长,你可能不希望不受控制地增长,所以也许保留默认将是一个很好的事情。

上MaxStringContentLength的文件没有指定如果超出配额会发生什么。大概ReadContentAsString会以某种方式失败,所以也许这个值应该很大。

所以 - 我应该将这些值保留为默认值吗?这会导致我的问题吗?我应该增加他们到大值?这将有助于吞吐量等,还是更可能导致其他问题?

+0

通过阅读一些答案,我现在感觉到调整这些设置似乎是非常必要的(至少对于生产工作来说),也许零配置实现(即仅代码)可能是反模式。思考? – 2012-04-19 18:34:31

回答

7

的一般规则是有尽可能小的这些值,刚好够你的代码工作。如果您将查看CoreService.dll附带的默认配置,则会增加一些值。

例如,如果你希望得到大的XML列表(或搜索结果) - 你应该增加MaxReceivedMessageSize。请记住,您可以控制使用过滤器的BaseColumns属性的列表大小。

如果您希望通过其XML对应方法使用GetList,GetSystemWideList和GetSearchResults方法,则可能必须将ReaderQuotas.MaxArrayLengthMaxReceivedMessageSize一起增加。但请注意,大数组将被存储在内存中。

我不确定你想增加任何这些值,直到你达到极限。 WCF很适合将您指向需要调整的参数。

+0

虽然我同意尽量减少事情的发生,并且从您必须增加大小的错误消息中读取数据非常容易,但对于大多数客户而言,突然停止工作是相当不可接受的。这使我选择最大的设置,因为我目前没有关于某些响应的预期大小的信息。 – 2012-04-13 13:18:09

+0

CMS系统的问题在于很难预测作者编写的内容的大小。例如,如果您需要修改并保存具有丰富文本字段的组件,则无法说明它有多大。所以我倾向于选择高端的价值观。 – Quirijn 2012-04-13 20:30:16

+0

那么你是说没有“正确的”答案?如果是这样,你会如何去确定一个适合自己情况的好答案。对于这些值中的哪一个,您将使用非默认值作为您的起点,它会是什么? – 2012-04-17 15:53:30

6

恐怕这是不是一个真正的回答你的问题......但是,从我的经验,我增加值超过默认值建议。你已经建议使用4MB。这是因为我在与Core Service进行通信时遇到了错误。它们与请求/响应大小超过分配的大小有关。

此外,在核心服务事务性的情况下,我看到更多的这些异常。使用事务处理时,请求/响应的大小似乎有所增加。就我而言,我在一个大交易中创建了一批组件。如果一个组件未能创建,我会回滚整个事务。

希望这会有所帮助。

+0

谢谢Mihai。知道例外情况会有所帮助,因为这可能表明哪些配额/设置已被超出。 – 2012-04-02 20:35:49

+0

同意。我会考虑再现他们。我不记得他们的心。 – 2012-04-02 20:39:51

+0

我注意到的一件事情是,在安装扩展程序后,某个响应的大小可能会有所不同,这很可能与使用AppData有关(例如,社区生成器会给您一个相当大的响应)。因此,虽然我同意将这些设置的尽可能小的一般规则,但不幸的是,我们并不清楚某些项目的响应的实际大小。因此,为了防止将来发生错误,您可能需要尽可能地设置它们。 – 2012-04-13 13:15:46

4

我最近一直在尝试与核心服务,并看到尝试使用下面的代码打开了一个大的TBB(C#片段)当一个XmlReader异常发生:

using(var client = new CoreService.CoreService2010Client()) 
{ 
    var item = client.Read(tcmId,new ReadOptions()); 

    //More code 
} 

的System.Xml。 XmlException:读取XML数据时已超出最大字符串内容长度配额(8192)。通过更改创建XML阅读器时使用的 XmlDictionaryReaderQuotas对象上的MaxStringContentLength属性,可以增加此配额,其值为 。 1号线位置9201

因为它在邮件中说,我只好起来ReaderQuotas.MaxStringContentLength来解决这个问题。因此,如果您正在处理内容大于8KB的任何Building Block,则会出现此错误。

相关问题