/// <summary> /// Saves the cache. /// </summary> /// <param name="root">The root.</param> /// <param name="context">The context.</param> static void SaveCache(XmlNode root, HttpContext context) { XmlNode session = root.AppendChild(root.OwnerDocument.CreateElement("cacheVariables")); foreach (DictionaryEntry entry in context.Cache) { string key = entry.Key.ToString(); XmlNode variable = session.AppendChild(root.OwnerDocument.CreateElement("add")); variable.Attributes.Append(root.OwnerDocument.CreateAttribute("name")).Value = key; if (entry.Value == null) { variable.Attributes.Append(root.OwnerDocument.CreateAttribute("value")).Value = "null"; continue; } Type variableType = entry.Value.GetType(); variable.Attributes.Append(root.OwnerDocument.CreateAttribute("type")).Value = variableType.AssemblyQualifiedName; if (variableType.IsValueType || variableType == typeof(string)) { variable.Attributes.Append(root.OwnerDocument.CreateAttribute("value")).Value = Convert.ToString(entry.Value, CultureInfo.InvariantCulture); } else if (variableType.IsSerializable) { variable.AppendChild(root.OwnerDocument.CreateCDataSection(BugSerializer.Serialize(entry.Value))); } } }
/// <summary> /// Saves the session. /// </summary> /// <param name="root">The root.</param> /// <param name="context">The context.</param> static void SaveSession(XmlNode root, HttpContext context) { if (context.Session == null) { return; } XmlNode session = root.AppendChild(root.OwnerDocument.CreateElement("sessionVariables")); session.Attributes.Append(root.OwnerDocument.CreateAttribute("mode")).Value = context.Session.Mode.ToString(); session.Attributes.Append(root.OwnerDocument.CreateAttribute("codePage")).Value = context.Session.CodePage.ToString(CultureInfo.InvariantCulture); foreach (string key in context.Session.Keys) { XmlNode variable = session.AppendChild(root.OwnerDocument.CreateElement("add")); variable.Attributes.Append(root.OwnerDocument.CreateAttribute("name")).Value = key; object value = context.Session[key]; if (value == null) { variable.Attributes.Append(root.OwnerDocument.CreateAttribute("value")).Value = "null"; continue; } Type variableType = value.GetType(); variable.Attributes.Append(root.OwnerDocument.CreateAttribute("type")).Value = variableType.AssemblyQualifiedName; if (variableType.IsValueType || variableType == typeof(string)) { variable.Attributes.Append(root.OwnerDocument.CreateAttribute("value")).Value = Convert.ToString(value, CultureInfo.InvariantCulture); } else if (variableType.IsSerializable) { variable.AppendChild(root.OwnerDocument.CreateCDataSection(BugSerializer.Serialize(value))); } } }
/// <summary> /// Saves the user. /// </summary> /// <param name="root">The root.</param> /// <param name="context">The context.</param> static void SaveUser(XmlNode root, HttpContext context) { if (context.User != null && context.User.GetType().IsSerializable) { XmlNode user = root.AppendChild(root.OwnerDocument.CreateElement("user")); user.Attributes.Append(root.OwnerDocument.CreateAttribute("name")).Value = context.User.Identity.Name; user.Attributes.Append(root.OwnerDocument.CreateAttribute("authenticationType")).Value = context.User.Identity.AuthenticationType; user.AppendChild(root.OwnerDocument.CreateCDataSection(BugSerializer.Serialize(context.User))); } }
/// <summary> /// Saves the exception. /// </summary> /// <param name="root">The root.</param> /// <param name="context">The context.</param> static void SaveException(XmlNode root, HttpContext context) { if (context.Error == null) { return; } XmlNode exception = root.AppendChild(root.OwnerDocument.CreateElement("exception")); Exception baseException = context.Error.GetBaseException(); exception.Attributes.Append(root.OwnerDocument.CreateAttribute("type")).Value = baseException.GetType().FullName; exception.Attributes.Append(root.OwnerDocument.CreateAttribute("message")).Value = baseException.Message; exception.Attributes.Append(root.OwnerDocument.CreateAttribute("source")).Value = ExceptionHelper.GetRelevantSource(context.Error) ?? baseException.Source; exception.AppendChild(root.OwnerDocument.CreateCDataSection(BugSerializer.Serialize(context.Error))); ExceptionHelper.XmlSerializeStackTrace(baseException, root.AppendChild(root.OwnerDocument.CreateElement("stackTrace"))); }
/// <summary> /// Saves the context. /// </summary> /// <param name="root">The root.</param> /// <param name="context">The context.</param> static void SaveContext(XmlNode root, HttpContext context) { XmlNode contextNode = root.AppendChild(root.OwnerDocument.CreateElement("contextVariables")); foreach (DictionaryEntry entry in context.Items) { Type keyType = entry.Key.GetType(); XmlNode variable = contextNode.AppendChild(root.OwnerDocument.CreateElement("add")); if (keyType.IsValueType || keyType == typeof(string)) { variable.Attributes.Append(root.OwnerDocument.CreateAttribute("nameType")).Value = keyType.AssemblyQualifiedName; variable.Attributes.Append(root.OwnerDocument.CreateAttribute("name")).Value = Convert.ToString(entry.Key, CultureInfo.InvariantCulture); } else if (keyType.IsSerializable) { variable.AppendChild(root.OwnerDocument.CreateElement("key")).AppendChild(root.OwnerDocument.CreateCDataSection(BugSerializer.Serialize(entry.Key))); } else { variable.ParentNode.RemoveChild(variable); continue; } if (entry.Value == null) { variable.Attributes.Append(root.OwnerDocument.CreateAttribute("value")).Value = "null"; continue; } Type variableType = entry.Value.GetType(); variable.Attributes.Append(root.OwnerDocument.CreateAttribute("type")).Value = variableType.AssemblyQualifiedName; if (variableType.IsValueType || variableType == typeof(string)) { variable.Attributes.Append(root.OwnerDocument.CreateAttribute("value")).Value = Convert.ToString(entry.Value, CultureInfo.InvariantCulture); } else if (variableType.IsSerializable) { variable.AppendChild(root.OwnerDocument.CreateCDataSection(BugSerializer.Serialize(entry.Value))); } } }