public static byte[] BuildMessage(
            object obj,
            Encoding encoding,
            ISoapHeaderBuilder header,
            XmlSerializerNamespaces namespaces)
        {
            XmlDocument  xmlBody    = new XmlDocument();
            MemoryStream streamBody = new MemoryStream(ToXml(obj, encoding, null));

            xmlBody.Load(streamBody);
            streamBody.Close();

            Envelope envelope = new Envelope();

            envelope.Body     = new Body();
            envelope.Body.Any = new XmlElement[] { xmlBody.DocumentElement };

            if (header != null)
            {
                MemoryStream  streamHeader = new MemoryStream();
                XmlTextWriter writer       = new XmlTextWriter(streamHeader, Encoding.UTF8);
                writer.WriteStartDocument();
                writer.WriteStartElement("Header");
                header.WriteHeader(writer, obj);
                writer.WriteEndElement();
                writer.WriteEndDocument();
                writer.Flush();
                streamHeader.Seek(0, SeekOrigin.Begin);
                XmlDocument xmlHead = new XmlDocument();
                xmlHead.Load(streamHeader);
                streamHeader.Close();

                envelope.Header = new Header();
                List <XmlElement> elements = new List <XmlElement>();
                foreach (XmlElement element in xmlHead.DocumentElement.ChildNodes)
                {
                    elements.Add(element);
                }
                envelope.Header.Any = elements.ToArray();
            }

            return(ToXml(envelope, encoding, namespaces));
        }
 public static byte[] BuildMessage(object obj, Encoding encoding, ISoapHeaderBuilder header)
 {
     return(BuildMessage(obj, encoding, header, null));
 }