Example #1
0
        private void ProccessRequests()
        {
            SiteMap.WaitForBuild();

            while (true)
            {
                Request request;
                lock (_requestLock)
                {
                    while (_queue.Count == 0)
                    {
                        Monitor.Wait(_requestLock);
                    }
                    request = _queue.Dequeue();
                }

                try
                {
                    WebFactory.ProccessRequest(request);
                }
                catch (Exception ex)
                {
                    request.CompleteCallback(null, null, ex);
                }
            }
        }
Example #2
0
        internal override Cache GetWebCore(Request request)
        {
            if (IsRunedUnderElevetedPrivilegies(request))
            {
                request.Identity = WindowsIdentity.GetAnonymous();
            }

            SPSite    site = null;
            SPWeb     web  = null;
            Exception ex   = null;

            // при использовании кеша на один запрос нужно различать объекты созданные предыдущим запросом
            // для этого к хешу объекта добавляется хеш запроса
            if (HttpContext.Current != null)
            {
                request.RequestHash = HttpContext.Current.Request.GetHashCode();
            }

            request.CompleteCallback = (s, w, e) =>
            {
                site = s;
                web  = w;
                ex   = e;
            };

            SiteMap.WaitForBuild();
            WebFactory.ProccessRequest(request);

            if (ex != null)
            {
                throw ex;
            }

            return(new Cache(site, web));
        }
Example #3
0
 public SiteMapImpl()
 {
     SiteMap.Build();
     SiteMap.WaitForBuild();
 }