| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- //-----------------------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace System.ServiceModel
- {
- using System;
- using System.ServiceModel.Channels;
- using System.Xml;
- using System.Xml.Schema;
- using System.Xml.Serialization;
- using System.Collections;
- using System.Text;
- using System.IO;
- [XmlSchemaProvider("GetSchema")]
- [XmlRoot(AddressingStrings.EndpointReference, Namespace = Addressing10Strings.Namespace)]
- public class EndpointAddress10 : IXmlSerializable
- {
- static XmlQualifiedName eprType;
- EndpointAddress address;
- // for IXmlSerializable
- EndpointAddress10()
- {
- this.address = null;
- }
- EndpointAddress10(EndpointAddress address)
- {
- this.address = address;
- }
- public static EndpointAddress10 FromEndpointAddress(EndpointAddress address)
- {
- if (address == null)
- {
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("address");
- }
- return new EndpointAddress10(address);
- }
- public EndpointAddress ToEndpointAddress()
- {
- return this.address;
- }
- void IXmlSerializable.ReadXml(XmlReader reader)
- {
- this.address = EndpointAddress.ReadFrom(AddressingVersion.WSAddressing10, XmlDictionaryReader.CreateDictionaryReader(reader));
- }
- void IXmlSerializable.WriteXml(XmlWriter writer)
- {
- this.address.WriteContentsTo(AddressingVersion.WSAddressing10, XmlDictionaryWriter.CreateDictionaryWriter(writer));
- }
- static XmlQualifiedName EprType
- {
- get
- {
- if (eprType == null)
- eprType = new XmlQualifiedName(AddressingStrings.EndpointReferenceType, Addressing10Strings.Namespace);
- return eprType;
- }
- }
- static XmlSchema GetEprSchema()
- {
- using (XmlTextReader reader = new XmlTextReader(new StringReader(Schema)))
- {
- return XmlSchema.Read(reader, null);
- }
- }
- public static XmlQualifiedName GetSchema(XmlSchemaSet xmlSchemaSet)
- {
- if (xmlSchemaSet == null)
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("xmlSchemaSet");
- XmlQualifiedName eprType = EprType;
- XmlSchema eprSchema = GetEprSchema();
- ICollection schemas = xmlSchemaSet.Schemas(Addressing10Strings.Namespace);
- if (schemas == null || schemas.Count == 0)
- xmlSchemaSet.Add(eprSchema);
- else
- {
- XmlSchema schemaToAdd = null;
- foreach (XmlSchema xmlSchema in schemas)
- {
- if (xmlSchema.SchemaTypes.Contains(eprType))
- {
- schemaToAdd = null;
- break;
- }
- else
- schemaToAdd = xmlSchema;
- }
- if (schemaToAdd != null)
- {
- foreach (XmlQualifiedName prefixNsPair in eprSchema.Namespaces.ToArray())
- schemaToAdd.Namespaces.Add(prefixNsPair.Name, prefixNsPair.Namespace);
- foreach (XmlSchemaObject schemaObject in eprSchema.Items)
- schemaToAdd.Items.Add(schemaObject);
- xmlSchemaSet.Reprocess(schemaToAdd);
- }
- }
- return eprType;
- }
- XmlSchema IXmlSerializable.GetSchema()
- {
- return null;
- }
- const string Schema =
- @"<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:wsa='http://www.w3.org/2005/08/addressing' targetNamespace='http://www.w3.org/2005/08/addressing' blockDefault='#all' elementFormDefault='qualified' finalDefault='' attributeFormDefault='unqualified'>
-
- <!-- Constructs from the WS-Addressing Core -->
- <xs:element name='EndpointReference' type='wsa:EndpointReferenceType'/>
- <xs:complexType name='EndpointReferenceType' mixed='false'>
- <xs:sequence>
- <xs:element name='Address' type='wsa:AttributedURIType'/>
- <xs:element name='ReferenceParameters' type='wsa:ReferenceParametersType' minOccurs='0'/>
- <xs:element ref='wsa:Metadata' minOccurs='0'/>
- <xs:any namespace='##other' processContents='lax' minOccurs='0' maxOccurs='unbounded'/>
- </xs:sequence>
- <xs:anyAttribute namespace='##other' processContents='lax'/>
- </xs:complexType>
-
- <xs:complexType name='ReferenceParametersType' mixed='false'>
- <xs:sequence>
- <xs:any namespace='##any' processContents='lax' minOccurs='0' maxOccurs='unbounded'/>
- </xs:sequence>
- <xs:anyAttribute namespace='##other' processContents='lax'/>
- </xs:complexType>
-
- <xs:element name='Metadata' type='wsa:MetadataType'/>
- <xs:complexType name='MetadataType' mixed='false'>
- <xs:sequence>
- <xs:any namespace='##any' processContents='lax' minOccurs='0' maxOccurs='unbounded'/>
- </xs:sequence>
- <xs:anyAttribute namespace='##other' processContents='lax'/>
- </xs:complexType>
-
- <xs:element name='MessageID' type='wsa:AttributedURIType'/>
- <xs:element name='RelatesTo' type='wsa:RelatesToType'/>
- <xs:complexType name='RelatesToType' mixed='false'>
- <xs:simpleContent>
- <xs:extension base='xs:anyURI'>
- <xs:attribute name='RelationshipType' type='wsa:RelationshipTypeOpenEnum' use='optional' default='http://www.w3.org/2005/08/addressing/reply'/>
- <xs:anyAttribute namespace='##other' processContents='lax'/>
- </xs:extension>
- </xs:simpleContent>
- </xs:complexType>
-
- <xs:simpleType name='RelationshipTypeOpenEnum'>
- <xs:union memberTypes='wsa:RelationshipType xs:anyURI'/>
- </xs:simpleType>
-
- <xs:simpleType name='RelationshipType'>
- <xs:restriction base='xs:anyURI'>
- <xs:enumeration value='http://www.w3.org/2005/08/addressing/reply'/>
- </xs:restriction>
- </xs:simpleType>
-
- <xs:element name='ReplyTo' type='wsa:EndpointReferenceType'/>
- <xs:element name='From' type='wsa:EndpointReferenceType'/>
- <xs:element name='FaultTo' type='wsa:EndpointReferenceType'/>
- <xs:element name='To' type='wsa:AttributedURIType'/>
- <xs:element name='Action' type='wsa:AttributedURIType'/>
- <xs:complexType name='AttributedURIType' mixed='false'>
- <xs:simpleContent>
- <xs:extension base='xs:anyURI'>
- <xs:anyAttribute namespace='##other' processContents='lax'/>
- </xs:extension>
- </xs:simpleContent>
- </xs:complexType>
-
- <!-- Constructs from the WS-Addressing SOAP binding -->
- <xs:attribute name='IsReferenceParameter' type='xs:boolean'/>
-
- <xs:simpleType name='FaultCodesOpenEnumType'>
- <xs:union memberTypes='wsa:FaultCodesType xs:QName'/>
- </xs:simpleType>
-
- <xs:simpleType name='FaultCodesType'>
- <xs:restriction base='xs:QName'>
- <xs:enumeration value='wsa:InvalidAddressingHeader'/>
- <xs:enumeration value='wsa:InvalidAddress'/>
- <xs:enumeration value='wsa:InvalidEPR'/>
- <xs:enumeration value='wsa:InvalidCardinality'/>
- <xs:enumeration value='wsa:MissingAddressInEPR'/>
- <xs:enumeration value='wsa:DuplicateMessageID'/>
- <xs:enumeration value='wsa:ActionMismatch'/>
- <xs:enumeration value='wsa:MessageAddressingHeaderRequired'/>
- <xs:enumeration value='wsa:DestinationUnreachable'/>
- <xs:enumeration value='wsa:ActionNotSupported'/>
- <xs:enumeration value='wsa:EndpointUnavailable'/>
- </xs:restriction>
- </xs:simpleType>
-
- <xs:element name='RetryAfter' type='wsa:AttributedUnsignedLongType'/>
- <xs:complexType name='AttributedUnsignedLongType' mixed='false'>
- <xs:simpleContent>
- <xs:extension base='xs:unsignedLong'>
- <xs:anyAttribute namespace='##other' processContents='lax'/>
- </xs:extension>
- </xs:simpleContent>
- </xs:complexType>
-
- <xs:element name='ProblemHeaderQName' type='wsa:AttributedQNameType'/>
- <xs:complexType name='AttributedQNameType' mixed='false'>
- <xs:simpleContent>
- <xs:extension base='xs:QName'>
- <xs:anyAttribute namespace='##other' processContents='lax'/>
- </xs:extension>
- </xs:simpleContent>
- </xs:complexType>
-
- <xs:element name='ProblemHeader' type='wsa:AttributedAnyType'/>
- <xs:complexType name='AttributedAnyType' mixed='false'>
- <xs:sequence>
- <xs:any namespace='##any' processContents='lax' minOccurs='1' maxOccurs='1'/>
- </xs:sequence>
- <xs:anyAttribute namespace='##other' processContents='lax'/>
- </xs:complexType>
-
- <xs:element name='ProblemIRI' type='wsa:AttributedURIType'/>
-
- <xs:element name='ProblemAction' type='wsa:ProblemActionType'/>
- <xs:complexType name='ProblemActionType' mixed='false'>
- <xs:sequence>
- <xs:element ref='wsa:Action' minOccurs='0'/>
- <xs:element name='SoapAction' minOccurs='0' type='xs:anyURI'/>
- </xs:sequence>
- <xs:anyAttribute namespace='##other' processContents='lax'/>
- </xs:complexType>
-
- </xs:schema>";
- }
- }
|