修正:當您在 Commerce Server 2009 中使用 CategoryConfiguration 類別與 CategoryConfiguration.ChildProducts.SqlWhereClause 屬性時,並未使用 Catalog 快取

套用到
Commerce Server 2009 Enterprise Commerce Server 2009 Standard

症狀

請考慮以下案例:

  • 你可以在 Web.config 檔案中啟用目錄系統,該檔案運行於 Commerce Server 2009 Microsoft。
  • 你可以使用 CategoryConfiguration 類別來指定 Category 物件的預載設定。
  • 你把 LoadChildProducts 屬性設 為 true
  • 你可以在 CategoryConfiguration.ChildProducts.SqlWhereClause 屬性中指定一個過濾子句。
  • 你可以使用 GetCategory 方法或 GetProduct 方法來取得 CategoryConfiguration 物件的子類別或子產品。

在此情境下,目錄快取可能無法用來檢索子類別及子產品。 因此,當高負載時,網站的效能可能會下降。

舉例來說,你有一個網站使用 AdventureWorks 的範例目錄。 你執行以下程式碼範例來取得一個類別物件的顯示名稱。 在此範例中,程式碼每次都會查詢目錄資料庫的資料,儘管已啟用目錄快取。

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);

注意,當你在程式碼範例中使用 GetProduct 方法時,也會遇到同樣的問題。

Microsoft 僅提供圖例的程式設計範例,不含明示或暗示的擔保。 這包括 (但不限於) 適用于特定目的之可操作性或適用性的暗示擔保。 本文假設您熟悉正在示範的程式設計語言,以及用來建立和進行程式偵錯工具的工具。 Microsoft 支援工程師可以協助說明特定程式的功能。 不過,他們將不會修改這些範例以提供新增功能或建構符合您特定需求的程式。

解決方式

為了解決這個問題,請將此熱修正套用到執行 Commerce Server 2009 的伺服器上。

套用這個熱修正後,使用「whereClause」過濾器時,允許快取子產品和子類別在目錄快取中。 預設情況下,任何包含 where 子句的查詢都會繞過目錄快取。 為了啟用快取,您必須新增一個「cacheFilter」區塊,並在 Commerce Server 網站的 Web.config 檔案中正確設定。

「cacheFilter」區塊提供以下屬性:

  • 「whereClause」屬性。
  • 「精確匹配」屬性。

你可以使用以下選項之一來管理要快取的 where 子句:

  • 在「whereClause」屬性中指定整個 where 子句,然後將「exactMatch」屬性設為 True
  • 在「whereClause」屬性中指定一個 where 子句,然後將「exactMatch」屬性設為 False。 這使得 Commerce Server 能夠快取任何與設定檔中指定內容部分相符的 where 子句。

注意:「exactMatch」屬性是可選的。 預設情況下,如果你省略了「exactMatch」屬性,它會被設定為 True

以下範例說明如何修改設定區段。 此範例也展示了「exactMatch」屬性的使用。

<catalog>

<catalogSets .../>

      <cache enable="true">

        <cacheFilter>

          <add whereClause="WHERE [ListPrice] between 0 AND 1000'" />

          <add whereClause="isActive" exactMatch="False" />

          ... 

        </cacheFilter> 

      </cache> 

</catalog>

在 cacheFilter 區段定義「whereClause」屬性值的規則

注意:「cacheFilter」區塊中「whereClause」屬性的值是字串匹配的。 例如,必須遵守以下規則:

  • 「whereClause」屬性值關鍵字中只允許留白一個。 例如:

    • whereClause=“ProductID 類似 'AW2%'” 未被匹配
    • whereClause=“ProductID 類似 'AW2%'” 被匹配
  • 若存在多個關鍵字值,則不允許在「whereClause」屬性值的開頭或結尾 (s的空白) 。 例如:

    • whereClause=“ ProductID 如 'AW2%'” 未被匹配
    • whereClause=“ProductID 類似 'AW2%'” 未被匹配
  • 「whereClause」屬性內的單引號子值必須完全字串匹配。 例如,假設搜尋查詢是「ProductID like 'AW2%'」;在此情況下,

    • whereClause=“ProductID 如 'AW2' 不匹配
    • whereClause=“ProductID 如 'AW2%' 是匹配

      

關於這個熱修補的更多資訊

Hotfix 資訊

Microsoft 已提供支援的熱修補程式。 然而,這個熱修補僅針對本文所述的問題進行修正。 此熱修正僅適用於遇到本文所述問題的系統。 這個熱修補可能會有額外的測試。 因此,如果您沒有受到此問題嚴重影響,我們建議您等待下一次包含此熱修補丁的軟體更新。

如果熱修補程式可供下載,這篇知識庫文章頂部有一個「熱修補丁下載可用」的區塊。 若此部分未出現,請聯絡 Microsoft 客服與支援以取得熱修正。

注意:如果發生其他問題或需要排除故障,您可能需要另行申請服務。 一般的支援費用將適用於不符合本次熱修正範圍的其他支援問題與問題。 欲查詢完整的 Microsoft 客服與支援電話號碼清單,或建立獨立服務請求,請造訪以下 Microsoft 網站:

http://support.microsoft.com/contactus/?ws=support 注意「熱修正下載可用」表單顯示該熱修正可用的語言。 如果你看不到你的語言,那是因為該語言沒有熱修正。

先決條件

要套用此熱修補,您必須安裝 Commerce Server 2009 或 Commerce Server 2009 Template Pack for SharePoint 2010。

重新啟動資訊

套用這個熱修正後,你不需要重啟電腦。 不過,在套用此熱修補程式後,您必須重新啟動 Internet Information Services (IIS) 。 要重新啟動 IIS,請打開命令提示字元視窗,輸入以下指令,然後按下 ENTER:

iisreset /restart注意:此選項會停止所有正在運行的 IIS 服務,然後重新啟動它們。

檔案詳細資訊

此熱修正的英文版本包含以下表格中列出的檔案屬性 (或更新版本的檔案屬性) 。 這些檔案的日期與時間是以國際標準時間 (UTC) 表示。 當您檢視檔案資訊時,它會轉換成當地時間。 若要查看 UTC 與當地時間的差異,請使用 [控制台] 中 [日期和時間] 項目的 [時區] 索引標籤。

所有支援的 Commerce Server 2009 版本

檔案名稱 檔案版本 檔案大小 日期 時間 平台
Cs2009hotfixhelper.exe 6.0.4171.27 13,080 2010年8月18日 1,111 x86
Microsoft.catalogserver.dll 6.0.4171.27 756,520 2010年8月18日 1,111 x86
Microsoft.commerceserver.runtime.dll 6.0.4171.27 850,744 2010年8月18日 1,111 x86
Microsoft.commerceserver.catalog.dll 6.0.4171.27 961,336 2010年8月18日 11:35 x86

適用於所有支援的 Commerce Server 2009 SharePoint 2010 模板包版本

檔案名稱 檔案版本 檔案大小 日期 時間 平台
Cspatchhelper.exe 6.0.4171.504 17,168 2010年11月30日 16:08 x86
Microsoft.catalogserver.dll 6.0.4171.504 756,520 2010年11月30日 16:08 x86
Microsoft.commerceserver.runtime.dll 6.0.4171.504 850,744 2010年11月30日 16:08 x86
Microsoft.commerceserver.catalog.dll 6.0.4171.504 961,336 2010年11月29日 1,413 x86

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

更多資訊

請在解除熱修正期間及之後注意以下兩點:

  1. 可能會顯示對話視窗。 對話框視窗會警告你,有些應用程式必須先關閉,才能繼續解除安裝程序。 在這種情況下,接受預設選項並點擊確定按鈕繼續。
  2. 在你卸載 Commerce Server 2009 的熱修正後,Commerce Server 2009 和 Commerce Server 2007 可能會同時出現在開始選單中。 在這種情況下,你可以忽略或刪除 Commerce Server 2007 的選單項目。

欲了解更多資訊,請造訪以下Microsoft開發者網絡 (MSDN) 網站:

目錄元素
        
         類別配置類別
        
         GetCategory 方法
        
欲下載 Commerce Server 2009 SharePoint 2010 範本包,請造訪以下 Microsoft 官網:

http://www.microsoft.com/download/en/details.aspx?FamilyID=CFD0C459-5A11-4DE6-9085-52D59E8D38E6&displaylang=en