void ConfigureMarketingSystem(PipelineInfo pipeInfo, CacheManager cacheManager)
        {
            CommerceResource marketingResource = resources["Marketing"];

            string marketingConnStr = marketingResource["connstr_db_marketing"].ToString();

            string cleanedMarketingConnStr;

            CleanSqlClientConnectionString(marketingConnStr, out cleanedMarketingConnStr);

            CommerceServer.Core.Runtime.IDictionary marketingCacheDict = new Dictionary();
            marketingCacheDict["ConnectionString"] = marketingConnStr;
            marketingCacheDict["DefaultLanguage"]  = marketingResource["s_DefaultMarketingSystemLanguage"].ToString();

            ExpressionEvaluator exprEval = null;

            try
            {
                //Create the expression evaluator
                IExpressionStoreAdapter evaluatorStoreAdapter = new MarketingExpressionStoreAdapter(cleanedMarketingConnStr);
                exprEval = new ExpressionEvaluator();
                exprEval.Connect(evaluatorStoreAdapter);

                //Set Discounts cache.
                cacheManager.set_RefreshInterval("Discounts", 0);
                cacheManager.set_RetryInterval("Discounts", 60);
                cacheManager.set_CacheObjectProgId("Discounts", "Commerce.Dictionary");
                cacheManager.set_LoaderProgId("Discounts", "Commerce.CSFLoadDiscounts");
                marketingCacheDict["Evaluator"] = exprEval;
                cacheManager.set_LoaderConfig("Discounts", marketingCacheDict);
                cacheManager.set_WriterConfig("Discounts", marketingCacheDict);
                cacheManager.set_WriterProgId("Discounts", "Commerce.CSFWriteEvents");

                //Set Advertising cache.
                cacheManager.set_RefreshInterval("Advertising", 300);
                cacheManager.set_RetryInterval("Advertising", 60);
                cacheManager.set_CacheObjectProgId("Advertising", "Commerce.Dictionary");
                cacheManager.set_LoaderProgId("Advertising", "Commerce.CSFLoadAdvertisements");
                cacheManager.set_WriterConfig("Advertising", marketingCacheDict);
                cacheManager.set_WriterProgId("Advertising", "Commerce.CSFWriteEvents");

                pipeInfo["Evaluator"] = exprEval;
            }
            finally
            {
                if (exprEval != null)
                {
                    Marshal.ReleaseComObject(exprEval);
                }
                if (marketingCacheDict != null)
                {
                    Marshal.ReleaseComObject(marketingCacheDict);
                }
            }
        }
        void ConfigureOrderSystem(PipelineInfo pipeInfo, CacheManager cacheManager)
        {
            CommerceResource transactionConfigResource = resources["Transaction Config"];
            string           transactionConfigConnStr  = transactionConfigResource["connstr_db_TransactionConfig"].ToString();
            string           cleanedTxConfigConnstr    = null;

            CleanSqlClientConnectionString(transactionConfigConnStr, out cleanedTxConfigConnstr);

            CommerceServer.Core.Runtime.IDictionary shippingMethodCacheDict = new Dictionary();
            shippingMethodCacheDict["ConnectionString"] = cleanedTxConfigConnstr;
            shippingMethodCacheDict["TableName"]        = "txVirtual_Directory";

            CommerceServer.Core.Runtime.IDictionary paymentMethodCacheDict = new Dictionary();
            paymentMethodCacheDict["ConnectionString"] = cleanedTxConfigConnstr;
            paymentMethodCacheDict["TableName"]        = "txVirtual_Directory";

            pipeInfo["TransactionConfigConnectionString"] = transactionConfigConnStr;
            try
            {
                //Set shipping method cache.
                cacheManager.set_RefreshInterval("ShippingManagerCache", 0);
                cacheManager.set_RetryInterval("ShippingManagerCache", 30);
                cacheManager.set_CacheObjectProgId("ShippingManagerCache", "Commerce.Dictionary");
                cacheManager.set_LoaderProgId("ShippingManagerCache", "Commerce.ShippingMethodCache");
                cacheManager.set_LoaderConfig("ShippingManagerCache", shippingMethodCacheDict);
                cacheManager.set_WriterConfig("ShippingManagerCache", shippingMethodCacheDict);

                //Set payment method cache.
                cacheManager.set_RefreshInterval("PaymentMethodCache", 0);
                cacheManager.set_RetryInterval("PaymentMethodCache", 30);
                cacheManager.set_CacheObjectProgId("PaymentMethodCache", "Commerce.Dictionary");
                cacheManager.set_LoaderProgId("PaymentMethodCache", "Commerce.PaymentMethodCache");
                cacheManager.set_LoaderConfig("PaymentMethodCache", paymentMethodCacheDict);
                cacheManager.set_WriterConfig("PaymentMethodCache", paymentMethodCacheDict);
            }
            finally
            {
                if (shippingMethodCacheDict != null)
                {
                    Marshal.ReleaseComObject(shippingMethodCacheDict);
                }
            }
        }