1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel.Description
{
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.Xml;
using WsdlNS = System.Web.Services.Description;
using XsdNS = System.Xml.Schema;
using System.Reflection;
using System.Xml.Serialization;
[XmlRoot(ElementName = MetadataStrings.MetadataExchangeStrings.MetadataSection, Namespace = MetadataStrings.MetadataExchangeStrings.Namespace)]
public class MetadataSection
{
Collection<XmlAttribute> attributes = new Collection<XmlAttribute>();
string dialect;
string identifier;
object metadata;
string sourceUrl;
static XmlDocument xmlDocument = new XmlDocument();
public MetadataSection()
: this(null, null, null)
{
}
public MetadataSection(string dialect, string identifier, object metadata)
{
this.dialect = dialect;
this.identifier = identifier;
this.metadata = metadata;
}
static public string ServiceDescriptionDialect { get { return System.Web.Services.Description.ServiceDescription.Namespace; } }
static public string XmlSchemaDialect { get { return System.Xml.Schema.XmlSchema.Namespace; } }
static public string PolicyDialect { get { return MetadataStrings.WSPolicy.NamespaceUri; } }
static public string MetadataExchangeDialect { get { return MetadataStrings.MetadataExchangeStrings.Namespace; } }
[XmlAnyAttribute]
public Collection<XmlAttribute> Attributes
{
get { return attributes; }
}
[XmlAttribute]
public string Dialect
{
get { return this.dialect; }
set { this.dialect = value; }
}
[XmlAttribute]
public string Identifier
{
get { return this.identifier; }
set { this.identifier = value; }
}
[XmlAnyElement]
[XmlElement(MetadataStrings.XmlSchema.Schema, typeof(XsdNS.XmlSchema), Namespace = XsdNS.XmlSchema.Namespace)]
//typeof(WsdlNS.ServiceDescription) produces an XmlSerializer which can't export / import the Extensions in the ServiceDescription.
//We use change this to typeof(string) and then fix the generated serializer to use the Read/Write
//methods provided by WsdlNS.ServiceDesciption which use a pregenerated serializer which can export / import the Extensions.
[XmlElement(MetadataStrings.ServiceDescription.Definitions, typeof(WsdlNS.ServiceDescription), Namespace = WsdlNS.ServiceDescription.Namespace)]
[XmlElement(MetadataStrings.MetadataExchangeStrings.MetadataReference, typeof(MetadataReference), Namespace = MetadataStrings.MetadataExchangeStrings.Namespace)]
[XmlElement(MetadataStrings.MetadataExchangeStrings.Location, typeof(MetadataLocation), Namespace = MetadataStrings.MetadataExchangeStrings.Namespace)]
[XmlElement(MetadataStrings.MetadataExchangeStrings.Metadata, typeof(MetadataSet), Namespace = MetadataStrings.MetadataExchangeStrings.Namespace)]
public object Metadata
{
get { return this.metadata; }
set { this.metadata = value; }
}
internal string SourceUrl
{
get { return sourceUrl; }
set { sourceUrl = value; }
}
public static MetadataSection CreateFromPolicy(XmlElement policy, string identifier)
{
if (policy == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("policy");
}
if (!IsPolicyElement(policy))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("policy",
#pragma warning suppress 56506 // [....], policy cannot be null at this point since it has been validated above.
SR.GetString(SR.SFxBadMetadataMustBePolicy, MetadataStrings.WSPolicy.NamespaceUri, MetadataStrings.WSPolicy.Elements.Policy, policy.NamespaceURI, policy.LocalName));
}
MetadataSection section = new MetadataSection();
section.Dialect = policy.NamespaceURI;
section.Identifier = identifier;
section.Metadata = policy;
return section;
}
public static MetadataSection CreateFromSchema(XsdNS.XmlSchema schema)
{
if (schema == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("schema");
}
MetadataSection section = new MetadataSection();
section.Dialect = MetadataSection.XmlSchemaDialect;
section.Identifier = schema.TargetNamespace;
section.Metadata = schema;
return section;
}
public static MetadataSection CreateFromServiceDescription(WsdlNS.ServiceDescription serviceDescription)
{
if (serviceDescription == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("serviceDescription");
}
MetadataSection section = new MetadataSection();
section.Dialect = MetadataSection.ServiceDescriptionDialect;
section.Identifier = serviceDescription.TargetNamespace;
section.Metadata = serviceDescription;
return section;
}
internal static bool IsPolicyElement(XmlElement policy)
{
return (policy.NamespaceURI == MetadataStrings.WSPolicy.NamespaceUri
|| policy.NamespaceURI == MetadataStrings.WSPolicy.NamespaceUri15)
&& policy.LocalName == MetadataStrings.WSPolicy.Elements.Policy;
}
}
}
|