Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Wojciech Tengler 96 posts 199 karma points
    Nov 26, 2010 @ 18:56
    Wojciech Tengler
    0

    Error removing 'Page Refresher...'

    Hi everyone!

    I had to unpublish one terrible node today but I suddenly met the error like this:

    Error removing 'Page Refresher (umbraco.library wrapper)' with id '74340', error: 'System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.    at System.String.GetStringForStringBuilder(String value, Int32 startIndex, Int32 length, Int32 capacity)    at System.Text.StringBuilder.GetNewString(String currentString, Int32 requiredLength)    at System.Text.StringBuilder.Append(String value)    at System.IO.StringWriter.Write(String value)    at System.Xml.XmlTextEncoder.WriteRawWithSurrogateChecking(String text)    at System.Xml.XmlTextWriter.WriteCData(String text)    at System.Xml.XmlCDataSection.WriteTo(XmlWriter w)    at System.Xml.XmlElement.WriteContentTo(XmlWriter w)    at System.Xml.XmlElement.WriteTo(XmlWriter w)    at System.Xml.XmlElement.WriteContentTo(XmlWriter w)    at System.Xml.XmlElement.WriteTo(XmlWriter w)    at System.Xml.XmlElement.WriteContentTo(XmlWriter w)    at System.Xml.XmlElement.WriteTo(XmlWriter w)    at System.Xml.XmlElement.WriteContentTo(XmlWriter w)    at System.Xml.XmlElement.WriteTo(XmlWriter w)    at System.Xml.XmlElement.WriteContentTo(XmlWriter w)    at System.Xml.XmlElement.WriteTo(XmlWriter w)    at System.Xml.XmlElement.WriteContentTo(XmlWriter w)    at System.Xml.XmlElement.WriteTo(XmlWriter w)    at System.Xml.XmlDocument.WriteContentTo(XmlWriter xw)    at System.Xml.XmlDocument.WriteTo(XmlWriter w)    at System.Xml.XmlNode.get_OuterXml()    at umbraco.content.CloneXmlDoc(XmlDocument xmlDoc)    at umbraco.content.ClearDocumentCache(Int32 documentId)    at umbraco.presentation.cache.pageRefresher.Remove(Int32 Id)    at umbraco.presentation.webservices.CacheRefresher.RemoveById(Guid uniqueIdentifier, Int32 Id, String Login, String Password)    --- End of inner exception stack trace ---     at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)     at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)     at umbraco.presentation.cache.CacheRefresher.RemoveById(Guid uniqueIdentifier, Int32 Id, String Login, String Password)     at umbraco.presentation.cache.dispatcher.Remove(Guid uniqueIdentifier, Int32 Id)'

     

    After a long time studying the code in the content.cs class, I found the place where the error occurs:

            private XmlDocument CloneXmlDoc(XmlDocument xmlDoc)
            {
                Log.Add(LogTypes.Debug, -1, "Cloning...");
                // Save copy of content
                XmlDocument xmlCopy = new XmlDocument();
                xmlCopy.LoadXml(xmlDoc.OuterXml);
                Log.Add(LogTypes.Debug, -1, "Cloning ended...");
                return xmlCopy;
            }

    The first log I can find in data base but not the log 'Cloning ended...'. So the problem is with cloning XmlDocument.

    More info we can find here http://wcg-itx.com/index.php/articles/10-xmlxslt/17-xml-document-copy

    I fixed it by modyfiing this function:

            private XmlDocument CloneXmlDoc(XmlDocument xmlDoc)
            {
                Log.Add(LogTypes.Debug, -1, "Cloning...");
                // Save copy of content
                XmlDocument xmlCopy = (XmlDocument)xmlDoc.CloneNode(true);
                Log.Add(LogTypes.Debug, -1, "Cloning ended...");
                return xmlCopy;
            }

     

    I hope that is useful.

    Best regards


Please Sign in or register to post replies

Write your reply to:

Draft