CORRECCIÓN: el almacenamiento en caché del catálogo no se usa cuando usa la clase CategoryConfiguration junto con la propiedad CategoryConfiguration. ChildProducts. SqlWhereClause en Commerce Server 2009

Se aplica a: Commerce Server 2009 EnterpriseCommerce Server 2009 Standard

Síntomas


Imagine la siguiente situación:
  • Habilite el almacenamiento en caché en el sistema de catálogo en el archivo Web. config para un sitio web que ejecute Microsoft Commerce Server 2009.
  • La clase CategoryConfiguration se usa para especificar la configuración precargada de un objeto Category .
  • La propiedad LoadChildProducts se establece en true.
  • Especifique una cláusula de filtrado en la propiedad CategoryConfiguration. ChildProducts. SqlWhereClause .
  • Use el método GetCategory o el método GetProduct para recuperar categorías secundarias o productos secundarios del objeto CategoryConfiguration .
En este escenario, el almacenamiento en caché del catálogo no se puede usar para recuperar las categorías secundarias ni los productos secundarios. Por lo tanto, el sitio web puede experimentar una disminución de rendimiento cuando hay mucha carga. Por ejemplo, tiene un sitio web que usa el catálogo de ejemplo de AdventureWorks. Ejecute el siguiente ejemplo de código para recuperar el nombre para mostrar de un objeto Category . En este ejemplo, el código consulta los datos de la base de datos del catálogo cada vez, aunque el almacenamiento en caché del catálogo está habilitado.
CategoryConfiguration categoryConfiguration = new CategoryConfiguration();  categoryConfiguration.LoadChildProducts = true;  categoryConfiguration.ChildProducts.SqlWhereClause = "[IsVisible] = 1";  var catalogContext = CommerceContext.Current.CatalogSystem.CatalogContext;  Category category = catalogContext.GetCategory("AdventureWorks Catalog", "SleepingBags");  Response.Write(category.DisplayName);
Nota Este mismo problema se produce al usar el método GetProduct en el ejemplo de código. Microsoft proporciona ejemplos de programación para la ilustración únicamente, sin ninguna garantía ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. En este artículo se da por supuesto que ya conoce el lenguaje de programación que se muestra, así como las herramientas empleadas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden ayudar a explicar la funcionalidad de un procedimiento en particular. Sin embargo, no modificarán estos ejemplos para proporcionar una funcionalidad agregada ni crear procedimientos que cumplan con sus necesidades específicas.

Resolución


Para resolver este problema, aplique este Hotfix al servidor que ejecuta Commerce Server 2009. después de aplicar este hotfix, se permite el almacenamiento en caché de los productos secundarios y las categorías secundarias en la caché del catálogo cuando se usa un filtro "whereClause". De forma predeterminada, cualquier consulta que contiene una cláusula WHERE omite la caché del catálogo. Para habilitar el almacenamiento en caché, debe agregar una sección "cacheFilter" y configurarlo correctamente en el archivo Web. config para el sitio web de Commerce Server. La sección "cacheFilter" proporciona los siguientes atributos:
  • El atributo "whereClause".
  • El atributo "exactMatch".
Puede usar una de las siguientes opciones para administrar la cláusula WHERE que debe almacenarse en caché:
  • Especifique la cláusula WHERE completa en el atributo "whereClause" y, a continuación, establezca el atributo "exactMatch" en true.
  • Especifique una cláusula WHERE en el atributo "whereClause" y, a continuación, establezca el atributo "exactMatch" en false. Esto permite que Commerce Server almacene en caché cualquier cláusula WHERE que tenga una coincidencia parcial con lo que se especificó en el archivo de configuración.
Nota El atributo "exactMatch" es opcional. De forma predeterminada, si omite el atributo "exactMatch", se establece en true. En el ejemplo siguiente se muestra cómo modificar la sección de configuración. Este ejemplo también muestra el uso del atributo "exactMatch".
<catalog><catalogSets .../>      <cache enable="true">        <cacheFilter>          <add whereClause="WHERE [ListPrice] between 0 AND 1000'" />          <add whereClause="isActive" exactMatch="False" />          ...         </cacheFilter>       </cache> </catalog>
Reglas para definir el valor de atributo "whereClause" en la sección cacheFilterNota el valor del atributo "whereClause" de la sección "cacheFilter" es una coincidencia de cadena. Por ejemplo, deben seguirse las siguientes reglas:
  • Solo se permiten un espacio en blanco entre las palabras clave del valor de atributo "whereClause". Por ejemplo:
    • whereClause = "IdProducto like ' AW2% '" no coincide
    • whereClause = "ProductID like ' AW2% '" coincide
  • No se permiten espacios en blanco al principio o al final del valor de atributo "whereClause" si hay un valor de varias palabras clave. Por ejemplo:
    • whereClause = "IdProducto like ' AW2% '" no coincide
    • whereClause = "IdProducto like ' AW2% '" no coincide
  • El valor de comillas simples en el atributo "whereClause" debe ser totalmente coincidente. Por ejemplo, supongamos que la consulta de búsqueda es "IdProducto like ' AW2% '"; en este caso,
    • whereClause = "IdProducto like ' AW2 ' no es una coincidencia
    • whereClause = "IdProducto like ' AW2% ' es una coincidencia

Más información sobre este Hotfix

Información de la revisión

Hay disponible una revisión para la que Microsoft proporciona soporte técnico. Sin embargo, este Hotfix está pensado para corregir solo el problema descrito en este artículo. Aplique este Hotfix solo a los sistemas que experimentan el problema descrito en este artículo. Este Hotfix puede recibir pruebas adicionales. Por tanto, si no se ve gravemente afectado por este problema, le recomendamos que espere a la próxima actualización de software que contiene este Hotfix. Si la revisión está disponible para descargarla, hay una sección "descarga de la revisión disponible" en la parte superior de este artículo de Knowledge base. Si esta sección no aparece, póngase en contacto con el servicio de asistencia al cliente de Microsoft para obtener la revisión. Nota Si se producen problemas adicionales o se necesita cualquier solución de problemas, es posible que tenga que crear una solicitud de servicio independiente. Los costos habituales de soporte técnico se aplicarán a las preguntas y problemas de soporte técnico adicionales que no reúnan los requisitos para esta revisión específica. Para obtener una lista completa de los números de teléfono del servicio de asistencia al cliente de Microsoft o para crear una solicitud de servicio independiente, visite el siguiente sitio web de Microsoft: Nota El formulario "descarga de la revisión disponible" muestra los idiomas para los que está disponible la revisión. Si no ve su idioma, es porque una revisión no está disponible para ese idioma.

Requisitos previos

Para aplicar este hotfix, debe tener instalado Commerce Server 2009 o el paquete de plantillas de Commerce Server 2009 para SharePoint 2010.

Información de reinicio

No es necesario que reinicie el equipo después de aplicar este Hotfix. Sin embargo, debe reiniciar Internet Information Services (IIS) después de aplicar este Hotfix. Para reiniciar IIS, abra una ventana del símbolo del sistema, escriba el siguiente comando y, a continuación, presione ENTRAR:
iisreset/restart
Nota Esta opción detiene todos los servicios de IIS que se están ejecutando y, a continuación, los reinicia.

Información de archivo

La versión en Inglés de esta revisión tiene los atributos de archivo (o atributos de archivo posteriores) que aparecen en la tabla siguiente. Las fechas y horas de estos archivos se expresan de acuerdo con la hora universal coordinada (UTC). Cuando vea la información del archivo, esta se convertirá a la hora local. Para conocer la diferencia entre la hora UTC y la hora local, use la pestaña Zona horaria del elemento Fecha y hora del Panel de control.
Para todas las versiones compatibles de Commerce Server 2009
Nombre de archivoVersión del archivoTamaño del archivoFechaHoraPlataforma
Cs2009hotfixhelper.exe6.0.4171.2713.08018-Aug-201011:11x86
Microsoft.catalogserver.dll6.0.4171.27756.52018-Aug-201011:11x86
Microsoft.commerceserver.runtime.dll6.0.4171.27850.74418-Aug-201011:11x86
Microsoft.commerceserver.catalog.dll6.0.4171.27961,33618-Aug-201011:35x86
Para todas las versiones compatibles de Commerce Server 2009 Template Pack for SharePoint 2010
Nombre de archivoVersión del archivoTamaño del archivoFechaHoraPlataforma
Cspatchhelper.exe6.0.4171.50417.16830-Nov-201008:16x86
Microsoft.catalogserver.dll6.0.4171.504756.52030-Nov-201008:16x86
Microsoft.commerceserver.runtime.dll6.0.4171.504850.74430-Nov-201008:16x86
Microsoft.commerceserver.catalog.dll6.0.4171.504961,33629-Nov-201014:13x86

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "Se aplica a".

Más información


Tenga en cuenta lo siguiente durante la desinstalación de la revisión:
  1. Se puede mostrar una ventana de diálogo. En la ventana de diálogo se advierte que es necesario cerrar algunas aplicaciones para poder continuar con el proceso de desinstalación. En esta situación, acepte la selección predeterminada y haga clic en el botón Aceptar para continuar.
  2. Después de desinstalar la revisión para Commerce Server 2009, es posible que tanto Commerce Server 2009 como Commerce Server 2007 aparezcan en el menú Inicio. En esta situación, puede omitir o eliminar el elemento de menú de Commerce Server 2007.
Para obtener más información, visite los siguientes sitios web de Microsoft Developer Network (MSDN):Para descargar el paquete de plantillas de Commerce Server 2009 para SharePoint 2010, visite el siguiente sitio web de Microsoft: