internal void UpdateServersCache(string key, RawResponse rawResponse, string pathUrl, string currentSiteUrl) { foreach (string server in _servers) { #pragma warning disable 612,618 ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy(); #pragma warning restore 612,618 NameValueCollection queryString = HttpUtility.ParseQueryString(string.Empty); queryString["CacheLevel"] = "First"; queryString["key"] = key; queryString["pathUrl"] = pathUrl; queryString["currentSiteUrl"] = currentSiteUrl; queryString.ToString(); var httpHandlerUrlBuilder = new UriBuilder(server + "_layouts/OceanikCacheSync.ashx") { Query = queryString.ToString() }; var req = (HttpWebRequest)WebRequest.Create(httpHandlerUrlBuilder.Uri); req.Method = "POST"; req.Credentials = CredentialCache.DefaultCredentials; byte[] rawResponseBytes = SerializeObject <RawResponse> .Object2ByteArray(rawResponse); req.ContentLength = rawResponseBytes.Length; req.ContentType = "text/xml"; Stream requestStream = req.GetRequestStream(); requestStream.Write(rawResponseBytes, 0, rawResponseBytes.Length); requestStream.Close(); req.GetResponse(); } }
internal void OnUpdateRequestCache(object sender, EventArgs e) { var application = (HttpApplication)sender; HttpContext context = application.Context; #if DEBUG bool isAspx = context.Request.Path.EndsWith(".aspx", StringComparison.OrdinalIgnoreCase); if (isAspx) { lock (LockThis) { Trace.WriteLine("------------------------------------------------START CONTEXT-------------------------------------------------------------------"); var objectDump = new StringBuilder(); DumpObject.Dump(context, objectDump, BindingFlags.Public | BindingFlags.NonPublic); Trace.WriteLine(objectDump.ToString()); Trace.WriteLine("------------------------------------------------END CONTEXT--------------------------------------------------------------------"); Trace.WriteLine("------------------------------------------------START REQUEST-------------------------------------------------------------------"); objectDump.Clear(); DumpObject.Dump(context.Request, objectDump, BindingFlags.Public | BindingFlags.NonPublic); Trace.WriteLine(objectDump.ToString()); Trace.WriteLine("------------------------------------------------END REQUEST--------------------------------------------------------------------"); Trace.WriteLine("------------------------------------------------START RESPONSE-------------------------------------------------------------------"); objectDump.Clear(); DumpObject.Dump(context.Response, objectDump, BindingFlags.Public | BindingFlags.NonPublic); Trace.WriteLine(objectDump.ToString()); Trace.WriteLine("------------------------------------------------END RESPONSE--------------------------------------------------------------------"); } } #endif string url = Utilities.GetUrlWithNoQueries(context); if (IsValidRequestToCache(context, url)) { bool flag = IsCacheable(context); if (flag) { string key = CreateOutputCachedItemKey(url, context); RawResponse rawResponse = GetSnapshot(context.Response); CacheDependency dependencies = GetDependencies(context, url); context.Cache.Insert(key, rawResponse, dependencies, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(60), CacheItemPriority.Low, null); if (!_serverListLoaded) { SPSecurity.RunWithElevatedPrivileges(delegate { _servers = LoadBalancingServerList(application); }); } if (_servers.Count > 0) { string currentSiteUrl = SPContext.Current.Site.Url; if (!currentSiteUrl.EndsWith("/")) { currentSiteUrl = currentSiteUrl + "/"; } try { SPSecurity.RunWithElevatedPrivileges( () => UpdateServersCache(key, rawResponse, url, currentSiteUrl)); } catch (Exception ex) { Common.SharePoint.Library.Exception.LogException(EventSourceName, "Error in Alphamosaik.Translator.Caching.CachingHttpModule.GetUserGroupsCollection: " + ex.Message, EventLogEntryType.Warning); } } Trace.WriteLine("EffectivePercentagePhysicalMemoryLimit: " + context.Cache.EffectivePercentagePhysicalMemoryLimit); Trace.WriteLine("EffectivePrivateBytesLimit: " + context.Cache.EffectivePrivateBytesLimit); } } }