2012-04-02 9 views
14

Mi collego al servizio principale di Tridion utilizzando System.ServiceModel.WsHttpBinding. Il servizio verrà utilizzato solo da utenti autenticati e probabilmente solo dal codice che controllo. Devo scegliere i valori per le seguentiCome devo decidere le quote per il bind del servizio principale di Tridion?

Gli esempi di codice ho visto per l'utilizzo del servizio principale invariabilmente impostato almeno alcuni di questi per valori maggiori rispetto ai valori predefiniti, ad esempio 4Mb. Ciò è dovuto a problemi noti quando vengono utilizzati altri valori, ad esempio i valori predefiniti?

MaxBufferPoolSize consente di evitare eccessive raccolte di dati inutili. Si tratta semplicemente di monitorare i GC e l'ottimizzazione basata su questo?

MaxReceivedMessageSize, MaxArrayLength e MaxBytesPerRead sono lì per difendersi dagli attacchi Dos, quindi nel mio scenario, forse posso migliorare il throughput aumentandoli. Un numero davvero grande potrebbe aiutare?

MaxNameTableCharCount sembra essere lì per impedire la crescita incontrollata di qualcosa che potresti non voler crescere in modo incontrollato, quindi forse lasciare il default sarebbe una buona cosa.

La documentazione su MaxStringContentLength non specifica cosa accade se si supera la quota. Presumibilmente ReadContentAsString fallirà in qualche modo, quindi forse questo valore dovrebbe essere grande.

Quindi, dovrei lasciare questi valori ai loro valori predefiniti? Questo mi causerà problemi? Dovrei aumentarli a grandi valori? Questo aiuterà con il throughput ecc. O è più probabile che causi altri problemi?

+0

Leggendo alcune delle risposte, ho ora la sensazione che l'ottimizzazione di queste impostazioni sia così necessaria (almeno per il lavoro di produzione) che forse le implementazioni di zero-config (solo il codice) potrebbero essere un anti-pattern. Pensieri? –

risposta

7

La regola generale è di avere questi valori il più piccoli possibile, quanto basta per far funzionare il codice. Se dai un'occhiata alla configurazione di default che viene fornita con CoreService.dll, alcuni dei valori sono aumentati.

Ad esempio, se si prevede di ottenere elenchi XML di grandi dimensioni (o risultati di ricerca), è necessario aumentare MaxReceivedMessageSize.Tieni presente che hai il controllo sulle dimensioni dell'elenco che utilizzerai con la proprietà BaseColumns di un filtro.

Se si preferisce utilizzare GetList, GetSystemWideList e metodi GetSearchResults sopra le loro controparti XML, probabilmente si dovrà aumentare ReaderQuotas.MaxArrayLength insieme MaxReceivedMessageSize. Ma tieni presente che gli array di grandi dimensioni verranno archiviati nella memoria.

Non sono sicuro di voler aumentare nessuno di questi valori finché non si raggiunge il limite. WCF è abbastanza buono con riferimento al parametro che devi regolare.

+0

Mentre acconsento a mantenere le cose il più piccole possibile e che è abbastanza facile leggere da un messaggio di errore che dimensione è necessario aumentare, è piuttosto inaccettabile per la maggior parte dei clienti che un'estensione smetta di funzionare all'improvviso. Il che mi fa scegliere per le impostazioni massime in quanto attualmente non ho informazioni su quale possa essere la dimensione prevista di alcune risposte. –

+0

Il problema con i sistemi CMS è che è piuttosto difficile prevedere quanto grande sarà il contenuto scritto dagli autori. Se è necessario modificare e salvare un componente con un campo rich text, ad esempio, non si può dire quanto sarà grande. Quindi tendo a scegliere i valori nella fascia alta dello spettro .. – Quirijn

+0

Quindi stai dicendo che non c'è una risposta "corretta"? In tal caso, come procederesti nel processo di determinazione di una buona risposta per il tuo scenario. Per quale di questi valori useresti un valore non predefinito come tuo punto di partenza, e quale sarebbe? –

6

Ho paura che questa non sia davvero una risposta alle tue domande ... Ma, dalla mia esperienza, ho aumentato i valori a più dei valori predefiniti suggeriti. Ho usato 4 MB come già suggerito. Ciò era dovuto al fatto che stavo riscontrando un errore durante la comunicazione con il servizio principale. Erano correlati alle dimensioni della richiesta/risposta superiori alle dimensioni assegnate.

Inoltre, nel caso della transazione del servizio principale, ho visto più di queste eccezioni. Sembra che le dimensioni della richiesta/risposta aumentino un po 'quando si usano le transazioni. Nel mio caso, stavo creando una serie di componenti in un'unica grande transazione. Se un componente non è riuscito a creare, eseguirò il rollback dell'intera transazione.

Spero che questo aiuti.

+0

Grazie Mihai. Sarebbe utile sapere quali erano le eccezioni, in quanto ciò potrebbe indicare quale quota/impostazione veniva superata. –

+0

concordato. Guarderò a riprodurli. Non li ricordo a memoria. –

+0

una cosa che ho notato è che la dimensione di una determinata risposta può variare dopo l'installazione di un'estensione, molto probabilmente legata all'utilizzo di AppData (il Generatore di comunità, per esempio, ti darà una risposta notevolmente più grande). Quindi, mentre accetto la regola generale di impostarli nel modo più piccolo possibile, sfortunatamente non abbiamo chiarezza sulla dimensione effettiva di ciò che la risposta può essere per determinati elementi. Pertanto, per evitare errori in futuro, potresti probabilmente volerli impostare il più grande possibile. –

4

ho avuto modo di sperimentare con il servizio principale di recente e hanno visto un'eccezione XmlReader si verificano quando si tenta di aprire un grande TBB (C# frammento) utilizzando il seguente codice:

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

    //More code 
} 

System.Xml. XmlException: il limite massimo della lunghezza del contenuto della stringa (8192) è stato superato durante la lettura dei dati XML. Questa quota può essere aumentata di modificando la proprietà MaxStringContentLength sull'oggetto XmlDictionaryReaderQuotas utilizzato durante la creazione del lettore XML. Linea 1, posizione 9201.

Come si dice nel messaggio, ho dovuto il ReaderQuotas.MaxStringContentLength a risolvere questo problema. Quindi, se stai lavorando con blocchi predefiniti che hanno contenuti superiori a 8 KB, ti aspetti questo errore.

Problemi correlati