1 //-----------------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 //-----------------------------------------------------------------------------
4 namespace System.ServiceModel
7 using System.ServiceModel.Channels;
9 using System.Xml.Schema;
10 using System.Xml.Serialization;
11 using System.Collections;
15 [XmlSchemaProvider("GetSchema")]
16 [XmlRoot(AddressingStrings.EndpointReference, Namespace = Addressing200408Strings.Namespace)]
17 public class EndpointAddressAugust2004 : IXmlSerializable
19 static XmlQualifiedName eprType;
21 EndpointAddress address;
23 // for IXmlSerializable
24 EndpointAddressAugust2004()
29 EndpointAddressAugust2004(EndpointAddress address)
31 this.address = address;
34 public static EndpointAddressAugust2004 FromEndpointAddress(EndpointAddress address)
38 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("address");
40 return new EndpointAddressAugust2004(address);
43 public EndpointAddress ToEndpointAddress()
48 void IXmlSerializable.ReadXml(XmlReader reader)
50 this.address = EndpointAddress.ReadFrom(AddressingVersion.WSAddressingAugust2004, XmlDictionaryReader.CreateDictionaryReader(reader));
53 void IXmlSerializable.WriteXml(XmlWriter writer)
55 this.address.WriteContentsTo(AddressingVersion.WSAddressingAugust2004, XmlDictionaryWriter.CreateDictionaryWriter(writer));
58 static XmlQualifiedName EprType
63 eprType = new XmlQualifiedName(AddressingStrings.EndpointReferenceType, Addressing200408Strings.Namespace);
68 static XmlSchema GetEprSchema()
70 using (XmlTextReader reader = new XmlTextReader(new StringReader(Schema)))
72 return XmlSchema.Read(reader, null);
76 public static XmlQualifiedName GetSchema(XmlSchemaSet xmlSchemaSet)
78 if (xmlSchemaSet == null)
79 throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("xmlSchemaSet");
80 XmlQualifiedName eprType = EprType;
81 XmlSchema eprSchema = GetEprSchema();
82 ICollection schemas = xmlSchemaSet.Schemas(Addressing200408Strings.Namespace);
83 if (schemas == null || schemas.Count == 0)
84 xmlSchemaSet.Add(eprSchema);
87 XmlSchema schemaToAdd = null;
88 foreach (XmlSchema xmlSchema in schemas)
90 if (xmlSchema.SchemaTypes.Contains(eprType))
96 schemaToAdd = xmlSchema;
98 if (schemaToAdd != null)
100 foreach (XmlQualifiedName prefixNsPair in eprSchema.Namespaces.ToArray())
101 schemaToAdd.Namespaces.Add(prefixNsPair.Name, prefixNsPair.Namespace);
102 foreach (XmlSchemaObject schemaObject in eprSchema.Items)
103 schemaToAdd.Items.Add(schemaObject);
104 xmlSchemaSet.Reprocess(schemaToAdd);
110 XmlSchema IXmlSerializable.GetSchema()
115 const string Schema =
116 @"<xs:schema targetNamespace=""http://schemas.xmlsoap.org/ws/2004/08/addressing"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:wsa=""http://schemas.xmlsoap.org/ws/2004/08/addressing"" elementFormDefault=""qualified"" blockDefault=""#all"">
117 <!-- //////////////////// WS-Addressing //////////////////// -->
118 <!-- Endpoint reference -->
119 <xs:element name=""EndpointReference"" type=""wsa:EndpointReferenceType""/>
120 <xs:complexType name=""EndpointReferenceType"">
122 <xs:element name=""Address"" type=""wsa:AttributedURI""/>
123 <xs:element name=""ReferenceProperties"" type=""wsa:ReferencePropertiesType"" minOccurs=""0""/>
124 <xs:element name=""ReferenceParameters"" type=""wsa:ReferenceParametersType"" minOccurs=""0""/>
125 <xs:element name=""PortType"" type=""wsa:AttributedQName"" minOccurs=""0""/>
126 <xs:element name=""ServiceName"" type=""wsa:ServiceNameType"" minOccurs=""0""/>
127 <xs:any namespace=""##other"" processContents=""lax"" minOccurs=""0"" maxOccurs=""unbounded"">
130 If ""Policy"" elements from namespace ""http://schemas.xmlsoap.org/ws/2002/12/policy#policy"" are used, they must appear first (before any extensibility elements).
135 <xs:anyAttribute namespace=""##other"" processContents=""lax""/>
137 <xs:complexType name=""ReferencePropertiesType"">
139 <xs:any processContents=""lax"" minOccurs=""0"" maxOccurs=""unbounded""/>
142 <xs:complexType name=""ReferenceParametersType"">
144 <xs:any processContents=""lax"" minOccurs=""0"" maxOccurs=""unbounded""/>
147 <xs:complexType name=""ServiceNameType"">
149 <xs:extension base=""xs:QName"">
150 <xs:attribute name=""PortName"" type=""xs:NCName""/>
151 <xs:anyAttribute namespace=""##other"" processContents=""lax""/>
155 <!-- Message information header blocks -->
156 <xs:element name=""MessageID"" type=""wsa:AttributedURI""/>
157 <xs:element name=""RelatesTo"" type=""wsa:Relationship""/>
158 <xs:element name=""To"" type=""wsa:AttributedURI""/>
159 <xs:element name=""Action"" type=""wsa:AttributedURI""/>
160 <xs:element name=""From"" type=""wsa:EndpointReferenceType""/>
161 <xs:element name=""ReplyTo"" type=""wsa:EndpointReferenceType""/>
162 <xs:element name=""FaultTo"" type=""wsa:EndpointReferenceType""/>
163 <xs:complexType name=""Relationship"">
165 <xs:extension base=""xs:anyURI"">
166 <xs:attribute name=""RelationshipType"" type=""xs:QName"" use=""optional""/>
167 <xs:anyAttribute namespace=""##other"" processContents=""lax""/>
171 <xs:simpleType name=""RelationshipTypeValues"">
172 <xs:restriction base=""xs:QName"">
173 <xs:enumeration value=""wsa:Reply""/>
176 <xs:element name=""ReplyAfter"" type=""wsa:ReplyAfterType""/>
177 <xs:complexType name=""ReplyAfterType"">
179 <xs:extension base=""xs:nonNegativeInteger"">
180 <xs:anyAttribute namespace=""##other""/>
184 <xs:simpleType name=""FaultSubcodeValues"">
185 <xs:restriction base=""xs:QName"">
186 <xs:enumeration value=""wsa:InvalidMessageInformationHeader""/>
187 <xs:enumeration value=""wsa:MessageInformationHeaderRequired""/>
188 <xs:enumeration value=""wsa:DestinationUnreachable""/>
189 <xs:enumeration value=""wsa:ActionNotSupported""/>
190 <xs:enumeration value=""wsa:EndpointUnavailable""/>
193 <xs:attribute name=""Action"" type=""xs:anyURI""/>
194 <!-- Common declarations and definitions -->
195 <xs:complexType name=""AttributedQName"">
197 <xs:extension base=""xs:QName"">
198 <xs:anyAttribute namespace=""##other"" processContents=""lax""/>
202 <xs:complexType name=""AttributedURI"">
204 <xs:extension base=""xs:anyURI"">
205 <xs:anyAttribute namespace=""##other"" processContents=""lax""/>