public void TestWithKey()
        {
            NameValueCollection nameValues = new NameValueCollection();
            nameValues.Add("e", "99");
            nameValues.Add("a", "16");
            nameValues.Add("c", "88");
            CacheKeyBuilder builder = new CacheKeyBuilder(nameValues, "bb");

            Assert.AreEqual(builder.ServiceId, "bb");
            Assert.AreEqual(builder.CacheKey, "a16c88e99");
        }
        public void TestJqueryParametersNotIncludedInCacheKey()
        {
            NameValueCollection nameValues = new NameValueCollection();
            nameValues.Add("a", "9");
            nameValues.Add(CacheKeyBuilder.ParameterAjaxCallId, "7");
            CacheKeyBuilder builder = new CacheKeyBuilder(nameValues, "b");

            Assert.IsFalse(builder.CacheKey.Contains(CacheKeyBuilder.ParameterAjaxCallId));
            Assert.IsFalse(builder.CacheKey.Contains("7"));
            Assert.IsFalse(builder.CacheKey.Contains("8"));
        }
        public void TestNoCache()
        {
            // No cache
            NameValueCollection nameValues = new NameValueCollection();
            nameValues.Add("nocache", "");
            nameValues.Add(CacheKeyBuilder.ParameterAjaxCallId, "7");
            CacheKeyBuilder builder = new CacheKeyBuilder(nameValues, "b");
            Assert.IsFalse(builder.CanJsonBeCached);

            // Can cache
            nameValues = new NameValueCollection();
            nameValues.Add(CacheKeyBuilder.ParameterAjaxCallId, "7");
             builder = new CacheKeyBuilder(nameValues, "b");
            Assert.IsTrue(builder.CanJsonBeCached);
        }
        public void Respond(bool isServiceCachable, string serviceId)
        {
            this.isServiceCachable = isServiceCachable;

            absoluteUri = Context.Request.Url.AbsoluteUri;

            try
            {
                NameValueCollection parameters = Context.Request.QueryString;

                keyBuilder = new CacheKeyBuilder(parameters, serviceId);

                byte[] json = null;

                if (isServiceCachable && keyBuilder.CanJsonBeCached)
                {
                    json = WebCache.GetJson(keyBuilder.ServiceId, keyBuilder.CacheKey);
                }

                if (JsonUnit.IsJsonOk(json) == false)
                {
                    json = GetJsonFromCoreWs();
                }

                WriteResponse(json);
            }
            catch (Exception ex)
            {
                ExceptionLogger.LogException(ex, absoluteUri);

                Context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
                Context.Response.Write(ex.Message + " STACK=" + ex.StackTrace + " URL=" + absoluteUri);
                Context.Response.ContentType = ContentTypeJson;
                Context.Response.Flush();
            }
        }