Sintomas
Considere o seguinte cenário:
- Você habilita o cache no sistema de catálogo no arquivo Web.config para um site que está executando o Microsoft Commerce Server 2009.
- Você usa a classe CategoryConfiguration para especificar a configuração pré-carregada de um objeto Category.
- Você define a propriedade LoadChildProducts como True.
- Você especifica uma cláusula de filtragem na propriedade CategoryConfiguration.ChildProducts.SqlWhereClause.
- Você usa o método GetCategory ou o método GetProduct para recuperar categorias filho ou produtos filho do objeto CategoryConfiguration.
Nesse cenário, o cache de catálogo pode não ser usado para recuperar as categorias filho e os produtos filho. Portanto, o site pode ter um desempenho reduzido quando há alta carga.
Por exemplo, você tem um site que usa o catálogo de exemplos do AdventureWorks. Execute o exemplo de código a seguir para recuperar o nome de exibição de um objeto Category. Neste exemplo, o código consulta dados do banco de dados Catalog todas as vezes, embora o cache de catálogo esteja 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);
Observação Esse mesmo problema ocorre quando você usa o método GetProduct no exemplo de código.
A Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não se limita a, as garantias implícitas de comercialização ou adequação a uma finalidade específica. Este artigo pressupõe que você esteja familiarizado com a linguagem de programação que está sendo demonstrada e com as ferramentas usadas para criar e depurar procedimentos. Os engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um procedimento específico. No entanto, eles não modificarão esses exemplos para fornecer funcionalidade adicional ou procedimentos de construção para atender aos seus requisitos específicos.
Resolução
Para resolve esse problema, aplique esse hotfix ao servidor que está executando o Commerce Server 2009.
Depois de aplicar esse hotfix, o cache de produtos filho e categorias filho no cache do catálogo é permitido quando você usa um filtro "whereClause". Por padrão, qualquer consulta que contenha uma cláusula ignora o cache do catálogo. Para habilitar o cache, você deve adicionar uma seção "cacheFilter" e configurá-la corretamente no arquivo Web.config para o site do Commerce Server.
A seção "cacheFilter" fornece os seguintes atributos:
- O atributo "whereClause".
- O atributo "exactMatch".
Você pode usar uma das seguintes opções para gerenciar qual cláusula armazenar em cache:
- Especifique a cláusula inteira em que o atributo "whereClause" e defina o atributo "exactMatch" como True.
- Especifique uma cláusula em que no atributo "whereClause" e defina o atributo "exactMatch" como False. Isso permite ao Commerce Server armazenar em cache qualquer cláusula em que tenha uma correspondência parcial com o que foi especificado no arquivo de configuração.
Observação O atributo "exactMatch" é opcional. Por padrão, se você omitir o atributo "exactMatch", ele será definido como True.
O exemplo a seguir mostra como modificar a seção de configuração. Este exemplo também mostra o uso do atributo "exactMatch".
<catalog>
<catalogSets .../>
<cache enable="true">
<cacheFilter>
<add whereClause="WHERE [ListPrice] between 0 AND 1000'" />
<add whereClause="isActive" exactMatch="False" />
...
</cacheFilter>
</cache>
</catalog>
Regras na definição do valor do atributo "whereClause" na seção cacheFilter
Observação O valor do atributo "whereClause" na seção "cacheFilter" é compatível com cadeia de caracteres. Por exemplo, as seguintes regras devem ser seguidas:
Apenas um espaço em branco é permitido entre as palavras-chave de valor de atributo "whereClause". Por exemplo:
- whereClause="ProductID like 'AW2%'" não é correspondido
- whereClause="ProductID like 'AW2%'" é correspondido
Nenhum espaço em branco é permitido no início ou no final do valor do atributo "whereClause" se houver um valor de várias palavras-chave. Por exemplo:
- whereClause=" ProductID como 'AW2%'" não é correspondido
- whereClause="ProductID like 'AW2%' " não é correspondido
O sub-valor de cotação única no atributo "whereClause" deve ser totalmente compatível com cadeia de caracteres. Por exemplo, suponha que a consulta de pesquisa seja "ProductID como 'AW2%'"; nesse caso,
- whereClause="ProductID como 'AW2' não é uma correspondência
- whereClause="ProductID como 'AW2%' é uma correspondência
Mais informações sobre esse hotfix
Informações sobre o hotfix
Um hotfix compatível foi disponibilizado pela Microsoft. No entanto, esse hotfix destina-se a corrigir apenas o problema descrito neste artigo. Aplique-o somente em sistemas que apresentarem o problema descrito neste artigo. Testes adicionais poderão ser realizados neste hotfix. Portanto, se esse problema não prejudica você, é aconselhável aguardar a próxima atualização de software que contenha este hotfix.
Se o hotfix estiver disponível para download, existirá uma seção "Download de hotfix disponível" na parte superior deste artigo da Base de Dados de Conhecimento. Se esta seção não aparecer, contate o Serviço de Suporte e Atendimento ao Cliente Microsoft para obter o hotfix.
Observação Se outros problemas estiverem ocorrendo ou se uma solução de problemas for necessária, talvez seja preciso criar uma solicitação de serviço separada. Os custos normais de suporte serão aplicados a outras questões e problemas de suporte não qualificados para esse hotfix específico. Para obter uma lista completa dos números de telefone do Atendimento ao Cliente da Microsoft ou para criar uma solicitação de serviço separada, visite o seguinte site da Microsoft:
http://support.microsoft.com/contactus/?ws=support Observação O formulário "Download do Hotfix disponível" exibe os idiomas para os quais o hotfix está disponível. Se o seu idioma não for exibido, significa que não há um hotfix disponível para ele.
Pré-requisitos
Para aplicar esse hotfix, você deve ter o Commerce Server 2009 ou o Pacote de Modelos do Commerce Server 2009 para SharePoint 2010 instalado.
Informações sobre reinicialização
Você não precisa reiniciar o computador depois de aplicar esse hotfix. No entanto, você deve reiniciar o IIS (Serviços de Informações da Internet) depois de aplicar esse hotfix. Para reiniciar o IIS, abra uma janela prompt de comando, digite o seguinte comando e pressione ENTER:
iisreset /restartNote Essa opção interrompe todos os serviços IIS que estão em execução e, em seguida, reinicia-os.
Informações de arquivo
A versão em inglês deste hotfix tem os atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e as horas desses arquivos estão listadas no formato UTC (Tempo Universal Coordenado). Quando você visualizar as informações sobre os arquivos, elas são convertidas no horário local. Para saber a diferença entre a hora UTC e a hora local, use a guia Fuso Horário no item Data e Hora do Painel de Controle.
Para todas as versões com suporte do Commerce Server 2009
| Nome do arquivo | Versão do arquivo | Tamanho do arquivo | Data | Hora | Plataforma |
|---|---|---|---|---|---|
| Cs2009hotfixhelper.exe | 6.0.4171.27 | 13,080 | 18-Ago-2010 | 1,111 | x86 |
| Microsoft.catalogserver.dll | 6.0.4171.27 | 756,520 | 18-Ago-2010 | 1,111 | x86 |
| Microsoft.commerceserver.runtime.dll | 6.0.4171.27 | 850,744 | 18-Ago-2010 | 1,111 | x86 |
| Microsoft.commerceserver.catalog.dll | 6.0.4171.27 | 961,336 | 18-Ago-2010 | 11:35 | x86 |
Para todas as versões suportadas do Commerce Server 2009 Template Pack para SharePoint 2010
| Nome do arquivo | Versão do arquivo | Tamanho do arquivo | Data | Hora | Plataforma |
|---|---|---|---|---|---|
| Cspatchhelper.exe | 6.0.4171.504 | 17,168 | 30-Nov-2010 | 16:08 | x86 |
| Microsoft.catalogserver.dll | 6.0.4171.504 | 756,520 | 30-Nov-2010 | 16:08 | x86 |
| Microsoft.commerceserver.runtime.dll | 6.0.4171.504 | 850,744 | 30-Nov-2010 | 16:08 | x86 |
| Microsoft.commerceserver.catalog.dll | 6.0.4171.504 | 961,336 | 29-Nov-2010 | 1.413 | x86 |
Status
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Mais informações
Tenha em atenção os dois pontos seguintes durante e após a desinstalação da correção:
- Pode ser apresentada uma janela de diálogo. A janela de diálogo avisa que algumas aplicações têm de ser fechadas antes de poder continuar com o processo de desinstalação. Nesta situação, aceite a seleção predefinida e clique no botão OK para continuar.
- Depois de desinstalar a correção do Commerce Server 2009, o Commerce Server 2009 e o Commerce Server 2007 poderão aparecer no menu Iniciar. Nesta situação, pode ignorar ou eliminar o item de menu Commerce Server 2007.
Para obter mais informações, visite os seguintes sites da Microsoft Developer Network (MSDN):
elemento de catálogo
Classe CategoryConfiguration
Método GetCategory
Para transferir o Commerce Server 2009 Template Pack para o SharePoint 2010, visite o seguinte site da Microsoft: