2016-08-03 10:59:49 +00:00
//-----------------------------------------------------------------------------
// 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 = Addressing200408Strings.Namespace)]
public class EndpointAddressAugust2004 : IXmlSerializable
{
static XmlQualifiedName eprType ;
EndpointAddress address ;
// for IXmlSerializable
EndpointAddressAugust2004 ( )
{
this . address = null ;
}
EndpointAddressAugust2004 ( EndpointAddress address )
{
this . address = address ;
}
public static EndpointAddressAugust2004 FromEndpointAddress ( EndpointAddress address )
{
if ( address = = null )
{
throw DiagnosticUtility . ExceptionUtility . ThrowHelperArgumentNull ( "address" ) ;
}
return new EndpointAddressAugust2004 ( address ) ;
}
public EndpointAddress ToEndpointAddress ( )
{
return this . address ;
}
void IXmlSerializable . ReadXml ( XmlReader reader )
{
this . address = EndpointAddress . ReadFrom ( AddressingVersion . WSAddressingAugust2004 , XmlDictionaryReader . CreateDictionaryReader ( reader ) ) ;
}
void IXmlSerializable . WriteXml ( XmlWriter writer )
{
this . address . WriteContentsTo ( AddressingVersion . WSAddressingAugust2004 , XmlDictionaryWriter . CreateDictionaryWriter ( writer ) ) ;
}
static XmlQualifiedName EprType
{
get
{
if ( eprType = = null )
eprType = new XmlQualifiedName ( AddressingStrings . EndpointReferenceType , Addressing200408Strings . Namespace ) ;
return eprType ;
}
}
static XmlSchema GetEprSchema ( )
{
2016-11-10 13:04:39 +00:00
using ( XmlTextReader reader = new XmlTextReader ( new StringReader ( Schema ) ) { DtdProcessing = DtdProcessing . Prohibit } )
2016-08-03 10:59:49 +00:00
{
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 ( Addressing200408Strings . 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 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" ">
< ! - - //////////////////// WS-Addressing //////////////////// -->
< ! - - Endpoint reference - - >
< xs : element name = "" EndpointReference "" type = "" wsa : EndpointReferenceType "" / >
< xs : complexType name = "" EndpointReferenceType "" >
< xs : sequence >
< xs : element name = "" Address "" type = "" wsa : AttributedURI "" / >
< xs : element name = "" ReferenceProperties "" type = "" wsa : ReferencePropertiesType "" minOccurs = "" 0 "" / >
< xs : element name = "" ReferenceParameters "" type = "" wsa : ReferenceParametersType "" minOccurs = "" 0 "" / >
< xs : element name = "" PortType "" type = "" wsa : AttributedQName "" minOccurs = "" 0 "" / >
< xs : element name = "" ServiceName "" type = "" wsa : ServiceNameType "" minOccurs = "" 0 "" / >
< xs : any namespace = "" # # other "" processContents = "" lax "" minOccurs = "" 0 "" maxOccurs = "" unbounded "" >
< xs : annotation >
< xs : documentation >
If "" Policy "" elements from namespace " " http : //schemas.xmlsoap.org/ws/2002/12/policy#policy"" are used, they must appear first (before any extensibility elements).
< / xs : documentation >
< / xs : annotation >
< / xs : any >
< / xs : sequence >
< xs : anyAttribute namespace = "" # # other "" processContents = "" lax "" / >
< / xs : complexType >
< xs : complexType name = "" ReferencePropertiesType "" >
< xs : sequence >
< xs : any processContents = "" lax "" minOccurs = "" 0 "" maxOccurs = "" unbounded "" / >
< / xs : sequence >
< / xs : complexType >
< xs : complexType name = "" ReferenceParametersType "" >
< xs : sequence >
< xs : any processContents = "" lax "" minOccurs = "" 0 "" maxOccurs = "" unbounded "" / >
< / xs : sequence >
< / xs : complexType >
< xs : complexType name = "" ServiceNameType "" >
< xs : simpleContent >
< xs : extension base = "" xs : QName "" >
< xs : attribute name = "" PortName "" type = "" xs : NCName "" / >
< xs : anyAttribute namespace = "" # # other "" processContents = "" lax "" / >
< / xs : extension >
< / xs : simpleContent >
< / xs : complexType >
< ! - - Message information header blocks - - >
< xs : element name = "" MessageID "" type = "" wsa : AttributedURI "" / >
< xs : element name = "" RelatesTo "" type = "" wsa : Relationship "" / >
< xs : element name = "" To "" type = "" wsa : AttributedURI "" / >
< xs : element name = "" Action "" type = "" wsa : AttributedURI "" / >
< xs : element name = "" From "" type = "" wsa : EndpointReferenceType "" / >
< xs : element name = "" ReplyTo "" type = "" wsa : EndpointReferenceType "" / >
< xs : element name = "" FaultTo "" type = "" wsa : EndpointReferenceType "" / >
< xs : complexType name = "" Relationship "" >
< xs : simpleContent >
< xs : extension base = "" xs : anyURI "" >
< xs : attribute name = "" RelationshipType "" type = "" xs : QName "" use = "" optional "" / >
< xs : anyAttribute namespace = "" # # other "" processContents = "" lax "" / >
< / xs : extension >
< / xs : simpleContent >
< / xs : complexType >
< xs : simpleType name = "" RelationshipTypeValues "" >
< xs : restriction base = "" xs : QName "" >
< xs : enumeration value = "" wsa : Reply "" / >
< / xs : restriction >
< / xs : simpleType >
< xs : element name = "" ReplyAfter "" type = "" wsa : ReplyAfterType "" / >
< xs : complexType name = "" ReplyAfterType "" >
< xs : simpleContent >
< xs : extension base = "" xs : nonNegativeInteger "" >
< xs : anyAttribute namespace = "" # # other "" / >
< / xs : extension >
< / xs : simpleContent >
< / xs : complexType >
< xs : simpleType name = "" FaultSubcodeValues "" >
< xs : restriction base = "" xs : QName "" >
< xs : enumeration value = "" wsa : InvalidMessageInformationHeader "" / >
< xs : enumeration value = "" wsa : MessageInformationHeaderRequired "" / >
< xs : enumeration value = "" wsa : DestinationUnreachable "" / >
< xs : enumeration value = "" wsa : ActionNotSupported "" / >
< xs : enumeration value = "" wsa : EndpointUnavailable "" / >
< / xs : restriction >
< / xs : simpleType >
< xs : attribute name = "" Action "" type = "" xs : anyURI "" / >
< ! - - Common declarations and definitions - - >
< xs : complexType name = "" AttributedQName "" >
< xs : simpleContent >
< xs : extension base = "" xs : QName "" >
< xs : anyAttribute namespace = "" # # other "" processContents = "" lax "" / >
< / xs : extension >
< / xs : simpleContent >
< / xs : complexType >
< xs : complexType name = "" AttributedURI "" >
< xs : simpleContent >
< xs : extension base = "" xs : anyURI "" >
< xs : anyAttribute namespace = "" # # other "" processContents = "" lax "" / >
< / xs : extension >
< / xs : simpleContent >
< / xs : complexType >
< / xs : schema > ";
}
}