* ParameterCollection.cs: fixed IndexOfString, this indexer should be case insensitive
[mono.git] / mcs / class / System.Web.Services / System.Web.Services.Description / ServiceDescriptionSerializerBase.cs
index a42ec6f2881ae6501066c90f4e986617ab3652ef..753847cf5b46d403c7e60023e38ac2761931d44f 100644 (file)
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
+
+#if !NET_2_0
+
 using System;
 using System.Xml;
+using System.Xml.Schema;
 using System.Xml.Serialization;
 using System.Text;
 using System.Collections;
@@ -30,9 +34,11 @@ namespace System.Web.Services.Description
 {
        internal class ServiceDescriptionReaderBase : XmlSerializationReader
        {
-               public System.Web.Services.Description.ServiceDescription ReadTree ()
+               public object ReadRoot_ServiceDescription ()
                {
                        Reader.MoveToContent();
+                       if (Reader.LocalName != "definitions" || Reader.NamespaceURI != "http://schemas.xmlsoap.org/wsdl/")
+                               throw CreateUnknownNodeException();
                        return ReadObject_ServiceDescription (true, true);
                }
 
@@ -44,11 +50,10 @@ namespace System.Web.Services.Description
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "ServiceDescription" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "ServiceDescription" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
                        ob = new System.Web.Services.Description.ServiceDescription ();
@@ -58,10 +63,10 @@ namespace System.Web.Services.Description
                        while (Reader.MoveToNextAttribute())
                        {
                                if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
+                                       ob.@Name = Reader.Value;
                                }
                                else if (Reader.LocalName == "targetNamespace" && Reader.NamespaceURI == "") {
-                                       ob.TargetNamespace = Reader.Value;
+                                       ob.@TargetNamespace = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -81,57 +86,61 @@ namespace System.Web.Services.Description
 
                        bool b0=false, b1=false, b2=false, b3=false, b4=false, b5=false, b6=false;
 
-                       System.Web.Services.Description.ImportCollection o8 = ob.Imports;
-                       System.Web.Services.Description.MessageCollection o10 = ob.Messages;
-                       System.Web.Services.Description.PortTypeCollection o12 = ob.PortTypes;
-                       System.Web.Services.Description.BindingCollection o14 = ob.Bindings;
-                       System.Web.Services.Description.ServiceCollection o16 = ob.Services;
+                       System.Web.Services.Description.ImportCollection o8;
+                       o8 = ob.@Imports;
+                       System.Web.Services.Description.MessageCollection o10;
+                       o10 = ob.@Messages;
+                       System.Web.Services.Description.PortTypeCollection o12;
+                       o12 = ob.@PortTypes;
+                       System.Web.Services.Description.BindingCollection o14;
+                       o14 = ob.@Bindings;
+                       System.Web.Services.Description.ServiceCollection o16;
+                       o16 = ob.@Services;
                        int n7=0, n9=0, n11=0, n13=0, n15=0;
 
                        while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                        {
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
-                                       if (Reader.LocalName == "binding" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b4) {
-                                               if (o14 == null)
-                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.BindingCollection");
-                                               o14.Add (ReadObject_Binding (false, true));
-                                               n13++;
+                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b0) {
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
-                                       else if (Reader.LocalName == "service" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b5) {
-                                               if (o16 == null)
+                                       else if (Reader.LocalName == "service" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b6) {
+                                               if (((object)o16) == null)
                                                        throw CreateReadOnlyCollectionException ("System.Web.Services.Description.ServiceCollection");
                                                o16.Add (ReadObject_Service (false, true));
                                                n15++;
                                        }
-                                       else if (Reader.LocalName == "import" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b0) {
-                                               if (o8 == null)
-                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.ImportCollection");
-                                               o8.Add (ReadObject_Import (false, true));
-                                               n7++;
-                                       }
-                                       else if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b6) {
-                                               b6 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
-                                       }
-                                       else if (Reader.LocalName == "message" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b2) {
-                                               if (o10 == null)
+                                       else if (Reader.LocalName == "message" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b3) {
+                                               if (((object)o10) == null)
                                                        throw CreateReadOnlyCollectionException ("System.Web.Services.Description.MessageCollection");
                                                o10.Add (ReadObject_Message (false, true));
                                                n9++;
                                        }
-                                       else if (Reader.LocalName == "types" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b1) {
-                                               b1 = true;
-                                               ob.Types = ReadObject_Types (false, true);
-                                       }
-                                       else if (Reader.LocalName == "portType" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b3) {
-                                               if (o12 == null)
+                                       else if (Reader.LocalName == "portType" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b4) {
+                                               if (((object)o12) == null)
                                                        throw CreateReadOnlyCollectionException ("System.Web.Services.Description.PortTypeCollection");
                                                o12.Add (ReadObject_PortType (false, true));
                                                n11++;
                                        }
+                                       else if (Reader.LocalName == "import" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b1) {
+                                               if (((object)o8) == null)
+                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.ImportCollection");
+                                               o8.Add (ReadObject_Import (false, true));
+                                               n7++;
+                                       }
+                                       else if (Reader.LocalName == "binding" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b5) {
+                                               if (((object)o14) == null)
+                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.BindingCollection");
+                                               o14.Add (ReadObject_Binding (false, true));
+                                               n13++;
+                                       }
+                                       else if (Reader.LocalName == "types" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b2) {
+                                               b2 = true;
+                                               ob.@Types = ReadObject_Types (false, true);
+                                       }
                                        else {
-                                               ServiceDescription.ReadExtension (Reader, ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -146,32 +155,28 @@ namespace System.Web.Services.Description
                        return ob;
                }
 
-               public System.Web.Services.Description.Binding ReadObject_Binding (bool isNullable, bool checkType)
+               public System.Web.Services.Description.Service ReadObject_Service (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.Binding ob = null;
+                       System.Web.Services.Description.Service ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "Binding" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "Service" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.Binding ();
+                       ob = new System.Web.Services.Description.Service ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
                                if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
-                               }
-                               else if (Reader.LocalName == "type" && Reader.NamespaceURI == "") {
-                                       ob.Type = ToXmlQualifiedName (Reader.Value);
+                                       ob.@Name = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -191,25 +196,25 @@ namespace System.Web.Services.Description
 
                        bool b17=false, b18=false;
 
-                       System.Web.Services.Description.OperationBindingCollection o20 = ob.Operations;
+                       System.Web.Services.Description.PortCollection o20;
+                       o20 = ob.@Ports;
                        int n19=0;
 
                        while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                        {
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
-                                       if (Reader.LocalName == "operation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b17) {
-                                               if (o20 == null)
-                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.OperationBindingCollection");
-                                               o20.Add (ReadObject_OperationBinding (false, true));
-                                               n19++;
+                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b17) {
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
-                                       else if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b18) {
-                                               b18 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                       else if (Reader.LocalName == "port" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b18) {
+                                               if (((object)o20) == null)
+                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.PortCollection");
+                                               o20.Add (ReadObject_Port (false, true));
+                                               n19++;
                                        }
                                        else {
-                                               ServiceDescription.ReadExtension (Reader, ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -224,29 +229,28 @@ namespace System.Web.Services.Description
                        return ob;
                }
 
-               public System.Web.Services.Description.Service ReadObject_Service (bool isNullable, bool checkType)
+               public System.Web.Services.Description.Message ReadObject_Message (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.Service ob = null;
+                       System.Web.Services.Description.Message ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "Service" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "Message" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.Service ();
+                       ob = new System.Web.Services.Description.Message ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
                                if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
+                                       ob.@Name = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -266,25 +270,25 @@ namespace System.Web.Services.Description
 
                        bool b21=false, b22=false;
 
-                       System.Web.Services.Description.PortCollection o24 = ob.Ports;
+                       System.Web.Services.Description.MessagePartCollection o24;
+                       o24 = ob.@Parts;
                        int n23=0;
 
                        while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                        {
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
-                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b22) {
-                                               b22 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b21) {
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
-                                       else if (Reader.LocalName == "port" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b21) {
-                                               if (o24 == null)
-                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.PortCollection");
-                                               o24.Add (ReadObject_Port (false, true));
+                                       else if (Reader.LocalName == "part" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b22) {
+                                               if (((object)o24) == null)
+                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.MessagePartCollection");
+                                               o24.Add (ReadObject_MessagePart (false, true));
                                                n23++;
                                        }
                                        else {
-                                               UnknownNode (ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -299,32 +303,28 @@ namespace System.Web.Services.Description
                        return ob;
                }
 
-               public System.Web.Services.Description.Import ReadObject_Import (bool isNullable, bool checkType)
+               public System.Web.Services.Description.PortType ReadObject_PortType (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.Import ob = null;
+                       System.Web.Services.Description.PortType ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "Import" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "PortType" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.Import ();
+                       ob = new System.Web.Services.Description.PortType ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
-                               if (Reader.LocalName == "namespace" && Reader.NamespaceURI == "") {
-                                       ob.Namespace = Reader.Value;
-                               }
-                               else if (Reader.LocalName == "location" && Reader.NamespaceURI == "") {
-                                       ob.Location = Reader.Value;
+                               if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
+                                       ob.@Name = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -342,18 +342,27 @@ namespace System.Web.Services.Description
                        Reader.ReadStartElement();
                        Reader.MoveToContent();
 
-                       bool b25=false;
+                       bool b25=false, b26=false;
+
+                       System.Web.Services.Description.OperationCollection o28;
+                       o28 = ob.@Operations;
+                       int n27=0;
 
                        while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                        {
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
                                        if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b25) {
-                                               b25 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
+                                       }
+                                       else if (Reader.LocalName == "operation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b26) {
+                                               if (((object)o28) == null)
+                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.OperationCollection");
+                                               o28.Add (ReadObject_Operation (false, true));
+                                               n27++;
                                        }
                                        else {
-                                               UnknownNode (ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -362,34 +371,37 @@ namespace System.Web.Services.Description
                                Reader.MoveToContent();
                        }
 
+
                        ReadEndElement();
 
                        return ob;
                }
 
-               public System.Web.Services.Description.Message ReadObject_Message (bool isNullable, bool checkType)
+               public System.Web.Services.Description.Import ReadObject_Import (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.Message ob = null;
+                       System.Web.Services.Description.Import ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "Message" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "Import" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.Message ();
+                       ob = new System.Web.Services.Description.Import ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
-                               if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
+                               if (Reader.LocalName == "location" && Reader.NamespaceURI == "") {
+                                       ob.@Location = Reader.Value;
+                               }
+                               else if (Reader.LocalName == "namespace" && Reader.NamespaceURI == "") {
+                                       ob.@Namespace = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -407,27 +419,17 @@ namespace System.Web.Services.Description
                        Reader.ReadStartElement();
                        Reader.MoveToContent();
 
-                       bool b26=false, b27=false;
-
-                       System.Web.Services.Description.MessagePartCollection o29 = ob.Parts;
-                       int n28=0;
+                       bool b29=false;
 
                        while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                        {
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
-                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b27) {
-                                               b27 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
-                                       }
-                                       else if (Reader.LocalName == "part" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b26) {
-                                               if (o29 == null)
-                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.MessagePartCollection");
-                                               o29.Add (ReadObject_MessagePart (false, true));
-                                               n28++;
+                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b29) {
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
                                        else {
-                                               UnknownNode (ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -436,34 +438,38 @@ namespace System.Web.Services.Description
                                Reader.MoveToContent();
                        }
 
-
                        ReadEndElement();
 
                        return ob;
                }
 
-               public System.Web.Services.Description.Types ReadObject_Types (bool isNullable, bool checkType)
+               public System.Web.Services.Description.Binding ReadObject_Binding (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.Types ob = null;
+                       System.Web.Services.Description.Binding ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "Types" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "Binding" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.Types ();
+                       ob = new System.Web.Services.Description.Binding ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
-                               if (IsXmlnsAttribute (Reader.Name)) {
+                               if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
+                                       ob.@Name = Reader.Value;
+                               }
+                               else if (Reader.LocalName == "type" && Reader.NamespaceURI == "") {
+                                       ob.@Type = ToXmlQualifiedName (Reader.Value);
+                               }
+                               else if (IsXmlnsAttribute (Reader.Name)) {
                                }
                                else {
                                        UnknownNode (ob);
@@ -481,25 +487,25 @@ namespace System.Web.Services.Description
 
                        bool b30=false, b31=false;
 
-                       System.Xml.Serialization.XmlSchemas o33 = ob.Schemas;
+                       System.Web.Services.Description.OperationBindingCollection o33;
+                       o33 = ob.@Operations;
                        int n32=0;
 
                        while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                        {
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
-                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b31) {
-                                               b31 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b30) {
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
-                                       else if (Reader.LocalName == "schema" && Reader.NamespaceURI == "http://www.w3.org/2001/XMLSchema" && !b30) {
-                                               if (o33 == null)
-                                                       throw CreateReadOnlyCollectionException ("System.Xml.Serialization.XmlSchemas");
-                                               o33.Add (ReadObject_XmlSchema (false, true));
+                                       else if (Reader.LocalName == "operation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b31) {
+                                               if (((object)o33) == null)
+                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.OperationBindingCollection");
+                                               o33.Add (ReadObject_OperationBinding (false, true));
                                                n32++;
                                        }
                                        else {
-                                               ServiceDescription.ReadExtension (Reader, ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -514,31 +520,27 @@ namespace System.Web.Services.Description
                        return ob;
                }
 
-               public System.Web.Services.Description.PortType ReadObject_PortType (bool isNullable, bool checkType)
+               public System.Web.Services.Description.Types ReadObject_Types (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.PortType ob = null;
+                       System.Web.Services.Description.Types ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "PortType" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "Types" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.PortType ();
+                       ob = new System.Web.Services.Description.Types ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
-                               if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
-                               }
-                               else if (IsXmlnsAttribute (Reader.Name)) {
+                               if (IsXmlnsAttribute (Reader.Name)) {
                                }
                                else {
                                        UnknownNode (ob);
@@ -556,25 +558,25 @@ namespace System.Web.Services.Description
 
                        bool b34=false, b35=false;
 
-                       System.Web.Services.Description.OperationCollection o37 = ob.Operations;
+                       System.Xml.Serialization.XmlSchemas o37;
+                       o37 = ob.@Schemas;
                        int n36=0;
 
                        while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                        {
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
-                                       if (Reader.LocalName == "operation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b34) {
-                                               if (o37 == null)
-                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.OperationCollection");
-                                               o37.Add (ReadObject_Operation (false, true));
-                                               n36++;
+                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b34) {
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
-                                       else if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b35) {
-                                               b35 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                       else if (Reader.LocalName == "schema" && Reader.NamespaceURI == "http://www.w3.org/2001/XMLSchema" && !b35) {
+                                               if (((object)o37) == null)
+                                                       throw CreateReadOnlyCollectionException ("System.Xml.Serialization.XmlSchemas");
+                                               o37.Add (ReadObject_XmlSchema (false, true));
+                                               n36++;
                                        }
                                        else {
-                                               UnknownNode (ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -589,29 +591,31 @@ namespace System.Web.Services.Description
                        return ob;
                }
 
-               public System.Web.Services.Description.OperationBinding ReadObject_OperationBinding (bool isNullable, bool checkType)
+               public System.Web.Services.Description.Port ReadObject_Port (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.OperationBinding ob = null;
+                       System.Web.Services.Description.Port ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "OperationBinding" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "Port" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.OperationBinding ();
+                       ob = new System.Web.Services.Description.Port ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
-                               if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
+                               if (Reader.LocalName == "binding" && Reader.NamespaceURI == "") {
+                                       ob.@Binding = ToXmlQualifiedName (Reader.Value);
+                               }
+                               else if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
+                                       ob.@Name = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -629,35 +633,17 @@ namespace System.Web.Services.Description
                        Reader.ReadStartElement();
                        Reader.MoveToContent();
 
-                       bool b38=false, b39=false, b40=false, b41=false;
-
-                       System.Web.Services.Description.FaultBindingCollection o43 = ob.Faults;
-                       int n42=0;
+                       bool b38=false;
 
                        while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                        {
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
-                                       if (Reader.LocalName == "input" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b39) {
-                                               b39 = true;
-                                               ob.Input = ReadObject_InputBinding (false, true);
-                                       }
-                                       else if (Reader.LocalName == "fault" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b38) {
-                                               if (o43 == null)
-                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.FaultBindingCollection");
-                                               o43.Add (ReadObject_FaultBinding (false, true));
-                                               n42++;
-                                       }
-                                       else if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b41) {
-                                               b41 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
-                                       }
-                                       else if (Reader.LocalName == "output" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b40) {
-                                               b40 = true;
-                                               ob.Output = ReadObject_OutputBinding (false, true);
+                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b38) {
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
                                        else {
-                                               ServiceDescription.ReadExtension (Reader, ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -666,38 +652,39 @@ namespace System.Web.Services.Description
                                Reader.MoveToContent();
                        }
 
-
                        ReadEndElement();
 
                        return ob;
                }
 
-               public System.Web.Services.Description.Port ReadObject_Port (bool isNullable, bool checkType)
+               public System.Web.Services.Description.MessagePart ReadObject_MessagePart (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.Port ob = null;
+                       System.Web.Services.Description.MessagePart ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "Port" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "MessagePart" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.Port ();
+                       ob = new System.Web.Services.Description.MessagePart ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
-                               if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
+                               if (Reader.LocalName == "element" && Reader.NamespaceURI == "") {
+                                       ob.@Element = ToXmlQualifiedName (Reader.Value);
+                               }
+                               else if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
+                                       ob.@Name = Reader.Value;
                                }
-                               else if (Reader.LocalName == "binding" && Reader.NamespaceURI == "") {
-                                       ob.Binding = ToXmlQualifiedName (Reader.Value);
+                               else if (Reader.LocalName == "type" && Reader.NamespaceURI == "") {
+                                       ob.@Type = ToXmlQualifiedName (Reader.Value);
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -715,18 +702,17 @@ namespace System.Web.Services.Description
                        Reader.ReadStartElement();
                        Reader.MoveToContent();
 
-                       bool b44=false;
+                       bool b39=false;
 
                        while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                        {
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
-                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b44) {
-                                               b44 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b39) {
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
                                        else {
-                                               ServiceDescription.ReadExtension (Reader, ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -740,35 +726,32 @@ namespace System.Web.Services.Description
                        return ob;
                }
 
-               public System.Web.Services.Description.MessagePart ReadObject_MessagePart (bool isNullable, bool checkType)
+               public System.Web.Services.Description.Operation ReadObject_Operation (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.MessagePart ob = null;
+                       System.Web.Services.Description.Operation ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "MessagePart" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "Operation" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.MessagePart ();
+                       ob = new System.Web.Services.Description.Operation ();
 
                        Reader.MoveToElement();
 
+                       ob.@ParameterOrderString = "";
                        while (Reader.MoveToNextAttribute())
                        {
                                if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
-                               }
-                               else if (Reader.LocalName == "element" && Reader.NamespaceURI == "") {
-                                       ob.Element = ToXmlQualifiedName (Reader.Value);
+                                       ob.@Name = Reader.Value;
                                }
-                               else if (Reader.LocalName == "type" && Reader.NamespaceURI == "") {
-                                       ob.Type = ToXmlQualifiedName (Reader.Value);
+                               else if (Reader.LocalName == "parameterOrder" && Reader.NamespaceURI == "") {
+                                       ob.@ParameterOrderString = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -786,18 +769,41 @@ namespace System.Web.Services.Description
                        Reader.ReadStartElement();
                        Reader.MoveToContent();
 
-                       bool b45=false;
+                       bool b40=false, b41=false, b42=false;
+
+                       System.Web.Services.Description.OperationFaultCollection o44;
+                       o44 = ob.@Faults;
+                       System.Web.Services.Description.OperationMessageCollection o46;
+                       o46 = ob.@Messages;
+                       int n43=0, n45=0;
 
                        while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                        {
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
-                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b45) {
-                                               b45 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b40) {
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
+                                       }
+                                       else if (Reader.LocalName == "fault" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b41) {
+                                               if (((object)o44) == null)
+                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.OperationFaultCollection");
+                                               o44.Add (ReadObject_OperationFault (false, true));
+                                               n43++;
+                                       }
+                                       else if (Reader.LocalName == "input" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b42) {
+                                               if (((object)o46) == null)
+                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.OperationMessageCollection");
+                                               o46.Add (ReadObject_OperationInput (false, true));
+                                               n45++;
+                                       }
+                                       else if (Reader.LocalName == "output" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b42) {
+                                               if (((object)o46) == null)
+                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.OperationMessageCollection");
+                                               o46.Add (ReadObject_OperationOutput (false, true));
+                                               n45++;
                                        }
                                        else {
-                                               UnknownNode (ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -806,45 +812,34 @@ namespace System.Web.Services.Description
                                Reader.MoveToContent();
                        }
 
-                       ReadEndElement();
 
-                       return ob;
-               }
+                       ReadEndElement();
 
-               public System.Xml.Schema.XmlSchema ReadObject_XmlSchema (bool isNullable, bool checkType)
-               {
-                       System.Xml.Schema.XmlSchema ob = null;
-                       ob = System.Xml.Schema.XmlSchema.Read (Reader, null);
-                       Reader.Read ();
                        return ob;
                }
 
-               public System.Web.Services.Description.Operation ReadObject_Operation (bool isNullable, bool checkType)
+               public System.Web.Services.Description.OperationBinding ReadObject_OperationBinding (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.Operation ob = null;
+                       System.Web.Services.Description.OperationBinding ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "Operation" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "OperationBinding" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.Operation ();
+                       ob = new System.Web.Services.Description.OperationBinding ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
                                if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
-                               }
-                               else if (Reader.LocalName == "parameterOrder" && Reader.NamespaceURI == "") {
-                                       ob.ParameterOrderString = Reader.Value;
+                                       ob.@Name = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -862,40 +857,35 @@ namespace System.Web.Services.Description
                        Reader.ReadStartElement();
                        Reader.MoveToContent();
 
-                       bool b46=false, b47=false, b48=false;
+                       bool b47=false, b48=false, b49=false, b50=false;
 
-                       System.Web.Services.Description.OperationFaultCollection o50 = ob.Faults;
-                       System.Web.Services.Description.OperationMessageCollection o52 = ob.Messages;
-                       int n49=0, n51=0;
+                       System.Web.Services.Description.FaultBindingCollection o52;
+                       o52 = ob.@Faults;
+                       int n51=0;
 
                        while (Reader.NodeType != System.Xml.XmlNodeType.EndElement) 
                        {
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
-                                       if (Reader.LocalName == "input" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b47) {
-                                               if (o52 == null)
-                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.OperationMessageCollection");
-                                               o52.Add (ReadObject_OperationInput (false, true));
-                                               n51++;
+                                       if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b47) {
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
-                                       else if (Reader.LocalName == "fault" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b46) {
-                                               if (o50 == null)
-                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.OperationFaultCollection");
-                                               o50.Add (ReadObject_OperationFault (false, true));
-                                               n49++;
+                                       else if (Reader.LocalName == "fault" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b48) {
+                                               if (((object)o52) == null)
+                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.FaultBindingCollection");
+                                               o52.Add (ReadObject_FaultBinding (false, true));
+                                               n51++;
                                        }
-                                       else if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b48) {
-                                               b48 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                       else if (Reader.LocalName == "input" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b49) {
+                                               b49 = true;
+                                               ob.@Input = ReadObject_InputBinding (false, true);
                                        }
-                                       else if (Reader.LocalName == "output" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b47) {
-                                               if (o52 == null)
-                                                       throw CreateReadOnlyCollectionException ("System.Web.Services.Description.OperationMessageCollection");
-                                               o52.Add (ReadObject_OperationOutput (false, true));
-                                               n51++;
+                                       else if (Reader.LocalName == "output" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b50) {
+                                               b50 = true;
+                                               ob.@Output = ReadObject_OutputBinding (false, true);
                                        }
                                        else {
-                                               UnknownNode (ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -910,29 +900,38 @@ namespace System.Web.Services.Description
                        return ob;
                }
 
-               public System.Web.Services.Description.InputBinding ReadObject_InputBinding (bool isNullable, bool checkType)
+               public System.Xml.Schema.XmlSchema ReadObject_XmlSchema (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.InputBinding ob = null;
+                       System.Xml.Schema.XmlSchema ob = null;
+                       ob = System.Xml.Schema.XmlSchema.Read (Reader, null); Reader.Read ();
+                       return ob;
+               }
+
+               public System.Web.Services.Description.OperationFault ReadObject_OperationFault (bool isNullable, bool checkType)
+               {
+                       System.Web.Services.Description.OperationFault ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "InputBinding" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "OperationFault" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.InputBinding ();
+                       ob = new System.Web.Services.Description.OperationFault ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
-                               if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
+                               if (Reader.LocalName == "message" && Reader.NamespaceURI == "") {
+                                       ob.@Message = ToXmlQualifiedName (Reader.Value);
+                               }
+                               else if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
+                                       ob.@Name = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -957,11 +956,10 @@ namespace System.Web.Services.Description
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
                                        if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b53) {
-                                               b53 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
                                        else {
-                                               ServiceDescription.ReadExtension (Reader, ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -975,29 +973,31 @@ namespace System.Web.Services.Description
                        return ob;
                }
 
-               public System.Web.Services.Description.FaultBinding ReadObject_FaultBinding (bool isNullable, bool checkType)
+               public System.Web.Services.Description.OperationInput ReadObject_OperationInput (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.FaultBinding ob = null;
+                       System.Web.Services.Description.OperationInput ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "FaultBinding" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "OperationInput" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.FaultBinding ();
+                       ob = new System.Web.Services.Description.OperationInput ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
-                               if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
+                               if (Reader.LocalName == "message" && Reader.NamespaceURI == "") {
+                                       ob.@Message = ToXmlQualifiedName (Reader.Value);
+                               }
+                               else if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
+                                       ob.@Name = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -1022,11 +1022,10 @@ namespace System.Web.Services.Description
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
                                        if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b54) {
-                                               b54 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
                                        else {
-                                               ServiceDescription.ReadExtension (Reader, ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -1040,29 +1039,31 @@ namespace System.Web.Services.Description
                        return ob;
                }
 
-               public System.Web.Services.Description.OutputBinding ReadObject_OutputBinding (bool isNullable, bool checkType)
+               public System.Web.Services.Description.OperationOutput ReadObject_OperationOutput (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.OutputBinding ob = null;
+                       System.Web.Services.Description.OperationOutput ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "OutputBinding" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "OperationOutput" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.OutputBinding ();
+                       ob = new System.Web.Services.Description.OperationOutput ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
-                               if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
+                               if (Reader.LocalName == "message" && Reader.NamespaceURI == "") {
+                                       ob.@Message = ToXmlQualifiedName (Reader.Value);
+                               }
+                               else if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
+                                       ob.@Name = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -1087,11 +1088,10 @@ namespace System.Web.Services.Description
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
                                        if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b55) {
-                                               b55 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
                                        else {
-                                               ServiceDescription.ReadExtension (Reader, ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -1105,32 +1105,28 @@ namespace System.Web.Services.Description
                        return ob;
                }
 
-               public System.Web.Services.Description.OperationInput ReadObject_OperationInput (bool isNullable, bool checkType)
+               public System.Web.Services.Description.FaultBinding ReadObject_FaultBinding (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.OperationInput ob = null;
+                       System.Web.Services.Description.FaultBinding ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "OperationInput" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "FaultBinding" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.OperationInput ();
+                       ob = new System.Web.Services.Description.FaultBinding ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
                                if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
-                               }
-                               else if (Reader.LocalName == "message" && Reader.NamespaceURI == "") {
-                                       ob.Message = ToXmlQualifiedName (Reader.Value);
+                                       ob.@Name = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -1155,11 +1151,10 @@ namespace System.Web.Services.Description
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
                                        if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b56) {
-                                               b56 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
                                        else {
-                                               UnknownNode (ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -1173,32 +1168,28 @@ namespace System.Web.Services.Description
                        return ob;
                }
 
-               public System.Web.Services.Description.OperationFault ReadObject_OperationFault (bool isNullable, bool checkType)
+               public System.Web.Services.Description.InputBinding ReadObject_InputBinding (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.OperationFault ob = null;
+                       System.Web.Services.Description.InputBinding ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "OperationFault" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "InputBinding" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.OperationFault ();
+                       ob = new System.Web.Services.Description.InputBinding ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
                                if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
-                               }
-                               else if (Reader.LocalName == "message" && Reader.NamespaceURI == "") {
-                                       ob.Message = ToXmlQualifiedName (Reader.Value);
+                                       ob.@Name = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -1223,11 +1214,10 @@ namespace System.Web.Services.Description
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
                                        if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b57) {
-                                               b57 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
                                        else {
-                                               UnknownNode (ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -1241,32 +1231,28 @@ namespace System.Web.Services.Description
                        return ob;
                }
 
-               public System.Web.Services.Description.OperationOutput ReadObject_OperationOutput (bool isNullable, bool checkType)
+               public System.Web.Services.Description.OutputBinding ReadObject_OutputBinding (bool isNullable, bool checkType)
                {
-                       System.Web.Services.Description.OperationOutput ob = null;
+                       System.Web.Services.Description.OutputBinding ob = null;
                        if (isNullable && ReadNull()) return null;
 
                        if (checkType) 
                        {
                                System.Xml.XmlQualifiedName t = GetXsiType();
-                               if (t != null) 
-                               {
-                                       if (t.Name != "OperationOutput" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
-                                               throw CreateUnknownTypeException(t);
-                               }
+                               if (t == null)
+                               { }
+                               else if (t.Name != "OutputBinding" || t.Namespace != "http://schemas.xmlsoap.org/wsdl/")
+                                       throw CreateUnknownTypeException(t);
                        }
 
-                       ob = new System.Web.Services.Description.OperationOutput ();
+                       ob = new System.Web.Services.Description.OutputBinding ();
 
                        Reader.MoveToElement();
 
                        while (Reader.MoveToNextAttribute())
                        {
                                if (Reader.LocalName == "name" && Reader.NamespaceURI == "") {
-                                       ob.Name = XmlConvert.DecodeName(Reader.Value);
-                               }
-                               else if (Reader.LocalName == "message" && Reader.NamespaceURI == "") {
-                                       ob.Message = ToXmlQualifiedName (Reader.Value);
+                                       ob.@Name = Reader.Value;
                                }
                                else if (IsXmlnsAttribute (Reader.Name)) {
                                }
@@ -1291,11 +1277,10 @@ namespace System.Web.Services.Description
                                if (Reader.NodeType == System.Xml.XmlNodeType.Element) 
                                {
                                        if (Reader.LocalName == "documentation" && Reader.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/" && !b58) {
-                                               b58 = true;
-                                               ob.Documentation = Reader.ReadElementString ();
+                                               ob.@DocumentationElement = ((System.Xml.XmlElement) ReadXmlNode (false));
                                        }
                                        else {
-                                               UnknownNode (ob);
+                                               ServiceDescription.ReadExtension (Document, Reader, ob);
                                        }
                                }
                                else
@@ -1321,97 +1306,136 @@ namespace System.Web.Services.Description
 
        internal class ServiceDescriptionWriterBase : XmlSerializationWriter
        {
-               public void WriteTree (System.Web.Services.Description.ServiceDescription ob)
+               const string xmlNamespace = "http://www.w3.org/2000/xmlns/";
+               public void WriteRoot_ServiceDescription (object o)
                {
                        WriteStartDocument ();
+                       System.Web.Services.Description.ServiceDescription ob = (System.Web.Services.Description.ServiceDescription) o;
                        TopLevelElement ();
                        WriteObject_ServiceDescription (ob, "definitions", "http://schemas.xmlsoap.org/wsdl/", true, false, true);
                }
 
                void WriteObject_ServiceDescription (System.Web.Services.Description.ServiceDescription ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.ServiceDescription))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("ServiceDescription", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("name", "", XmlConvert.EncodeNmToken(ob.Name));
-                       WriteAttribute ("targetNamespace", "", ob.TargetNamespace);
+                       WriteAttribute ("name", "", ob.@Name);
+                       WriteAttribute ("targetNamespace", "", ob.@TargetNamespace);
 
                        ServiceDescription.WriteExtensions (Writer, ob);
-                       if (ob.Imports != null) {
-                               for (int n59 = 0; n59 < ob.Imports.Count; n59++) {
-                                       WriteObject_Import (ob.Imports[n59], "import", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o59 = ob.@DocumentationElement;
+                               if (o59 is XmlElement) {
+                               if ((o59.Name == "documentation" && o59.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o59.WriteTo (Writer);
+                                       WriteElementLiteral (o59, "", "", false, true);
                                }
+                               else
+                                       throw CreateUnknownAnyElementException (o59.Name, o59.NamespaceURI);
                        }
-                       WriteObject_Types (ob.Types, "types", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
-                       if (ob.Messages != null) {
-                               for (int n60 = 0; n60 < ob.Messages.Count; n60++) {
-                                       WriteObject_Message (ob.Messages[n60], "message", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       if (ob.@Imports != null) {
+                               for (int n60 = 0; n60 < ob.@Imports.Count; n60++) {
+                                       WriteObject_Import (ob.@Imports[n60], "import", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
                                }
                        }
-                       if (ob.PortTypes != null) {
-                               for (int n61 = 0; n61 < ob.PortTypes.Count; n61++) {
-                                       WriteObject_PortType (ob.PortTypes[n61], "portType", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       WriteObject_Types (ob.@Types, "types", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       if (ob.@Messages != null) {
+                               for (int n61 = 0; n61 < ob.@Messages.Count; n61++) {
+                                       WriteObject_Message (ob.@Messages[n61], "message", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
                                }
                        }
-                       if (ob.Bindings != null) {
-                               for (int n62 = 0; n62 < ob.Bindings.Count; n62++) {
-                                       WriteObject_Binding (ob.Bindings[n62], "binding", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       if (ob.@PortTypes != null) {
+                               for (int n62 = 0; n62 < ob.@PortTypes.Count; n62++) {
+                                       WriteObject_PortType (ob.@PortTypes[n62], "portType", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
                                }
                        }
-                       if (ob.Services != null) {
-                               for (int n63 = 0; n63 < ob.Services.Count; n63++) {
-                                       WriteObject_Service (ob.Services[n63], "service", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       if (ob.@Bindings != null) {
+                               for (int n63 = 0; n63 < ob.@Bindings.Count; n63++) {
+                                       WriteObject_Binding (ob.@Bindings[n63], "binding", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
                                }
                        }
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@Services != null) {
+                               for (int n64 = 0; n64 < ob.@Services.Count; n64++) {
+                                       WriteObject_Service (ob.@Services[n64], "service", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                               }
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_Import (System.Web.Services.Description.Import ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.Import))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("Import", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("namespace", "", ob.Namespace);
-                       WriteAttribute ("location", "", ob.Location);
+                       WriteAttribute ("location", "", ob.@Location);
+                       WriteAttribute ("namespace", "", ob.@Namespace);
 
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o65 = ob.@DocumentationElement;
+                               if (o65 is XmlElement) {
+                               if ((o65.Name == "documentation" && o65.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o65.WriteTo (Writer);
+                                       WriteElementLiteral (o65, "", "", false, true);
+                               }
+                               else
+                                       throw CreateUnknownAnyElementException (o65.Name, o65.NamespaceURI);
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_Types (System.Web.Services.Description.Types ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.Types))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
@@ -1419,127 +1443,195 @@ namespace System.Web.Services.Description
                        if (needType) WriteXsiType("Types", "http://schemas.xmlsoap.org/wsdl/");
 
                        ServiceDescription.WriteExtensions (Writer, ob);
-                       if (ob.Schemas != null) {
-                               for (int n64 = 0; n64 < ob.Schemas.Count; n64++) {
-                                       WriteObject_XmlSchema (ob.Schemas[n64], "schema", "http://www.w3.org/2001/XMLSchema", false, false, true);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o66 = ob.@DocumentationElement;
+                               if (o66 is XmlElement) {
+                               if ((o66.Name == "documentation" && o66.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o66.WriteTo (Writer);
+                                       WriteElementLiteral (o66, "", "", false, true);
                                }
+                               else
+                                       throw CreateUnknownAnyElementException (o66.Name, o66.NamespaceURI);
                        }
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@Schemas != null) {
+                               for (int n67 = 0; n67 < ob.@Schemas.Count; n67++) {
+                                       WriteObject_XmlSchema (ob.@Schemas[n67], "schema", "http://www.w3.org/2001/XMLSchema", false, false, true);
+                               }
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_Message (System.Web.Services.Description.Message ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.Message))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("Message", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("name", "", XmlConvert.EncodeName(ob.Name));
+                       WriteAttribute ("name", "", ob.@Name);
 
-                       if (ob.Parts != null) {
-                               for (int n65 = 0; n65 < ob.Parts.Count; n65++) {
-                                       WriteObject_MessagePart (ob.Parts[n65], "part", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o68 = ob.@DocumentationElement;
+                               if (o68 is XmlElement) {
+                               if ((o68.Name == "documentation" && o68.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o68.WriteTo (Writer);
+                                       WriteElementLiteral (o68, "", "", false, true);
                                }
+                               else
+                                       throw CreateUnknownAnyElementException (o68.Name, o68.NamespaceURI);
                        }
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@Parts != null) {
+                               for (int n69 = 0; n69 < ob.@Parts.Count; n69++) {
+                                       WriteObject_MessagePart (ob.@Parts[n69], "part", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                               }
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_PortType (System.Web.Services.Description.PortType ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.PortType))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("PortType", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("name", "", XmlConvert.EncodeName(ob.Name));
+                       WriteAttribute ("name", "", ob.@Name);
 
-                       if (ob.Operations != null) {
-                               for (int n66 = 0; n66 < ob.Operations.Count; n66++) {
-                                       WriteObject_Operation (ob.Operations[n66], "operation", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o70 = ob.@DocumentationElement;
+                               if (o70 is XmlElement) {
+                               if ((o70.Name == "documentation" && o70.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o70.WriteTo (Writer);
+                                       WriteElementLiteral (o70, "", "", false, true);
                                }
+                               else
+                                       throw CreateUnknownAnyElementException (o70.Name, o70.NamespaceURI);
                        }
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@Operations != null) {
+                               for (int n71 = 0; n71 < ob.@Operations.Count; n71++) {
+                                       WriteObject_Operation (ob.@Operations[n71], "operation", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                               }
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_Binding (System.Web.Services.Description.Binding ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.Binding))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("Binding", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("name", "", XmlConvert.EncodeName(ob.Name));
-                       WriteAttribute ("type", "", FromXmlQualifiedName (ob.Type));
+                       WriteAttribute ("name", "", ob.@Name);
+                       WriteAttribute ("type", "", FromXmlQualifiedName (ob.@Type));
 
                        ServiceDescription.WriteExtensions (Writer, ob);
-                       if (ob.Operations != null) {
-                               for (int n67 = 0; n67 < ob.Operations.Count; n67++) {
-                                       WriteObject_OperationBinding (ob.Operations[n67], "operation", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o72 = ob.@DocumentationElement;
+                               if (o72 is XmlElement) {
+                               if ((o72.Name == "documentation" && o72.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o72.WriteTo (Writer);
+                                       WriteElementLiteral (o72, "", "", false, true);
                                }
+                               else
+                                       throw CreateUnknownAnyElementException (o72.Name, o72.NamespaceURI);
                        }
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@Operations != null) {
+                               for (int n73 = 0; n73 < ob.@Operations.Count; n73++) {
+                                       WriteObject_OperationBinding (ob.@Operations[n73], "operation", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                               }
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_Service (System.Web.Services.Description.Service ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.Service))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("Service", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("name", "", XmlConvert.EncodeName(ob.Name));
+                       WriteAttribute ("name", "", ob.@Name);
 
-                       if (ob.Ports != null) {
-                               for (int n68 = 0; n68 < ob.Ports.Count; n68++) {
-                                       WriteObject_Port (ob.Ports[n68], "port", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o74 = ob.@DocumentationElement;
+                               if (o74 is XmlElement) {
+                               if ((o74.Name == "documentation" && o74.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o74.WriteTo (Writer);
+                                       WriteElementLiteral (o74, "", "", false, true);
                                }
+                               else
+                                       throw CreateUnknownAnyElementException (o74.Name, o74.NamespaceURI);
                        }
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@Ports != null) {
+                               for (int n75 = 0; n75 < ob.@Ports.Count; n75++) {
+                                       WriteObject_Port (ob.@Ports[n75], "port", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                               }
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
@@ -1551,273 +1643,418 @@ namespace System.Web.Services.Description
 
                void WriteObject_MessagePart (System.Web.Services.Description.MessagePart ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.MessagePart))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("MessagePart", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("name", "", XmlConvert.EncodeNmToken(ob.Name));
-                       WriteAttribute ("element", "", FromXmlQualifiedName (ob.Element));
-                       WriteAttribute ("type", "", FromXmlQualifiedName (ob.Type));
+                       WriteAttribute ("element", "", FromXmlQualifiedName (ob.@Element));
+                       WriteAttribute ("name", "", ob.@Name);
+                       WriteAttribute ("type", "", FromXmlQualifiedName (ob.@Type));
 
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o76 = ob.@DocumentationElement;
+                               if (o76 is XmlElement) {
+                               if ((o76.Name == "documentation" && o76.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o76.WriteTo (Writer);
+                                       WriteElementLiteral (o76, "", "", false, true);
+                               }
+                               else
+                                       throw CreateUnknownAnyElementException (o76.Name, o76.NamespaceURI);
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_Operation (System.Web.Services.Description.Operation ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.Operation))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("Operation", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("name", "", XmlConvert.EncodeName(ob.Name));
-                       if (ob.ParameterOrderString != "") {
-                               WriteAttribute ("parameterOrder", "", ob.ParameterOrderString);
+                       WriteAttribute ("name", "", ob.@Name);
+                       if (ob.@ParameterOrderString != "") {
+                               WriteAttribute ("parameterOrder", "", ob.@ParameterOrderString);
                        }
 
-                       if (ob.Faults != null) {
-                               for (int n69 = 0; n69 < ob.Faults.Count; n69++) {
-                                       WriteObject_OperationFault (ob.Faults[n69], "fault", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o77 = ob.@DocumentationElement;
+                               if (o77 is XmlElement) {
+                               if ((o77.Name == "documentation" && o77.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o77.WriteTo (Writer);
+                                       WriteElementLiteral (o77, "", "", false, true);
+                               }
+                               else
+                                       throw CreateUnknownAnyElementException (o77.Name, o77.NamespaceURI);
+                       }
+                       if (ob.@Faults != null) {
+                               for (int n78 = 0; n78 < ob.@Faults.Count; n78++) {
+                                       WriteObject_OperationFault (ob.@Faults[n78], "fault", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
                                }
                        }
-                       if (ob.Messages != null) {
-                               for (int n70 = 0; n70 < ob.Messages.Count; n70++) {
-                                       if (ob.Messages[n70] is System.Web.Services.Description.OperationInput) {
-                                               WriteObject_OperationInput (((System.Web.Services.Description.OperationInput) ob.Messages[n70]), "input", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       if (ob.@Messages != null) {
+                               for (int n79 = 0; n79 < ob.@Messages.Count; n79++) {
+                                       if (((object)ob.@Messages[n79]) == null) { }
+                                       else if (ob.@Messages[n79].GetType() == typeof(System.Web.Services.Description.OperationInput)) {
+                                               WriteObject_OperationInput (((System.Web.Services.Description.OperationInput) ob.@Messages[n79]), "input", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
                                        }
-                                       else if (ob.Messages[n70] is System.Web.Services.Description.OperationOutput) {
-                                               WriteObject_OperationOutput (((System.Web.Services.Description.OperationOutput) ob.Messages[n70]), "output", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                                       else if (ob.@Messages[n79].GetType() == typeof(System.Web.Services.Description.OperationOutput)) {
+                                               WriteObject_OperationOutput (((System.Web.Services.Description.OperationOutput) ob.@Messages[n79]), "output", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
                                        }
-                                       else if (ob.Messages[n70] != null) throw CreateUnknownTypeException (ob.Messages[n70]);
+                                       else throw CreateUnknownTypeException (ob.@Messages[n79]);
                                }
                        }
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
-                       }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_OperationBinding (System.Web.Services.Description.OperationBinding ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.OperationBinding))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("OperationBinding", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("name", "", XmlConvert.EncodeName(ob.Name));
+                       WriteAttribute ("name", "", ob.@Name);
 
                        ServiceDescription.WriteExtensions (Writer, ob);
-                       if (ob.Faults != null) {
-                               for (int n71 = 0; n71 < ob.Faults.Count; n71++) {
-                                       WriteObject_FaultBinding (ob.Faults[n71], "fault", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o80 = ob.@DocumentationElement;
+                               if (o80 is XmlElement) {
+                               if ((o80.Name == "documentation" && o80.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o80.WriteTo (Writer);
+                                       WriteElementLiteral (o80, "", "", false, true);
                                }
+                               else
+                                       throw CreateUnknownAnyElementException (o80.Name, o80.NamespaceURI);
                        }
-                       WriteObject_InputBinding (ob.Input, "input", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
-                       WriteObject_OutputBinding (ob.Output, "output", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@Faults != null) {
+                               for (int n81 = 0; n81 < ob.@Faults.Count; n81++) {
+                                       WriteObject_FaultBinding (ob.@Faults[n81], "fault", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                               }
                        }
+                       WriteObject_InputBinding (ob.@Input, "input", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
+                       WriteObject_OutputBinding (ob.@Output, "output", "http://schemas.xmlsoap.org/wsdl/", false, false, true);
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_Port (System.Web.Services.Description.Port ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.Port))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("Port", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("name", "", XmlConvert.EncodeName(ob.Name));
-                       WriteAttribute ("binding", "", FromXmlQualifiedName (ob.Binding));
+                       WriteAttribute ("binding", "", FromXmlQualifiedName (ob.@Binding));
+                       WriteAttribute ("name", "", ob.@Name);
 
                        ServiceDescription.WriteExtensions (Writer, ob);
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o82 = ob.@DocumentationElement;
+                               if (o82 is XmlElement) {
+                               if ((o82.Name == "documentation" && o82.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o82.WriteTo (Writer);
+                                       WriteElementLiteral (o82, "", "", false, true);
+                               }
+                               else
+                                       throw CreateUnknownAnyElementException (o82.Name, o82.NamespaceURI);
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_OperationFault (System.Web.Services.Description.OperationFault ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.OperationFault))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("OperationFault", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("name", "", XmlConvert.EncodeNmToken(ob.Name));
-                       WriteAttribute ("message", "", FromXmlQualifiedName (ob.Message));
+                       WriteAttribute ("message", "", FromXmlQualifiedName (ob.@Message));
+                       WriteAttribute ("name", "", ob.@Name);
 
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o83 = ob.@DocumentationElement;
+                               if (o83 is XmlElement) {
+                               if ((o83.Name == "documentation" && o83.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o83.WriteTo (Writer);
+                                       WriteElementLiteral (o83, "", "", false, true);
+                               }
+                               else
+                                       throw CreateUnknownAnyElementException (o83.Name, o83.NamespaceURI);
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_OperationInput (System.Web.Services.Description.OperationInput ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.OperationInput))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("OperationInput", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("name", "", XmlConvert.EncodeNmToken(ob.Name));
-                       WriteAttribute ("message", "", FromXmlQualifiedName (ob.Message));
+                       WriteAttribute ("message", "", FromXmlQualifiedName (ob.@Message));
+                       WriteAttribute ("name", "", ob.@Name);
 
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o84 = ob.@DocumentationElement;
+                               if (o84 is XmlElement) {
+                               if ((o84.Name == "documentation" && o84.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o84.WriteTo (Writer);
+                                       WriteElementLiteral (o84, "", "", false, true);
+                               }
+                               else
+                                       throw CreateUnknownAnyElementException (o84.Name, o84.NamespaceURI);
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_OperationOutput (System.Web.Services.Description.OperationOutput ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.OperationOutput))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("OperationOutput", "http://schemas.xmlsoap.org/wsdl/");
 
-                       WriteAttribute ("name", "", XmlConvert.EncodeNmToken(ob.Name));
-                       WriteAttribute ("message", "", FromXmlQualifiedName (ob.Message));
+                       WriteAttribute ("message", "", FromXmlQualifiedName (ob.@Message));
+                       WriteAttribute ("name", "", ob.@Name);
 
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o85 = ob.@DocumentationElement;
+                               if (o85 is XmlElement) {
+                               if ((o85.Name == "documentation" && o85.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o85.WriteTo (Writer);
+                                       WriteElementLiteral (o85, "", "", false, true);
+                               }
+                               else
+                                       throw CreateUnknownAnyElementException (o85.Name, o85.NamespaceURI);
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_FaultBinding (System.Web.Services.Description.FaultBinding ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.FaultBinding))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("FaultBinding", "http://schemas.xmlsoap.org/wsdl/");
 
-                       if (ob.Name != "") {
-                               WriteAttribute ("name", "", XmlConvert.EncodeNmToken(ob.Name));
-                       }
+                       WriteAttribute ("name", "", ob.@Name);
 
                        ServiceDescription.WriteExtensions (Writer, ob);
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o86 = ob.@DocumentationElement;
+                               if (o86 is XmlElement) {
+                               if ((o86.Name == "documentation" && o86.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o86.WriteTo (Writer);
+                                       WriteElementLiteral (o86, "", "", false, true);
+                               }
+                               else
+                                       throw CreateUnknownAnyElementException (o86.Name, o86.NamespaceURI);
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_InputBinding (System.Web.Services.Description.InputBinding ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.InputBinding))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("InputBinding", "http://schemas.xmlsoap.org/wsdl/");
 
-                       if (ob.Name != "") {
-                               WriteAttribute ("name", "", XmlConvert.EncodeNmToken(ob.Name));
-                       }
+                       WriteAttribute ("name", "", ob.@Name);
 
                        ServiceDescription.WriteExtensions (Writer, ob);
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o87 = ob.@DocumentationElement;
+                               if (o87 is XmlElement) {
+                               if ((o87.Name == "documentation" && o87.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o87.WriteTo (Writer);
+                                       WriteElementLiteral (o87, "", "", false, true);
+                               }
+                               else
+                                       throw CreateUnknownAnyElementException (o87.Name, o87.NamespaceURI);
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
 
                void WriteObject_OutputBinding (System.Web.Services.Description.OutputBinding ob, string element, string namesp, bool isNullable, bool needType, bool writeWrappingElem)
                {
-                       if (ob == null)
+                       if (((object)ob) == null)
                        {
                                if (isNullable)
                                        WriteNullTagLiteral(element, namesp);
                                return;
                        }
 
+                       System.Type type = ob.GetType ();
+                       if (type == typeof(System.Web.Services.Description.OutputBinding))
+                       { }
+                       else {
+                               throw CreateUnknownTypeException (ob);
+                       }
+
                        if (writeWrappingElem) {
                                WriteStartElement (element, namesp, ob);
                        }
 
                        if (needType) WriteXsiType("OutputBinding", "http://schemas.xmlsoap.org/wsdl/");
 
-                       if (ob.Name != "") {
-                               WriteAttribute ("name", "", XmlConvert.EncodeNmToken(ob.Name));
-                       }
+                       WriteAttribute ("name", "", ob.@Name);
 
                        ServiceDescription.WriteExtensions (Writer, ob);
-                       if (ob.Documentation != "") {
-                               WriteElementString ("documentation", "http://schemas.xmlsoap.org/wsdl/", ob.Documentation);
+                       if (ob.@DocumentationElement != null) {
+                               XmlNode o88 = ob.@DocumentationElement;
+                               if (o88 is XmlElement) {
+                               if ((o88.Name == "documentation" && o88.NamespaceURI == "http://schemas.xmlsoap.org/wsdl/")) {
+                                       }
+                                       else o88.WriteTo (Writer);
+                                       WriteElementLiteral (o88, "", "", false, true);
+                               }
+                               else
+                                       throw CreateUnknownAnyElementException (o88.Name, o88.NamespaceURI);
                        }
                        if (writeWrappingElem) WriteEndElement (ob);
                }
@@ -1827,4 +2064,7 @@ namespace System.Web.Services.Description
                }
 
        }
+
 }
+
+#endif