|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using Microsoft.Xml.Serialization;
using Microsoft.Xml.Schema;
using System.Collections;
using System.Collections.Specialized;
using System;
using Microsoft.Xml;
using System.IO;
using System.Reflection;
using System.ComponentModel;
using Microsoft.CodeDom;
using System.Text;
using System.Web.Services.Configuration;
using System.Diagnostics;
using System.Threading;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Web.Services.Protocols;
namespace System.Web.Services.Description
{
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription"]/*' />
/// <devdoc>
///
/// </devdoc>
[XmlRoot("definitions", Namespace = ServiceDescription.Namespace)]
[XmlFormatExtensionPoint("Extensions")]
public sealed class ServiceDescription : NamedItem
{
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Namespace"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public const string Namespace = "http://schemas.xmlsoap.org/wsdl/";
internal const string Prefix = "wsdl";
private Types _types;
private ImportCollection _imports;
private MessageCollection _messages;
private PortTypeCollection _portTypes;
private BindingCollection _bindings;
private ServiceCollection _services;
private string _targetNamespace;
private ServiceDescriptionFormatExtensionCollection _extensions;
private ServiceDescriptionCollection _parent;
private string _appSettingUrlKey;
private string _appSettingBaseUrl;
private string _retrievalUrl;
private static XmlSerializer s_serializer;
private static XmlSerializerNamespaces s_namespaces;
private const WsiProfiles SupportedClaims = WsiProfiles.BasicProfile1_1;
private static XmlSchema s_schema = null;
private static XmlSchema s_soapEncodingSchema = null;
private StringCollection _validationWarnings;
private static StringCollection s_warnings = new StringCollection();
private ServiceDescription _next;
private static void InstanceValidation(object sender, ValidationEventArgs args)
{
s_warnings.Add(string.Format(ResWebServices.WsdlInstanceValidationDetails, args.Message, args.Exception.LineNumber.ToString(CultureInfo.InvariantCulture), args.Exception.LinePosition.ToString(CultureInfo.InvariantCulture)));
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.RetrievalUrl"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public string RetrievalUrl
{
get { return _retrievalUrl == null ? string.Empty : _retrievalUrl; }
set { _retrievalUrl = value; }
}
internal void SetParent(ServiceDescriptionCollection parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.ServiceDescriptions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public ServiceDescriptionCollection ServiceDescriptions
{
get { return _parent; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Imports"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("import")]
public ImportCollection Imports
{
get { if (_imports == null) _imports = new ImportCollection(this); return _imports; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Types"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("types")]
public Types Types
{
get { if (_types == null) _types = new Types(); return _types; }
set { _types = value; }
}
private bool ShouldSerializeTypes() { return Types.HasItems(); }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Messages"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("message")]
public MessageCollection Messages
{
get { if (_messages == null) _messages = new MessageCollection(this); return _messages; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.PortTypes"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("portType")]
public PortTypeCollection PortTypes
{
get { if (_portTypes == null) _portTypes = new PortTypeCollection(this); return _portTypes; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Bindings"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("binding")]
public BindingCollection Bindings
{
get { if (_bindings == null) _bindings = new BindingCollection(this); return _bindings; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Services"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("service")]
public ServiceCollection Services
{
get { if (_services == null) _services = new ServiceCollection(this); return _services; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.TargetNamespace"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlAttribute("targetNamespace")]
public string TargetNamespace
{
get { return _targetNamespace; }
set { _targetNamespace = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Schema"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public static XmlSchema Schema
{
get
{
if (s_schema == null)
{
s_schema = XmlSchema.Read(new StringReader(Schemas.Wsdl), null);
}
return s_schema;
}
}
internal static XmlSchema SoapEncodingSchema
{
get
{
if (s_soapEncodingSchema == null)
{
s_soapEncodingSchema = XmlSchema.Read(new StringReader(Schemas.SoapEncoding), null);
}
return s_soapEncodingSchema;
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.ValidationWarnings"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public StringCollection ValidationWarnings
{
get
{
if (_validationWarnings == null)
{
_validationWarnings = new StringCollection();
}
return _validationWarnings;
}
}
internal void SetWarnings(StringCollection warnings)
{
_validationWarnings = warnings;
}
// This is a special serializer that hardwires to the generated
// ServiceDescriptionSerializer. To regenerate the serializer
// Turn on KEEPTEMPFILES
// Restart server
// Run wsdl as follows
// wsdl <URL_FOR_VALID_ASMX_FILE>?wsdl
// Goto windows temp dir (usually \winnt\temp)
// and get the latest generated .cs file
// Change namespace to 'System.Web.Services.Description'
// Change class names to ServiceDescriptionSerializationWriter
// and ServiceDescriptionSerializationReader
// Make the classes internal
// Ensure the public Write method is Write125_definitions (If not
// change Serialize to call the new one)
// Ensure the public Read method is Read126_definitions (If not
// change Deserialize to call the new one)
internal class ServiceDescriptionSerializer : XmlSerializer
{
protected override XmlSerializationReader CreateReader()
{
return new ServiceDescriptionSerializationReader();
}
protected override XmlSerializationWriter CreateWriter()
{
return new ServiceDescriptionSerializationWriter();
}
public override bool CanDeserialize(Microsoft.Xml.XmlReader xmlReader)
{
return xmlReader.IsStartElement("definitions", ServiceDescription.Namespace);
}
protected override void Serialize(Object objectToSerialize, XmlSerializationWriter writer)
{
((ServiceDescriptionSerializationWriter)writer).Write125_definitions(objectToSerialize);
}
protected override object Deserialize(XmlSerializationReader reader)
{
return ((ServiceDescriptionSerializationReader)reader).Read125_definitions();
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Serializer"]/*' />
/// <devdoc>
/// Returns the serializer for processing web service calls. The serializer is customized according
/// to settings in config.web.
/// <internalonly/>
/// <internalonly/>
/// </devdoc>
[XmlIgnore]
public static XmlSerializer Serializer
{
get
{
if (s_serializer == null)
{
WebServicesSection config = WebServicesSection.Current;
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("s", XmlSchema.Namespace);
WebServicesSection.LoadXmlFormatExtensions(config.GetAllFormatExtensionTypes(), overrides, ns);
s_namespaces = ns;
s_serializer = new ServiceDescriptionSerializer();
}
return s_serializer;
}
}
internal string AppSettingBaseUrl
{
get { return _appSettingBaseUrl; }
set { _appSettingBaseUrl = value; }
}
internal string AppSettingUrlKey
{
get { return _appSettingUrlKey; }
set { _appSettingUrlKey = value; }
}
internal ServiceDescription Next
{
get { return _next; }
set { _next = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Read"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public static ServiceDescription Read(TextReader textReader)
{
return Read(textReader, false);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Read1"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public static ServiceDescription Read(Stream stream)
{
return Read(stream, false);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Read2"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public static ServiceDescription Read(XmlReader reader)
{
return Read(reader, false);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Read3"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public static ServiceDescription Read(string fileName)
{
return Read(fileName, false);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Read4"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public static ServiceDescription Read(TextReader textReader, bool validate)
{
XmlTextReader reader = new XmlTextReader(textReader);
reader.WhitespaceHandling = WhitespaceHandling.Significant;
reader.XmlResolver = null;
reader.DtdProcessing = DtdProcessing.Prohibit;
return Read(reader, validate);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Read5"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public static ServiceDescription Read(Stream stream, bool validate)
{
XmlTextReader reader = new XmlTextReader(stream);
reader.WhitespaceHandling = WhitespaceHandling.Significant;
reader.XmlResolver = null;
reader.DtdProcessing = DtdProcessing.Prohibit;
return Read(reader, validate);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Read6"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public static ServiceDescription Read(string fileName, bool validate)
{
StreamReader reader = new StreamReader(File.OpenRead(fileName), detectEncodingFromByteOrderMarks: true);
try
{
return Read(reader, validate);
}
finally
{
reader.Dispose();
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Read7"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public static ServiceDescription Read(XmlReader reader, bool validate)
{
if (validate)
{
XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.ValidationType = ValidationType.Schema;
readerSettings.ValidationFlags = XmlSchemaValidationFlags.ProcessIdentityConstraints;
readerSettings.Schemas.Add(Schema);
readerSettings.Schemas.Add(SoapBinding.Schema);
readerSettings.ValidationEventHandler += new ValidationEventHandler(InstanceValidation);
s_warnings.Clear();
XmlReader validatingReader = XmlReader.Create(reader, readerSettings);
if (reader.ReadState != ReadState.Initial)
{
//underlying reader has moved, so move validatingreader as well
validatingReader.Read();
}
ServiceDescription sd = (ServiceDescription)Serializer.Deserialize(validatingReader);
sd.SetWarnings(s_warnings);
return sd;
}
else
{
return (ServiceDescription)Serializer.Deserialize(reader);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.CanRead"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public static bool CanRead(XmlReader reader)
{
return Serializer.CanDeserialize(reader);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Write"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Write(string fileName)
{
StreamWriter writer = new StreamWriter(File.OpenWrite(fileName));
try
{
Write(writer);
}
finally
{
writer.Dispose();
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Write1"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Write(TextWriter writer)
{
XmlTextWriter xmlWriter = new XmlTextWriter(writer);
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.Indentation = 2;
Write(xmlWriter);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Write2"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Write(Stream stream)
{
TextWriter writer = new StreamWriter(stream);
Write(writer);
writer.Flush();
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Write3"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Write(XmlWriter writer)
{
XmlSerializer serializer = Serializer;
XmlSerializerNamespaces ns;
if (Namespaces == null || Namespaces.Count == 0)
{
ns = new XmlSerializerNamespaces(s_namespaces);
ns.Add(ServiceDescription.Prefix, ServiceDescription.Namespace);
if (this.TargetNamespace != null && this.TargetNamespace.Length != 0)
{
ns.Add("tns", this.TargetNamespace);
}
for (int i = 0; i < Types.Schemas.Count; i++)
{
string tns = Types.Schemas[i].TargetNamespace;
if (tns != null && tns.Length > 0 && tns != this.TargetNamespace && tns != ServiceDescription.Namespace)
{
ns.Add("s" + i.ToString(CultureInfo.InvariantCulture), tns);
}
}
for (int i = 0; i < Imports.Count; i++)
{
Import import = Imports[i];
if (import.Namespace.Length > 0)
{
ns.Add("i" + i.ToString(CultureInfo.InvariantCulture), import.Namespace);
}
}
}
else
{
ns = Namespaces;
}
serializer.Serialize(writer, this, ns);
}
internal static WsiProfiles GetConformanceClaims(XmlElement documentation)
{
if (documentation == null)
return WsiProfiles.None;
WsiProfiles existingClaims = WsiProfiles.None;
XmlNode child = documentation.FirstChild;
while (child != null)
{
XmlNode sibling = child.NextSibling;
if (child is XmlElement)
{
XmlElement element = (XmlElement)child;
if (element.LocalName == Soap.Element.Claim && element.NamespaceURI == Soap.ConformanceClaim)
{
if (Soap.BasicProfile1_1 == element.GetAttribute(Soap.Attribute.ConformsTo))
{
existingClaims |= WsiProfiles.BasicProfile1_1;
}
}
}
child = sibling;
}
return existingClaims;
}
internal static void AddConformanceClaims(XmlElement documentation, WsiProfiles claims)
{
//CONSIDER throw if we encouner an unsupported claim
claims &= SupportedClaims;
if (claims == WsiProfiles.None)
return;
// check already presend claims
WsiProfiles existingClaims = GetConformanceClaims(documentation);
claims &= ~existingClaims;
if (claims == WsiProfiles.None)
return;
XmlDocument d = documentation.OwnerDocument;
if ((claims & WsiProfiles.BasicProfile1_1) != 0)
{
XmlElement claim = d.CreateElement(Soap.ClaimPrefix, Soap.Element.Claim, Soap.ConformanceClaim);
claim.SetAttribute(Soap.Attribute.ConformsTo, Soap.BasicProfile1_1);
documentation.InsertBefore(claim, null);
}
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Import"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class Import : DocumentableItem
{
private string _ns;
private string _location;
private ServiceDescription _parent;
private ServiceDescriptionFormatExtensionCollection _extensions;
internal void SetParent(ServiceDescription parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Import.ServiceDescription"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public ServiceDescription ServiceDescription
{
get { return _parent; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Import.Namespace"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlAttribute("namespace")]
public string Namespace
{
get { return _ns == null ? string.Empty : _ns; }
set { _ns = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Import.Location"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlAttribute("location")]
public string Location
{
get { return _location == null ? string.Empty : _location; }
set { _location = value; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="DocumentableItem"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public abstract class DocumentableItem
{
private XmlDocument _parent;
private string _documentation;
private XmlElement _documentationElement;
private XmlAttribute[] _anyAttribute;
private XmlSerializerNamespaces _namespaces;
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="DocumentableItem.Documentation"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public string Documentation
{
get
{
if (_documentation != null)
return _documentation;
if (_documentationElement == null)
return string.Empty;
return _documentationElement.InnerXml;
}
set
{
_documentation = value;
StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);
XmlTextWriter xmlWriter = new XmlTextWriter(writer);
xmlWriter.WriteElementString(ServiceDescription.Prefix, "documentation", ServiceDescription.Namespace, value);
Parent.LoadXml(writer.ToString());
_documentationElement = _parent.DocumentElement;
xmlWriter.Close();
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="DocumentableItem.DocumentationElement"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlAnyElement("documentation", Namespace = ServiceDescription.Namespace)]
[ComVisible(false)]
public XmlElement DocumentationElement
{
get { return _documentationElement; }
set
{
_documentationElement = value;
_documentation = null;
}
}
[XmlAnyAttribute]
public Microsoft.Xml.XmlAttribute[] ExtensibleAttributes
{
get
{
return _anyAttribute;
}
set
{
_anyAttribute = value;
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="DocumentableItem.Namespaces"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlNamespaceDeclarations]
public XmlSerializerNamespaces Namespaces
{
get
{
if (_namespaces == null)
_namespaces = new XmlSerializerNamespaces();
return _namespaces;
}
set { _namespaces = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="DocumentableItem.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public abstract ServiceDescriptionFormatExtensionCollection Extensions { get; }
internal XmlDocument Parent
{
get
{
if (_parent == null)
_parent = new XmlDocument();
return _parent;
}
}
internal XmlElement GetDocumentationElement()
{
if (_documentationElement == null)
{
_documentationElement = Parent.CreateElement(ServiceDescription.Prefix, "documentation", ServiceDescription.Namespace);
Parent.InsertBefore(_documentationElement, null);
}
return _documentationElement;
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="DocumentableItem"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public abstract class NamedItem : DocumentableItem
{
private string _name;
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="NamedItem.Name"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlAttribute("name")]
public string Name
{
get { return _name; }
set { _name = value; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Port"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class Port : NamedItem
{
private ServiceDescriptionFormatExtensionCollection _extensions;
private XmlQualifiedName _binding = XmlQualifiedName.Empty;
private Service _parent;
internal void SetParent(Service parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Port.Service"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Service Service
{
get { return _parent; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Port.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Port.Binding"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlAttribute("binding")]
public XmlQualifiedName Binding
{
get { return _binding; }
set { _binding = value; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Service"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class Service : NamedItem
{
private ServiceDescriptionFormatExtensionCollection _extensions;
private PortCollection _ports;
private ServiceDescription _parent;
internal void SetParent(ServiceDescription parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Service.ServiceDescription"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public ServiceDescription ServiceDescription
{
get { return _parent; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Service.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Service.Ports"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("port")]
public PortCollection Ports
{
get { if (_ports == null) _ports = new PortCollection(this); return _ports; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBinding"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class FaultBinding : MessageBinding
{
private ServiceDescriptionFormatExtensionCollection _extensions;
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBinding.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageBinding"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public abstract class MessageBinding : NamedItem
{
private OperationBinding _parent;
internal void SetParent(OperationBinding parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageBinding.OperationBinding"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public OperationBinding OperationBinding
{
get { return _parent; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="InputBinding"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class InputBinding : MessageBinding
{
private ServiceDescriptionFormatExtensionCollection _extensions;
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="InputBinding.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OutputBinding"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class OutputBinding : MessageBinding
{
private ServiceDescriptionFormatExtensionCollection _extensions;
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OutputBinding.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBinding"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class OperationBinding : NamedItem
{
private ServiceDescriptionFormatExtensionCollection _extensions;
private FaultBindingCollection _faults;
private InputBinding _input;
private OutputBinding _output;
private Binding _parent;
internal void SetParent(Binding parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBinding.Binding"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Binding Binding
{
get { return _parent; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBinding.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBinding.Input"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("input")]
public InputBinding Input
{
get { return _input; }
set
{
if (_input != null)
{
_input.SetParent(null);
}
_input = value;
if (_input != null)
{
_input.SetParent(this);
}
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBinding.Output"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("output")]
public OutputBinding Output
{
get { return _output; }
set
{
if (_output != null)
{
_output.SetParent(null);
}
_output = value;
if (_output != null)
{
_output.SetParent(this);
}
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBinding.Faults"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("fault")]
public FaultBindingCollection Faults
{
get { if (_faults == null) _faults = new FaultBindingCollection(this); return _faults; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Binding"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class Binding : NamedItem
{
private ServiceDescriptionFormatExtensionCollection _extensions;
private OperationBindingCollection _operations;
private XmlQualifiedName _type = XmlQualifiedName.Empty;
private ServiceDescription _parent;
internal void SetParent(ServiceDescription parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Binding.ServiceDescription"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public ServiceDescription ServiceDescription
{
get { return _parent; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Binding.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Binding.Operations"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("operation")]
public OperationBindingCollection Operations
{
get { if (_operations == null) _operations = new OperationBindingCollection(this); return _operations; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Binding.Type"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlAttribute("type")]
public XmlQualifiedName Type
{
get
{
if ((object)_type == null) return XmlQualifiedName.Empty;
return _type;
}
set { _type = value; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessage"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public abstract class OperationMessage : NamedItem
{
private XmlQualifiedName _message = XmlQualifiedName.Empty;
private Operation _parent;
internal void SetParent(Operation parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessage.Operation"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Operation Operation
{
get { return _parent; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessage.Message"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlAttribute("message")]
public XmlQualifiedName Message
{
get { return _message; }
set { _message = value; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFault"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class OperationFault : OperationMessage
{
private ServiceDescriptionFormatExtensionCollection _extensions;
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationInput"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class OperationInput : OperationMessage
{
private ServiceDescriptionFormatExtensionCollection _extensions;
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationOutput"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class OperationOutput : OperationMessage
{
private ServiceDescriptionFormatExtensionCollection _extensions;
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Operation"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class Operation : NamedItem
{
private string[] _parameters;
private OperationMessageCollection _messages;
private OperationFaultCollection _faults;
private PortType _parent;
private ServiceDescriptionFormatExtensionCollection _extensions;
internal void SetParent(PortType parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Operation.PortType"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public PortType PortType
{
get { return _parent; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Operation.ParameterOrderString"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlAttribute("parameterOrder"), DefaultValue("")]
public string ParameterOrderString
{
get
{
if (_parameters == null) return string.Empty;
StringBuilder builder = new StringBuilder();
for (int i = 0; i < _parameters.Length; i++)
{
if (i > 0) builder.Append(' ');
builder.Append(_parameters[i]);
}
return builder.ToString();
}
set
{
if (value == null)
_parameters = null;
else
_parameters = value.Split(new char[] { ' ' });
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Operation.ParameterOrder"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public string[] ParameterOrder
{
get { return _parameters; }
set { _parameters = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Operation.Messages"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("input", typeof(OperationInput)),
XmlElement("output", typeof(OperationOutput))]
public OperationMessageCollection Messages
{
get { if (_messages == null) _messages = new OperationMessageCollection(this); return _messages; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Operation.Faults"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("fault")]
public OperationFaultCollection Faults
{
get { if (_faults == null) _faults = new OperationFaultCollection(this); return _faults; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Operation.IsBoundBy"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool IsBoundBy(OperationBinding operationBinding)
{
if (operationBinding.Name != Name) return false;
OperationMessage input = Messages.Input;
if (input != null)
{
if (operationBinding.Input == null) return false;
string portTypeInputName = GetMessageName(Name, input.Name, true);
string bindingInputName = GetMessageName(operationBinding.Name, operationBinding.Input.Name, true);
if (bindingInputName != portTypeInputName) return false;
}
else if (operationBinding.Input != null)
return false;
OperationMessage output = Messages.Output;
if (output != null)
{
if (operationBinding.Output == null) return false;
string portTypeOutputName = GetMessageName(Name, output.Name, false);
string bindingOutputName = GetMessageName(operationBinding.Name, operationBinding.Output.Name, false);
if (bindingOutputName != portTypeOutputName) return false;
}
else if (operationBinding.Output != null)
return false;
return true;
}
private string GetMessageName(string operationName, string messageName, bool isInput)
{
if (messageName != null && messageName.Length > 0)
return messageName;
switch (Messages.Flow)
{
case OperationFlow.RequestResponse:
if (isInput)
return operationName + "Request";
return operationName + "Response";
case OperationFlow.OneWay:
if (isInput)
return operationName;
Debug.Assert(isInput == true, "Oneway flow cannot have an output message");
return null;
// Cases not supported
case OperationFlow.SolicitResponse:
return null;
case OperationFlow.Notification:
return null;
}
Debug.Assert(false, "Unknown message flow");
return null;
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortType"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class PortType : NamedItem
{
private OperationCollection _operations;
private ServiceDescription _parent;
private ServiceDescriptionFormatExtensionCollection _extensions;
internal void SetParent(ServiceDescription parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortType.ServiceDescription"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public ServiceDescription ServiceDescription
{
get { return _parent; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortType.Operations"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("operation")]
public OperationCollection Operations
{
get { if (_operations == null) _operations = new OperationCollection(this); return _operations; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Message"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class Message : NamedItem
{
private MessagePartCollection _parts;
private ServiceDescription _parent;
private ServiceDescriptionFormatExtensionCollection _extensions;
internal void SetParent(ServiceDescription parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Message.ServiceDescription"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public ServiceDescription ServiceDescription
{
get { return _parent; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Message.Parts"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("part")]
public MessagePartCollection Parts
{
get { if (_parts == null) _parts = new MessagePartCollection(this); return _parts; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Message.FindPartsByName"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public MessagePart[] FindPartsByName(string[] partNames)
{
MessagePart[] partArray = new MessagePart[partNames.Length];
for (int i = 0; i < partNames.Length; i++)
{
partArray[i] = FindPartByName(partNames[i]);
}
return partArray;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Message.FindPartByName"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public MessagePart FindPartByName(string partName)
{
for (int i = 0; i < _parts.Count; i++)
{
MessagePart part = _parts[i];
if (part.Name == partName) return part;
}
throw new ArgumentException(string.Format(ResWebServices.MissingMessagePartForMessageFromNamespace3, partName, Name, ServiceDescription.TargetNamespace), "partName");
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePart"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class MessagePart : NamedItem
{
private XmlQualifiedName _type = XmlQualifiedName.Empty;
private XmlQualifiedName _element = XmlQualifiedName.Empty;
private Message _parent;
private ServiceDescriptionFormatExtensionCollection _extensions;
internal void SetParent(Message parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescription.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePart.Message"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Message Message
{
get { return _parent; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePart.Element"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlAttribute("element")]
public XmlQualifiedName Element
{
get { return _element; }
set { _element = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePart.Type"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlAttribute("type")]
public XmlQualifiedName Type
{
get
{
if ((object)_type == null) return XmlQualifiedName.Empty;
return _type;
}
set { _type = value; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Types"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlFormatExtensionPoint("Extensions")]
public sealed class Types : DocumentableItem
{
private XmlSchemas _schemas;
private ServiceDescriptionFormatExtensionCollection _extensions;
internal bool HasItems()
{
return (_schemas != null && _schemas.Count > 0) ||
(_extensions != null && _extensions.Count > 0);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Types.Extensions"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public override ServiceDescriptionFormatExtensionCollection Extensions
{
get { if (_extensions == null) _extensions = new ServiceDescriptionFormatExtensionCollection(this); return _extensions; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="Types.Schemas"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlElement("schema", typeof(XmlSchema), Namespace = XmlSchema.Namespace)]
public XmlSchemas Schemas
{
get { if (_schemas == null) _schemas = new XmlSchemas(); return _schemas; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class ServiceDescriptionFormatExtensionCollection : ServiceDescriptionBaseCollection
{
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.ServiceDescriptionFormatExtensionCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public ServiceDescriptionFormatExtensionCollection(object parent) : base(parent) { }
private ArrayList _handledElements;
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public object this[int index]
{
get { return (object)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(object extension)
{
return List.Add(extension);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, object extension)
{
List.Insert(index, extension);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(object extension)
{
return List.IndexOf(extension);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(object extension)
{
return List.Contains(extension);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(object extension)
{
List.Remove(extension);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(object[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.Find"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public object Find(Type type)
{
for (int i = 0; i < List.Count; i++)
{
object item = List[i];
if (type.IsAssignableFrom(item.GetType()))
{
((ServiceDescriptionFormatExtension)item).Handled = true;
return item;
}
}
return null;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.FindAll"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public object[] FindAll(Type type)
{
ArrayList list = new ArrayList();
for (int i = 0; i < List.Count; i++)
{
object item = List[i];
if (type.IsAssignableFrom(item.GetType()))
{
((ServiceDescriptionFormatExtension)item).Handled = true;
list.Add(item);
}
}
return (object[])list.ToArray(type);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.Find1"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public XmlElement Find(string name, string ns)
{
for (int i = 0; i < List.Count; i++)
{
XmlElement element = List[i] as XmlElement;
if (element != null && element.LocalName == name && element.NamespaceURI == ns)
{
SetHandled(element);
return element;
}
}
return null;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.FindAll1"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public XmlElement[] FindAll(string name, string ns)
{
ArrayList list = new ArrayList();
for (int i = 0; i < List.Count; i++)
{
XmlElement element = List[i] as XmlElement;
if (element != null && element.LocalName == name && element.NamespaceURI == ns)
{
SetHandled(element);
list.Add(element);
}
}
return (XmlElement[])list.ToArray(typeof(XmlElement));
}
private void SetHandled(XmlElement element)
{
if (_handledElements == null)
_handledElements = new ArrayList();
if (!_handledElements.Contains(element))
_handledElements.Add(element);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.IsHandled"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool IsHandled(object item)
{
if (item is XmlElement)
return IsHandled((XmlElement)item);
else
return ((ServiceDescriptionFormatExtension)item).Handled;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.IsRequired"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool IsRequired(object item)
{
if (item is XmlElement)
return IsRequired((XmlElement)item);
else
return ((ServiceDescriptionFormatExtension)item).Required;
}
private bool IsHandled(XmlElement element)
{
if (_handledElements == null) return false;
return _handledElements.Contains(element);
}
private bool IsRequired(XmlElement element)
{
XmlAttribute requiredAttr = element.Attributes["required", ServiceDescription.Namespace];
if (requiredAttr == null || requiredAttr.Value == null)
{
requiredAttr = element.Attributes["required"];
if (requiredAttr == null || requiredAttr.Value == null) return false; // not required, by default
}
return XmlConvert.ToBoolean(requiredAttr.Value);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
if (value is ServiceDescriptionFormatExtension) ((ServiceDescriptionFormatExtension)value).SetParent(parent);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtensionCollection.OnValidate"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void OnValidate(object value)
{
if (!(value is XmlElement || value is ServiceDescriptionFormatExtension))
throw new ArgumentException(string.Format(ResWebServices.OnlyXmlElementsOrTypesDerivingFromServiceDescriptionFormatExtension0), "value");
base.OnValidate(value);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtension"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public abstract class ServiceDescriptionFormatExtension
{
private object _parent;
private bool _required;
private bool _handled;
internal void SetParent(object parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtension.Parent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public object Parent
{
get { return _parent; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtension.Required"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlAttribute("required", Namespace = ServiceDescription.Namespace), DefaultValue(false)]
public bool Required
{
get { return _required; }
set { _required = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionFormatExtension.Handled"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
[XmlIgnore]
public bool Handled
{
get { return _handled; }
set { _handled = value; }
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFlow"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public enum OperationFlow
{
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFlow.None"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
None,
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFlow.OneWay"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
OneWay,
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFlow.Notification"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
Notification,
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFlow.RequestResponse"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
RequestResponse,
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFlow.SolicitResponse"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
SolicitResponse,
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class OperationMessageCollection : ServiceDescriptionBaseCollection
{
internal OperationMessageCollection(Operation operation) : base(operation) { }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public OperationMessage this[int index]
{
get { return (OperationMessage)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(OperationMessage operationMessage)
{
return List.Add(operationMessage);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, OperationMessage operationMessage)
{
List.Insert(index, operationMessage);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(OperationMessage operationMessage)
{
return List.IndexOf(operationMessage);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(OperationMessage operationMessage)
{
return List.Contains(operationMessage);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(OperationMessage operationMessage)
{
List.Remove(operationMessage);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(OperationMessage[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.Input"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public OperationInput Input
{
get
{
for (int i = 0; i < List.Count; i++)
{
OperationInput input = List[i] as OperationInput;
if (input != null)
{
return input;
}
}
return null;
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.Output"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public OperationOutput Output
{
get
{
for (int i = 0; i < List.Count; i++)
{
OperationOutput output = List[i] as OperationOutput;
if (output != null)
{
return output;
}
}
return null;
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.Flow"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public OperationFlow Flow
{
get
{
if (List.Count == 0)
{
return OperationFlow.None;
}
else if (List.Count == 1)
{
if (List[0] is OperationInput)
{
return OperationFlow.OneWay;
}
else
{
return OperationFlow.Notification;
}
}
else
{
if (List[0] is OperationInput)
{
return OperationFlow.RequestResponse;
}
else
{
return OperationFlow.SolicitResponse;
}
}
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
((OperationMessage)value).SetParent((Operation)parent);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.OnInsert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void OnInsert(int index, object value)
{
if (Count > 1 || (Count == 1 && value.GetType() == List[0].GetType()))
throw new InvalidOperationException(string.Format(ResWebServices.WebDescriptionTooManyMessages));
base.OnInsert(index, value);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.OnSet"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void OnSet(int index, object oldValue, object newValue)
{
if (oldValue.GetType() != newValue.GetType()) throw new InvalidOperationException(string.Format(ResWebServices.WebDescriptionTooManyMessages));
base.OnSet(index, oldValue, newValue);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationMessageCollection.OnValidate"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void OnValidate(object value)
{
if (!(value is OperationInput || value is OperationOutput))
throw new ArgumentException(string.Format(ResWebServices.OnlyOperationInputOrOperationOutputTypes), "value");
base.OnValidate(value);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ImportCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class ImportCollection : ServiceDescriptionBaseCollection
{
internal ImportCollection(ServiceDescription serviceDescription) : base(serviceDescription) { }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ImportCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Import this[int index]
{
get { return (Import)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ImportCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(Import import)
{
return List.Add(import);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ImportCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, Import import)
{
List.Insert(index, import);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ImportCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(Import import)
{
return List.IndexOf(import);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ImportCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(Import import)
{
return List.Contains(import);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ImportCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(Import import)
{
List.Remove(import);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ImportCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(Import[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ImportCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
((Import)value).SetParent((ServiceDescription)parent);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class MessageCollection : ServiceDescriptionBaseCollection
{
internal MessageCollection(ServiceDescription serviceDescription) : base(serviceDescription) { }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Message this[int index]
{
get { return (Message)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(Message message)
{
return List.Add(message);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, Message message)
{
List.Insert(index, message);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(Message message)
{
return List.IndexOf(message);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(Message message)
{
return List.Contains(message);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(Message message)
{
List.Remove(message);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(Message[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageCollection.this1"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Message this[string name]
{
get { return (Message)Table[name]; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageCollection.GetKey"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override string GetKey(object value)
{
return ((Message)value).Name;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessageCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
((Message)value).SetParent((ServiceDescription)parent);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class PortCollection : ServiceDescriptionBaseCollection
{
internal PortCollection(Service service) : base(service) { }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Port this[int index]
{
get { return (Port)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(Port port)
{
return List.Add(port);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, Port port)
{
List.Insert(index, port);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(Port port)
{
return List.IndexOf(port);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(Port port)
{
return List.Contains(port);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(Port port)
{
List.Remove(port);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(Port[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortCollection.this1"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Port this[string name]
{
get { return (Port)Table[name]; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortCollection.GetKey"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override string GetKey(object value)
{
return ((Port)value).Name;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
((Port)value).SetParent((Service)parent);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortTypeCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class PortTypeCollection : ServiceDescriptionBaseCollection
{
internal PortTypeCollection(ServiceDescription serviceDescription) : base(serviceDescription) { }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortTypeCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public PortType this[int index]
{
get { return (PortType)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortTypeCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(PortType portType)
{
return List.Add(portType);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortTypeCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, PortType portType)
{
List.Insert(index, portType);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortTypeCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(PortType portType)
{
return List.IndexOf(portType);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortTypeCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(PortType portType)
{
return List.Contains(portType);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortTypeCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(PortType portType)
{
List.Remove(portType);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortTypeCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(PortType[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortTypeCollection.this1"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public PortType this[string name]
{
get { return (PortType)Table[name]; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortTypeCollection.GetKey"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override string GetKey(object value)
{
return ((PortType)value).Name;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="PortTypeCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
((PortType)value).SetParent((ServiceDescription)parent);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="BindingCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class BindingCollection : ServiceDescriptionBaseCollection
{
internal BindingCollection(ServiceDescription serviceDescription) : base(serviceDescription) { }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="BindingCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Binding this[int index]
{
get { return (Binding)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="BindingCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(Binding binding)
{
return List.Add(binding);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="BindingCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, Binding binding)
{
List.Insert(index, binding);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="BindingCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(Binding binding)
{
return List.IndexOf(binding);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="BindingCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(Binding binding)
{
return List.Contains(binding);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="BindingCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(Binding binding)
{
List.Remove(binding);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="BindingCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(Binding[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="BindingCollection.this1"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Binding this[string name]
{
get { return (Binding)Table[name]; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="BindingCollection.GetKey"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override string GetKey(object value)
{
return ((Binding)value).Name;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="BindingCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
((Binding)value).SetParent((ServiceDescription)parent);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class ServiceCollection : ServiceDescriptionBaseCollection
{
internal ServiceCollection(ServiceDescription serviceDescription) : base(serviceDescription) { }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Service this[int index]
{
get { return (Service)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(Service service)
{
return List.Add(service);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, Service service)
{
List.Insert(index, service);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(Service service)
{
return List.IndexOf(service);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(Service service)
{
return List.Contains(service);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(Service service)
{
List.Remove(service);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(Service[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceCollection.this1"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Service this[string name]
{
get { return (Service)Table[name]; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceCollection.GetKey"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override string GetKey(object value)
{
return ((Service)value).Name;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
((Service)value).SetParent((ServiceDescription)parent);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePartCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class MessagePartCollection : ServiceDescriptionBaseCollection
{
internal MessagePartCollection(Message message) : base(message) { }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePartCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public MessagePart this[int index]
{
get { return (MessagePart)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePartCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(MessagePart messagePart)
{
return List.Add(messagePart);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePartCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, MessagePart messagePart)
{
List.Insert(index, messagePart);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePartCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(MessagePart messagePart)
{
return List.IndexOf(messagePart);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePartCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(MessagePart messagePart)
{
return List.Contains(messagePart);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePartCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(MessagePart messagePart)
{
List.Remove(messagePart);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePartCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(MessagePart[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePartCollection.this1"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public MessagePart this[string name]
{
get { return (MessagePart)Table[name]; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePartCollection.GetKey"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override string GetKey(object value)
{
return ((MessagePart)value).Name;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="MessagePartCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
((MessagePart)value).SetParent((Message)parent);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBindingCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class OperationBindingCollection : ServiceDescriptionBaseCollection
{
internal OperationBindingCollection(Binding binding) : base(binding) { }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBindingCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public OperationBinding this[int index]
{
get { return (OperationBinding)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBindingCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(OperationBinding bindingOperation)
{
return List.Add(bindingOperation);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBindingCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, OperationBinding bindingOperation)
{
List.Insert(index, bindingOperation);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBindingCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(OperationBinding bindingOperation)
{
return List.IndexOf(bindingOperation);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBindingCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(OperationBinding bindingOperation)
{
return List.Contains(bindingOperation);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBindingCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(OperationBinding bindingOperation)
{
List.Remove(bindingOperation);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBindingCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(OperationBinding[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationBindingCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
((OperationBinding)value).SetParent((Binding)parent);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBindingCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class FaultBindingCollection : ServiceDescriptionBaseCollection
{
internal FaultBindingCollection(OperationBinding operationBinding) : base(operationBinding) { }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBindingCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public FaultBinding this[int index]
{
get { return (FaultBinding)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBindingCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(FaultBinding bindingOperationFault)
{
return List.Add(bindingOperationFault);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBindingCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, FaultBinding bindingOperationFault)
{
List.Insert(index, bindingOperationFault);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBindingCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(FaultBinding bindingOperationFault)
{
return List.IndexOf(bindingOperationFault);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBindingCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(FaultBinding bindingOperationFault)
{
return List.Contains(bindingOperationFault);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBindingCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(FaultBinding bindingOperationFault)
{
List.Remove(bindingOperationFault);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBindingCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(FaultBinding[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBindingCollection.this1"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public FaultBinding this[string name]
{
get { return (FaultBinding)Table[name]; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBindingCollection.GetKey"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override string GetKey(object value)
{
return ((FaultBinding)value).Name;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="FaultBindingCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
((FaultBinding)value).SetParent((OperationBinding)parent);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class OperationCollection : ServiceDescriptionBaseCollection
{
internal OperationCollection(PortType portType) : base(portType) { }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public Operation this[int index]
{
get { return (Operation)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(Operation operation)
{
return List.Add(operation);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, Operation operation)
{
List.Insert(index, operation);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(Operation operation)
{
return List.IndexOf(operation);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(Operation operation)
{
return List.Contains(operation);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(Operation operation)
{
List.Remove(operation);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(Operation[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
((Operation)value).SetParent((PortType)parent);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFaultCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public sealed class OperationFaultCollection : ServiceDescriptionBaseCollection
{
internal OperationFaultCollection(Operation operation) : base(operation) { }
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFaultCollection.this"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public OperationFault this[int index]
{
get { return (OperationFault)List[index]; }
set { List[index] = value; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFaultCollection.Add"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int Add(OperationFault operationFaultMessage)
{
return List.Add(operationFaultMessage);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFaultCollection.Insert"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Insert(int index, OperationFault operationFaultMessage)
{
List.Insert(index, operationFaultMessage);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFaultCollection.IndexOf"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public int IndexOf(OperationFault operationFaultMessage)
{
return List.IndexOf(operationFaultMessage);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFaultCollection.Contains"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public bool Contains(OperationFault operationFaultMessage)
{
return List.Contains(operationFaultMessage);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFaultCollection.Remove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void Remove(OperationFault operationFaultMessage)
{
List.Remove(operationFaultMessage);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFaultCollection.CopyTo"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public void CopyTo(OperationFault[] array, int index)
{
List.CopyTo(array, index);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFaultCollection.this1"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public OperationFault this[string name]
{
get { return (OperationFault)Table[name]; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFaultCollection.GetKey"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override string GetKey(object value)
{
return ((OperationFault)value).Name;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="OperationFaultCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void SetParent(object value, object parent)
{
((OperationFault)value).SetParent((Operation)parent);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionBaseCollection"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
public abstract class ServiceDescriptionBaseCollection : CollectionBase
{
private Hashtable _table; // CONSIDER, better implementation
private object _parent;
internal ServiceDescriptionBaseCollection(object parent)
{
_parent = parent;
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionBaseCollection.Table"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected virtual IDictionary Table
{
get { if (_table == null) _table = new Hashtable(); return _table; }
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionBaseCollection.GetKey"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected virtual string GetKey(object value)
{
return null; // returning null means there is no key
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionBaseCollection.SetParent"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected virtual void SetParent(object value, object parent)
{
// default is that the item has no parent
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionBaseCollection.OnInsertComplete"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void OnInsertComplete(int index, object value)
{
AddValue(value);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionBaseCollection.OnRemove"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void OnRemove(int index, object value)
{
RemoveValue(value);
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionBaseCollection.OnClear"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void OnClear()
{
for (int i = 0; i < List.Count; i++)
{
RemoveValue(List[i]);
}
}
/// <include file='doc\ServiceDescription.uex' path='docs/doc[@for="ServiceDescriptionBaseCollection.OnSet"]/*' />
/// <devdoc>
/// <para>[To be supplied.]</para>
/// </devdoc>
protected override void OnSet(int index, object oldValue, object newValue)
{
RemoveValue(oldValue);
AddValue(newValue);
}
private void AddValue(object value)
{
string key = GetKey(value);
if (key != null)
{
try
{
Table.Add(key, value);
}
catch (Exception e)
{
if (e is OutOfMemoryException)
{
throw;
}
if (Table[key] != null)
{
throw new ArgumentException(GetDuplicateMessage(value.GetType(), key), e.InnerException);
}
else
{
throw e;
}
}
}
SetParent(value, _parent);
}
private void RemoveValue(object value)
{
string key = GetKey(value);
if (key != null) Table.Remove(key);
SetParent(value, null);
}
private static string GetDuplicateMessage(Type type, string elemName)
{
string message = null;
if (type == typeof(ServiceDescriptionFormatExtension))
message = string.Format(ResWebServices.WebDuplicateFormatExtension, elemName);
else if (type == typeof(OperationMessage))
message = string.Format(ResWebServices.WebDuplicateOperationMessage, elemName);
else if (type == typeof(Import))
message = string.Format(ResWebServices.WebDuplicateImport, elemName);
else if (type == typeof(Message))
message = string.Format(ResWebServices.WebDuplicateMessage, elemName);
else if (type == typeof(Port))
message = string.Format(ResWebServices.WebDuplicatePort, elemName);
else if (type == typeof(PortType))
message = string.Format(ResWebServices.WebDuplicatePortType, elemName);
else if (type == typeof(Binding))
message = string.Format(ResWebServices.WebDuplicateBinding, elemName);
else if (type == typeof(Service))
message = string.Format(ResWebServices.WebDuplicateService, elemName);
else if (type == typeof(MessagePart))
message = string.Format(ResWebServices.WebDuplicateMessagePart, elemName);
else if (type == typeof(OperationBinding))
message = string.Format(ResWebServices.WebDuplicateOperationBinding, elemName);
else if (type == typeof(FaultBinding))
message = string.Format(ResWebServices.WebDuplicateFaultBinding, elemName);
else if (type == typeof(Operation))
message = string.Format(ResWebServices.WebDuplicateOperation, elemName);
else if (type == typeof(OperationFault))
message = string.Format(ResWebServices.WebDuplicateOperationFault, elemName);
else
message = string.Format(ResWebServices.WebDuplicateUnknownElement, type, elemName);
return message;
}
}
internal class Schemas
{
private Schemas() { }
internal const string Wsdl = @"<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
targetNamespace='http://schemas.xmlsoap.org/wsdl/'
elementFormDefault='qualified' >
<xs:complexType mixed='true' name='tDocumentation' >
<xs:sequence>
<xs:any minOccurs='0' maxOccurs='unbounded' processContents='lax' />
</xs:sequence>
</xs:complexType>
<xs:complexType name='tDocumented' >
<xs:annotation>
<xs:documentation>
This type is extended by component types to allow them to be documented
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name='documentation' type='wsdl:tDocumentation' minOccurs='0' />
</xs:sequence>
</xs:complexType>
<!-- allow extensibility via elements and attributes on all elements swa124 -->
<xs:complexType name='tExtensibleAttributesDocumented' abstract='true' >
<xs:complexContent>
<xs:extension base='wsdl:tDocumented' >
<xs:annotation>
<xs:documentation>
This type is extended by component types to allow attributes from other namespaces to be added.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' processContents='lax' />
</xs:sequence>
<xs:anyAttribute namespace='##other' processContents='lax' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tExtensibleDocumented' abstract='true' >
<xs:complexContent>
<xs:extension base='wsdl:tDocumented' >
<xs:annotation>
<xs:documentation>
This type is extended by component types to allow elements from other namespaces to be added.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' processContents='lax' />
</xs:sequence>
<xs:anyAttribute namespace='##other' processContents='lax' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- original wsdl removed as part of swa124 resolution
<xs:complexType name='tExtensibleAttributesDocumented' abstract='true' >
<xs:complexContent>
<xs:extension base='wsdl:tDocumented' >
<xs:annotation>
<xs:documentation>
This type is extended by component types to allow attributes from other namespaces to be added.
</xs:documentation>
</xs:annotation>
<xs:anyAttribute namespace='##other' processContents='lax' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tExtensibleDocumented' abstract='true' >
<xs:complexContent>
<xs:extension base='wsdl:tDocumented' >
<xs:annotation>
<xs:documentation>
This type is extended by component types to allow elements from other namespaces to be added.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' processContents='lax' />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
-->
<xs:element name='definitions' type='wsdl:tDefinitions' >
<xs:key name='message' >
<xs:selector xpath='wsdl:message' />
<xs:field xpath='@name' />
</xs:key>
<xs:key name='portType' >
<xs:selector xpath='wsdl:portType' />
<xs:field xpath='@name' />
</xs:key>
<xs:key name='binding' >
<xs:selector xpath='wsdl:binding' />
<xs:field xpath='@name' />
</xs:key>
<xs:key name='service' >
<xs:selector xpath='wsdl:service' />
<xs:field xpath='@name' />
</xs:key>
<xs:key name='import' >
<xs:selector xpath='wsdl:import' />
<xs:field xpath='@namespace' />
</xs:key>
</xs:element>
<xs:group name='anyTopLevelOptionalElement' >
<xs:annotation>
<xs:documentation>
Any top level optional element allowed to appear more then once - any child of definitions element except wsdl:types. Any extensibility element is allowed in any place.
</xs:documentation>
</xs:annotation>
<xs:choice>
<xs:element name='import' type='wsdl:tImport' />
<xs:element name='types' type='wsdl:tTypes' />
<xs:element name='message' type='wsdl:tMessage' >
<xs:unique name='part' >
<xs:selector xpath='wsdl:part' />
<xs:field xpath='@name' />
</xs:unique>
</xs:element>
<xs:element name='portType' type='wsdl:tPortType' />
<xs:element name='binding' type='wsdl:tBinding' />
<xs:element name='service' type='wsdl:tService' >
<xs:unique name='port' >
<xs:selector xpath='wsdl:port' />
<xs:field xpath='@name' />
</xs:unique>
</xs:element>
</xs:choice>
</xs:group>
<xs:complexType name='tDefinitions' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleDocumented' >
<xs:sequence>
<xs:group ref='wsdl:anyTopLevelOptionalElement' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
<xs:attribute name='targetNamespace' type='xs:anyURI' use='optional' />
<xs:attribute name='name' type='xs:NCName' use='optional' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tImport' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleAttributesDocumented' >
<xs:attribute name='namespace' type='xs:anyURI' use='required' />
<xs:attribute name='location' type='xs:anyURI' use='required' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tTypes' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleDocumented' />
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tMessage' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleDocumented' >
<xs:sequence>
<xs:element name='part' type='wsdl:tPart' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
<xs:attribute name='name' type='xs:NCName' use='required' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tPart' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleAttributesDocumented' >
<xs:attribute name='name' type='xs:NCName' use='required' />
<xs:attribute name='element' type='xs:QName' use='optional' />
<xs:attribute name='type' type='xs:QName' use='optional' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tPortType' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleAttributesDocumented' >
<xs:sequence>
<xs:element name='operation' type='wsdl:tOperation' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
<xs:attribute name='name' type='xs:NCName' use='required' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tOperation' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleDocumented' >
<xs:sequence>
<xs:choice>
<xs:group ref='wsdl:request-response-or-one-way-operation' />
<xs:group ref='wsdl:solicit-response-or-notification-operation' />
</xs:choice>
</xs:sequence>
<xs:attribute name='name' type='xs:NCName' use='required' />
<xs:attribute name='parameterOrder' type='xs:NMTOKENS' use='optional' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:group name='request-response-or-one-way-operation' >
<xs:sequence>
<xs:element name='input' type='wsdl:tParam' />
<xs:sequence minOccurs='0' >
<xs:element name='output' type='wsdl:tParam' />
<xs:element name='fault' type='wsdl:tFault' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
</xs:sequence>
</xs:group>
<xs:group name='solicit-response-or-notification-operation' >
<xs:sequence>
<xs:element name='output' type='wsdl:tParam' />
<xs:sequence minOccurs='0' >
<xs:element name='input' type='wsdl:tParam' />
<xs:element name='fault' type='wsdl:tFault' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
</xs:sequence>
</xs:group>
<xs:complexType name='tParam' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleAttributesDocumented' >
<xs:attribute name='name' type='xs:NCName' use='optional' />
<xs:attribute name='message' type='xs:QName' use='required' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tFault' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleAttributesDocumented' >
<xs:attribute name='name' type='xs:NCName' use='required' />
<xs:attribute name='message' type='xs:QName' use='required' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tBinding' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleDocumented' >
<xs:sequence>
<xs:element name='operation' type='wsdl:tBindingOperation' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
<xs:attribute name='name' type='xs:NCName' use='required' />
<xs:attribute name='type' type='xs:QName' use='required' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tBindingOperationMessage' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleDocumented' >
<xs:attribute name='name' type='xs:NCName' use='optional' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tBindingOperationFault' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleDocumented' >
<xs:attribute name='name' type='xs:NCName' use='required' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tBindingOperation' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleDocumented' >
<xs:sequence>
<xs:element name='input' type='wsdl:tBindingOperationMessage' minOccurs='0' />
<xs:element name='output' type='wsdl:tBindingOperationMessage' minOccurs='0' />
<xs:element name='fault' type='wsdl:tBindingOperationFault' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
<xs:attribute name='name' type='xs:NCName' use='required' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tService' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleDocumented' >
<xs:sequence>
<xs:element name='port' type='wsdl:tPort' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
<xs:attribute name='name' type='xs:NCName' use='required' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tPort' >
<xs:complexContent>
<xs:extension base='wsdl:tExtensibleDocumented' >
<xs:attribute name='name' type='xs:NCName' use='required' />
<xs:attribute name='binding' type='xs:QName' use='required' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:attribute name='arrayType' type='xs:string' />
<xs:attribute name='required' type='xs:boolean' />
<xs:complexType name='tExtensibilityElement' abstract='true' >
<xs:attribute ref='wsdl:required' use='optional' />
</xs:complexType>
</xs:schema>";
internal const string Soap = @"<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' targetNamespace='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<xs:import namespace='http://schemas.xmlsoap.org/wsdl/' />
<xs:simpleType name='encodingStyle'>
<xs:annotation>
<xs:documentation>
'encodingStyle' indicates any canonicalization conventions followed in the contents of the containing element. For example, the value 'http://schemas.xmlsoap.org/soap/encoding/' indicates the pattern described in SOAP specification
</xs:documentation>
</xs:annotation>
<xs:list itemType='xs:anyURI' />
</xs:simpleType>
<xs:element name='binding' type='soap:tBinding' />
<xs:complexType name='tBinding'>
<xs:complexContent mixed='false'>
<xs:extension base='wsdl:tExtensibilityElement'>
<xs:attribute name='transport' type='xs:anyURI' use='required' />
<xs:attribute name='style' type='soap:tStyleChoice' use='optional' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name='tStyleChoice'>
<xs:restriction base='xs:string'>
<xs:enumeration value='rpc' />
<xs:enumeration value='document' />
</xs:restriction>
</xs:simpleType>
<xs:element name='operation' type='soap:tOperation' />
<xs:complexType name='tOperation'>
<xs:complexContent mixed='false'>
<xs:extension base='wsdl:tExtensibilityElement'>
<xs:attribute name='soapAction' type='xs:anyURI' use='optional' />
<xs:attribute name='style' type='soap:tStyleChoice' use='optional' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name='body' type='soap:tBody' />
<xs:attributeGroup name='tBodyAttributes'>
<xs:attribute name='encodingStyle' type='soap:encodingStyle' use='optional' />
<xs:attribute name='use' type='soap:useChoice' use='optional' />
<xs:attribute name='namespace' type='xs:anyURI' use='optional' />
</xs:attributeGroup>
<xs:complexType name='tBody'>
<xs:complexContent mixed='false'>
<xs:extension base='wsdl:tExtensibilityElement'>
<xs:attribute name='parts' type='xs:NMTOKENS' use='optional' />
<xs:attributeGroup ref='soap:tBodyAttributes' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:simpleType name='useChoice'>
<xs:restriction base='xs:string'>
<xs:enumeration value='literal' />
<xs:enumeration value='encoded' />
</xs:restriction>
</xs:simpleType>
<xs:element name='fault' type='soap:tFault' />
<xs:complexType name='tFaultRes' abstract='true'>
<xs:complexContent mixed='false'>
<xs:restriction base='soap:tBody'>
<xs:attribute ref='wsdl:required' use='optional' />
<xs:attribute name='parts' type='xs:NMTOKENS' use='prohibited' />
<xs:attributeGroup ref='soap:tBodyAttributes' />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
<xs:complexType name='tFault'>
<xs:complexContent mixed='false'>
<xs:extension base='soap:tFaultRes'>
<xs:attribute name='name' type='xs:NCName' use='required' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name='header' type='soap:tHeader' />
<xs:attributeGroup name='tHeaderAttributes'>
<xs:attribute name='message' type='xs:QName' use='required' />
<xs:attribute name='part' type='xs:NMTOKEN' use='required' />
<xs:attribute name='use' type='soap:useChoice' use='required' />
<xs:attribute name='encodingStyle' type='soap:encodingStyle' use='optional' />
<xs:attribute name='namespace' type='xs:anyURI' use='optional' />
</xs:attributeGroup>
<xs:complexType name='tHeader'>
<xs:complexContent mixed='false'>
<xs:extension base='wsdl:tExtensibilityElement'>
<xs:sequence>
<xs:element minOccurs='0' maxOccurs='unbounded' ref='soap:headerfault' />
</xs:sequence>
<xs:attributeGroup ref='soap:tHeaderAttributes' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name='headerfault' type='soap:tHeaderFault' />
<xs:complexType name='tHeaderFault'>
<xs:attributeGroup ref='soap:tHeaderAttributes' />
</xs:complexType>
<xs:element name='address' type='soap:tAddress' />
<xs:complexType name='tAddress'>
<xs:complexContent mixed='false'>
<xs:extension base='wsdl:tExtensibilityElement'>
<xs:attribute name='location' type='xs:anyURI' use='required' />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>";
internal const string WebRef = @"<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema xmlns:tns='http://microsoft.com/webReference/' elementFormDefault='qualified' targetNamespace='http://microsoft.com/webReference/' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<xs:simpleType name='options'>
<xs:list>
<xs:simpleType>
<xs:restriction base='xs:string'>
<xs:enumeration value='properties' />
<xs:enumeration value='newAsync' />
<xs:enumeration value='oldAsync' />
<xs:enumeration value='order' />
<xs:enumeration value='enableDataBinding' />
</xs:restriction>
</xs:simpleType>
</xs:list>
</xs:simpleType>
<xs:simpleType name='style'>
<xs:restriction base='xs:string'>
<xs:enumeration value='client' />
<xs:enumeration value='server' />
<xs:enumeration value='serverInterface' />
</xs:restriction>
</xs:simpleType>
<xs:complexType name='webReferenceOptions'>
<xs:all>
<xs:element minOccurs='0' default='oldAsync' name='codeGenerationOptions' type='tns:options' />
<xs:element minOccurs='0' default='client' name='style' type='tns:style' />
<xs:element minOccurs='0' default='false' name='verbose' type='xs:boolean' />
<xs:element minOccurs='0' name='schemaImporterExtensions'>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs='0' maxOccurs='unbounded' name='type' type='xs:string' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:element name='webReferenceOptions' type='tns:webReferenceOptions' />
<xs:complexType name='wsdlParameters'>
<xs:all>
<xs:element minOccurs='0' name='appSettingBaseUrl' type='xs:string' />
<xs:element minOccurs='0' name='appSettingUrlKey' type='xs:string' />
<xs:element minOccurs='0' name='domain' type='xs:string' />
<xs:element minOccurs='0' name='out' type='xs:string' />
<xs:element minOccurs='0' name='password' type='xs:string' />
<xs:element minOccurs='0' name='proxy' type='xs:string' />
<xs:element minOccurs='0' name='proxydomain' type='xs:string' />
<xs:element minOccurs='0' name='proxypassword' type='xs:string' />
<xs:element minOccurs='0' name='proxyusername' type='xs:string' />
<xs:element minOccurs='0' name='username' type='xs:string' />
<xs:element minOccurs='0' name='namespace' type='xs:string' />
<xs:element minOccurs='0' name='language' type='xs:string' />
<xs:element minOccurs='0' name='protocol' type='xs:string' />
<xs:element minOccurs='0' name='nologo' type='xs:boolean' />
<xs:element minOccurs='0' name='parsableerrors' type='xs:boolean' />
<xs:element minOccurs='0' name='sharetypes' type='xs:boolean' />
<xs:element minOccurs='0' name='webReferenceOptions' type='tns:webReferenceOptions' />
<xs:element minOccurs='0' name='documents'>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs='0' maxOccurs='unbounded' name='document' type='xs:string' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:element name='wsdlParameters' type='tns:wsdlParameters' />
</xs:schema>";
internal const string SoapEncoding = @"<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
xmlns:tns='http://schemas.xmlsoap.org/soap/encoding/'
targetNamespace='http://schemas.xmlsoap.org/soap/encoding/' >
<xs:attribute name='root' >
<xs:simpleType>
<xs:restriction base='xs:boolean'>
<xs:pattern value='0|1' />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attributeGroup name='commonAttributes' >
<xs:attribute name='id' type='xs:ID' />
<xs:attribute name='href' type='xs:anyURI' />
<xs:anyAttribute namespace='##other' processContents='lax' />
</xs:attributeGroup>
<xs:simpleType name='arrayCoordinate' >
<xs:restriction base='xs:string' />
</xs:simpleType>
<xs:attribute name='arrayType' type='xs:string' />
<xs:attribute name='offset' type='tns:arrayCoordinate' />
<xs:attributeGroup name='arrayAttributes' >
<xs:attribute ref='tns:arrayType' />
<xs:attribute ref='tns:offset' />
</xs:attributeGroup>
<xs:attribute name='position' type='tns:arrayCoordinate' />
<xs:attributeGroup name='arrayMemberAttributes' >
<xs:attribute ref='tns:position' />
</xs:attributeGroup>
<xs:group name='Array' >
<xs:sequence>
<xs:any namespace='##any' minOccurs='0' maxOccurs='unbounded' processContents='lax' />
</xs:sequence>
</xs:group>
<xs:element name='Array' type='tns:Array' />
<xs:complexType name='Array' >
<xs:group ref='tns:Array' minOccurs='0' />
<xs:attributeGroup ref='tns:arrayAttributes' />
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:complexType>
<xs:element name='Struct' type='tns:Struct' />
<xs:group name='Struct' >
<xs:sequence>
<xs:any namespace='##any' minOccurs='0' maxOccurs='unbounded' processContents='lax' />
</xs:sequence>
</xs:group>
<xs:complexType name='Struct' >
<xs:group ref='tns:Struct' minOccurs='0' />
<xs:attributeGroup ref='tns:commonAttributes'/>
</xs:complexType>
<xs:simpleType name='base64' >
<xs:restriction base='xs:base64Binary' />
</xs:simpleType>
<xs:element name='duration' type='tns:duration' />
<xs:complexType name='duration' >
<xs:simpleContent>
<xs:extension base='xs:duration' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='dateTime' type='tns:dateTime' />
<xs:complexType name='dateTime' >
<xs:simpleContent>
<xs:extension base='xs:dateTime' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='NOTATION' type='tns:NOTATION' />
<xs:complexType name='NOTATION' >
<xs:simpleContent>
<xs:extension base='xs:QName' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='time' type='tns:time' />
<xs:complexType name='time' >
<xs:simpleContent>
<xs:extension base='xs:time' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='date' type='tns:date' />
<xs:complexType name='date' >
<xs:simpleContent>
<xs:extension base='xs:date' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='gYearMonth' type='tns:gYearMonth' />
<xs:complexType name='gYearMonth' >
<xs:simpleContent>
<xs:extension base='xs:gYearMonth' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='gYear' type='tns:gYear' />
<xs:complexType name='gYear' >
<xs:simpleContent>
<xs:extension base='xs:gYear' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='gMonthDay' type='tns:gMonthDay' />
<xs:complexType name='gMonthDay' >
<xs:simpleContent>
<xs:extension base='xs:gMonthDay' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='gDay' type='tns:gDay' />
<xs:complexType name='gDay' >
<xs:simpleContent>
<xs:extension base='xs:gDay' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='gMonth' type='tns:gMonth' />
<xs:complexType name='gMonth' >
<xs:simpleContent>
<xs:extension base='xs:gMonth' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='boolean' type='tns:boolean' />
<xs:complexType name='boolean' >
<xs:simpleContent>
<xs:extension base='xs:boolean' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='base64Binary' type='tns:base64Binary' />
<xs:complexType name='base64Binary' >
<xs:simpleContent>
<xs:extension base='xs:base64Binary' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='hexBinary' type='tns:hexBinary' />
<xs:complexType name='hexBinary' >
<xs:simpleContent>
<xs:extension base='xs:hexBinary' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='float' type='tns:float' />
<xs:complexType name='float' >
<xs:simpleContent>
<xs:extension base='xs:float' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='double' type='tns:double' />
<xs:complexType name='double' >
<xs:simpleContent>
<xs:extension base='xs:double' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='anyURI' type='tns:anyURI' />
<xs:complexType name='anyURI' >
<xs:simpleContent>
<xs:extension base='xs:anyURI' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='QName' type='tns:QName' />
<xs:complexType name='QName' >
<xs:simpleContent>
<xs:extension base='xs:QName' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='string' type='tns:string' />
<xs:complexType name='string' >
<xs:simpleContent>
<xs:extension base='xs:string' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='normalizedString' type='tns:normalizedString' />
<xs:complexType name='normalizedString' >
<xs:simpleContent>
<xs:extension base='xs:normalizedString' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='token' type='tns:token' />
<xs:complexType name='token' >
<xs:simpleContent>
<xs:extension base='xs:token' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='language' type='tns:language' />
<xs:complexType name='language' >
<xs:simpleContent>
<xs:extension base='xs:language' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='Name' type='tns:Name' />
<xs:complexType name='Name' >
<xs:simpleContent>
<xs:extension base='xs:Name' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='NMTOKEN' type='tns:NMTOKEN' />
<xs:complexType name='NMTOKEN' >
<xs:simpleContent>
<xs:extension base='xs:NMTOKEN' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='NCName' type='tns:NCName' />
<xs:complexType name='NCName' >
<xs:simpleContent>
<xs:extension base='xs:NCName' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='NMTOKENS' type='tns:NMTOKENS' />
<xs:complexType name='NMTOKENS' >
<xs:simpleContent>
<xs:extension base='xs:NMTOKENS' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='ID' type='tns:ID' />
<xs:complexType name='ID' >
<xs:simpleContent>
<xs:extension base='xs:ID' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='IDREF' type='tns:IDREF' />
<xs:complexType name='IDREF' >
<xs:simpleContent>
<xs:extension base='xs:IDREF' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='ENTITY' type='tns:ENTITY' />
<xs:complexType name='ENTITY' >
<xs:simpleContent>
<xs:extension base='xs:ENTITY' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='IDREFS' type='tns:IDREFS' />
<xs:complexType name='IDREFS' >
<xs:simpleContent>
<xs:extension base='xs:IDREFS' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='ENTITIES' type='tns:ENTITIES' />
<xs:complexType name='ENTITIES' >
<xs:simpleContent>
<xs:extension base='xs:ENTITIES' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='decimal' type='tns:decimal' />
<xs:complexType name='decimal' >
<xs:simpleContent>
<xs:extension base='xs:decimal' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='integer' type='tns:integer' />
<xs:complexType name='integer' >
<xs:simpleContent>
<xs:extension base='xs:integer' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='nonPositiveInteger' type='tns:nonPositiveInteger' />
<xs:complexType name='nonPositiveInteger' >
<xs:simpleContent>
<xs:extension base='xs:nonPositiveInteger' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='negativeInteger' type='tns:negativeInteger' />
<xs:complexType name='negativeInteger' >
<xs:simpleContent>
<xs:extension base='xs:negativeInteger' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='long' type='tns:long' />
<xs:complexType name='long' >
<xs:simpleContent>
<xs:extension base='xs:long' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='int' type='tns:int' />
<xs:complexType name='int' >
<xs:simpleContent>
<xs:extension base='xs:int' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='short' type='tns:short' />
<xs:complexType name='short' >
<xs:simpleContent>
<xs:extension base='xs:short' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='byte' type='tns:byte' />
<xs:complexType name='byte' >
<xs:simpleContent>
<xs:extension base='xs:byte' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='nonNegativeInteger' type='tns:nonNegativeInteger' />
<xs:complexType name='nonNegativeInteger' >
<xs:simpleContent>
<xs:extension base='xs:nonNegativeInteger' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='unsignedLong' type='tns:unsignedLong' />
<xs:complexType name='unsignedLong' >
<xs:simpleContent>
<xs:extension base='xs:unsignedLong' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='unsignedInt' type='tns:unsignedInt' />
<xs:complexType name='unsignedInt' >
<xs:simpleContent>
<xs:extension base='xs:unsignedInt' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='unsignedShort' type='tns:unsignedShort' />
<xs:complexType name='unsignedShort' >
<xs:simpleContent>
<xs:extension base='xs:unsignedShort' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='unsignedByte' type='tns:unsignedByte' />
<xs:complexType name='unsignedByte' >
<xs:simpleContent>
<xs:extension base='xs:unsignedByte' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='positiveInteger' type='tns:positiveInteger' />
<xs:complexType name='positiveInteger' >
<xs:simpleContent>
<xs:extension base='xs:positiveInteger' >
<xs:attributeGroup ref='tns:commonAttributes' />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name='anyType' />
</xs:schema>";
}
}
|