System.ServiceModel.Channels.XmlReaderBodyWriter.OnCreateBufferedCopy C# (CSharp) Метод

OnCreateBufferedCopy() защищенный Метод

protected OnCreateBufferedCopy ( int maxBufferSize ) : System.ServiceModel.Channels.BodyWriter
maxBufferSize int
Результат System.ServiceModel.Channels.BodyWriter
		protected override BodyWriter OnCreateBufferedCopy (
			int maxBufferSize)
		{
#if true
			if (xml_bak == null) {
				if (consumed)
					throw new InvalidOperationException ("Body xml reader is already consumed");
				var sw = new StringWriter ();
				var xw = XmlDictionaryWriter.CreateDictionaryWriter (XmlWriter.Create (sw));
				xw.WriteStartElement (reader.Prefix, reader.LocalName, reader.NamespaceURI);
				xw.WriteAttributes (reader, false);

				var inr = reader as IXmlNamespaceResolver;
				if (inr != null)
					foreach (var p in inr.GetNamespacesInScope (XmlNamespaceScope.ExcludeXml))
						if (xw.LookupPrefix (p.Value) != p.Key)
							xw.WriteXmlnsAttribute (p.Key, p.Value);
				if (!reader.IsEmptyElement) {
					reader.Read ();
					while (reader.NodeType != XmlNodeType.EndElement)
						xw.WriteNode (reader, false);
				}
				xw.WriteEndElement ();

				xw.Close ();
				xml_bak = sw.ToString ();
				reader = null;
			}
#else // FIXME: this should be better, but somehow doesn't work.
			if (xml_bak == null) {
				if (consumed)
					throw new InvalidOperationException ("Body xml reader is already consumed");
				var nss = new XmlNamespaceManager (reader.NameTable);
				var nsr = reader as IXmlNamespaceResolver;
				if (nsr != null)
					foreach (var p in nsr.GetNamespacesInScope (XmlNamespaceScope.ExcludeXml))
						nss.AddNamespace (p.Key, p.Value);
				parser_context = new XmlParserContext (nss.NameTable, nss, reader.XmlLang, reader.XmlSpace);
				xml_bak = reader.ReadOuterXml ();
			}
#endif
			return new XmlReaderBodyWriter (xml_bak, maxBufferSize, parser_context);
		}