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); } } }
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)); }
public SiteMapImpl() { SiteMap.Build(); SiteMap.WaitForBuild(); }