Как мне определить квоты для привязки основной службы Tridion? - PullRequest
14 голосов
/ 03 апреля 2012

Я подключаюсь к основной службе Tridion с помощью System.ServiceModel.WsHttpBinding. Служба будет использоваться только аутентифицированными пользователями и, вероятно, только кодом, который я контролирую. Я должен выбрать значения для следующих

Примеры кода, которые я видел для использования основной службы, неизменно устанавливают, по крайней мере, для некоторых из них значения, превышающие значения по умолчанию, например 4 МБ. Это из-за известных проблем, когда используются другие значения, такие как значения по умолчанию?

MaxBufferPoolSize позволяет предотвратить чрезмерную сборку мусора. Это просто вопрос мониторинга GC и настройки на его основе?

MaxReceivedMessageSize, MaxArrayLength и MaxBytesPerRead предназначены для защиты от атак Dos, поэтому в моем сценарии, возможно, я смогу повысить пропускную способность, увеличив их. Неужели очень большое число поможет?

MaxNameTableCharCount, похоже, существует для предотвращения неконтролируемого роста чего-то, что вы, возможно, не захотите бесконтрольно расти, поэтому, возможно, было бы неплохо оставить значение по умолчанию.

В документации по MaxStringContentLength не указано, что произойдет, если вы превысите квоту. Предположительно ReadContentAsString каким-то образом завершится ошибкой, поэтому, возможно, это значение должно быть большим.

Итак, я должен оставить эти значения по умолчанию? Это вызовет у меня проблемы? Должен ли я увеличить их до больших значений? Поможет ли это с пропускной способностью и т. Д., Или это может вызвать другие проблемы?

Ответы [ 3 ]

7 голосов
/ 13 апреля 2012

Общее правило состоит в том, чтобы эти значения были как можно меньшими, достаточными для работы вашего кода.Если вы посмотрите на конфигурацию по умолчанию, которая поставляется с CoreService.dll, то некоторые значения будут увеличены.

Например, если вы ожидаете получить большие списки XML (или результаты поиска) - вы должны увеличить MaxReceivedMessageSize.Имейте в виду, что вы можете контролировать размер списка, который вы получите, используя свойство фильтра BaseColumns.

Если вы предпочитаете использовать методы GetList, GetSystemWideList и GetSearchResults по сравнению с их XML-аналогами, вам, вероятно, придется увеличить ReaderQuotas.MaxArrayLength вместе с MaxReceivedMessageSize.Но учтите, что большие массивы будут храниться в памяти.

Я не уверен, что вы захотите увеличить какое-либо из этих значений, пока не достигнете предела.WCF неплохо показывает вам параметр, который нужно настроить.

6 голосов
/ 03 апреля 2012

Боюсь, это не совсем ответ на ваши вопросы ... Но, исходя из моего опыта, я увеличил значения до значений, превышающих предложенные значения по умолчанию. Я использовал 4MB, как вы уже предложили. Это было именно потому, что я столкнулся с ошибкой во время связи с основной службой. Они были связаны с размерами запроса / ответа, превышающими выделенные размеры.

Более того, в случае транзакционности Core Service я видел больше таких исключений. Кажется, что размеры запросов / ответов увеличиваются при использовании транзакций. В моем случае я создавал партию Компонентов в одной большой транзакции. Если создать один компонент не удалось, я бы откатил всю транзакцию.

Надеюсь, это поможет.

4 голосов
/ 17 апреля 2012

Я недавно экспериментировал с базовой службой и видел исключение XmlReader при попытке открыть большой TBB (фрагмент C #) с помощью следующего кода:

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

    //More code
}

System.Xml.XmlException: максимальная квота длины содержимого строки (8192) была превышена при чтении данных XML. Эта квота может быть увеличивается путем изменения свойства MaxStringContentLength на Объект XmlDictionaryReaderQuotas, используемый при создании программы чтения XML. Строка 1, позиция 9201.

Как говорится в сообщении, мне пришлось поднять ReaderQuotas.MaxStringContentLength, чтобы это исправить. Поэтому, если вы работаете с любыми строительными блоками, содержимое которых превышает 8 КБ, ожидайте эту ошибку.

...