wcf - servicio - los metadatos contienen una referencia que no se puede resolver
¿Cómo debo decidir las cuotas para el enlace del servicio central de Tridion? (3)
Me temo que esto no es realmente una respuesta a sus preguntas ... Pero, según mi experiencia, aumenté los valores a más de los valores predeterminados sugeridos. Usé 4MB como ya sugirió. Esto fue porque estaba experimentando un error al comunicarme con el servicio principal. Se relacionaron con los tamaños de solicitud / respuesta que exceden los tamaños asignados.
Además, en el caso de transaccionalidad de Core Service, vi más de estas excepciones. Parece que los tamaños de las solicitudes / respuestas aumentan bastante cuando se usan las transacciones. En mi caso, estaba creando un lote de componentes en una gran transacción. Si un componente no pudo crear, revertiría toda la transacción.
Espero que esto ayude.
Me estoy conectando al servicio central de Tridion usando System.ServiceModel.WsHttpBinding. El servicio solo será utilizado por usuarios autenticados, y probablemente solo por código que yo controle. Tengo que elegir valores para lo siguiente
- MaxBufferPoolSize (predeterminado 524,288 bytes)
- MaxReceivedMessageSize (predeterminado 65.536 bytes)
- ReaderQuotas. MaxArrayLength (predeterminado 16384 bytes)
- ReaderQuotas. MaxBytesPerRead (predeterminado 4096 bytes)
- ReaderQuotas. MaxNameTableCharCount (predeterminado 16384 bytes)
- ReaderQuotas. MaxStringContentLength (predeterminado 8192 bytes)
Los ejemplos de código que he visto para usar el servicio central establecen invariablemente al menos algunos de estos valores en valores superiores a los valores predeterminados, por ejemplo 4Mb. ¿Esto se debe a problemas conocidos cuando se utilizan otros valores, como los valores predeterminados?
MaxBufferPoolSize está ahí para permitirle evitar colecciones de basura excesivas. ¿Es esto simplemente una cuestión de monitorear los GC y la afinación basados en eso?
MaxReceivedMessageSize, MaxArrayLength y MaxBytesPerRead están ahí para defenderse de los ataques de Dos, por lo que en mi caso, quizás pueda mejorar el rendimiento al aumentarlos. ¿Ayudaría un número realmente grande?
MaxNameTableCharCount parece estar ahí para evitar el crecimiento incontrolado de algo que quizás no quieras que crezca sin control, por lo que quizás dejar el valor predeterminado sea algo bueno.
La documentación en MaxStringContentLength no especifica qué sucede si excedes la cuota. Es de suponer que ReadContentAsString fallará de alguna manera, por lo que quizás este valor sea grande.
Entonces, ¿debería dejar estos valores en sus valores predeterminados? ¿Eso me causará problemas? ¿Debo aumentarlos a valores grandes? ¿Eso ayudará con el rendimiento, etc., o es más probable que cause otros problemas?
La regla general es tener estos valores lo más pequeños posible, lo suficiente para que el código funcione. Si echa un vistazo a la configuración predeterminada que se envía con CoreService.dll, tiene algunos de los valores aumentados.
Por ejemplo, si espera obtener listas XML grandes (o resultados de búsqueda), debe aumentar MaxReceivedMessageSize
. Tenga en cuenta que tiene control sobre el tamaño de la lista que obtendrá utilizando la propiedad BaseColumns
de un filtro.
Si prefiere usar los métodos GetList, GetSystemWideList y GetSearchResults sobre sus contrapartes XML, probablemente tendrá que aumentar ReaderQuotas.MaxArrayLength
junto con MaxReceivedMessageSize
. Pero tenga en cuenta que las matrices grandes se almacenarán en la memoria.
No estoy seguro de que desee aumentar ninguno de estos valores hasta que alcance el límite. WCF es bastante bueno al señalarte el parámetro que tienes que ajustar.
He estado experimentando con el servicio principal recientemente y he visto una excepción XmlReader al intentar abrir un TBB grande (fragmento C #) usando el siguiente código:
using(var client = new CoreService.CoreService2010Client())
{
var item = client.Read(tcmId,new ReadOptions());
//More code
}
System.Xml.XmlException: la cuota máxima de longitud de contenido de cadena (8192) se ha excedido al leer datos XML. Esta cuota se puede aumentar cambiando la propiedad MaxStringContentLength en el objeto XmlDictionaryReaderQuotas utilizado al crear el lector XML. Línea 1, posición 9201.
Como dice el mensaje, tuve que subir el ReaderQuotas.MaxStringContentLength para solucionarlo. Por lo tanto, si está trabajando con cualquier Building Blocks que tenga un contenido superior a 8 KB, espere este error.