//----------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Runtime; using System.ServiceModel.Description; using System.Xml; internal class UnrecognizedAssertionsBindingElement : BindingElement { XmlQualifiedName wsdlBinding; ICollection bindingAsserions; IDictionary> operationAssertions; IDictionary> messageAssertions; internal protected UnrecognizedAssertionsBindingElement(XmlQualifiedName wsdlBinding, ICollection bindingAsserions) { Fx.Assert(wsdlBinding != null, ""); this.wsdlBinding = wsdlBinding; this.bindingAsserions = bindingAsserions; } internal XmlQualifiedName WsdlBinding { get { return this.wsdlBinding; } } internal ICollection BindingAsserions { get { if (this.bindingAsserions == null) this.bindingAsserions = new Collection(); return this.bindingAsserions; } } internal IDictionary> OperationAssertions { get { if (this.operationAssertions == null) this.operationAssertions = new Dictionary>(); return this.operationAssertions; } } internal IDictionary> MessageAssertions { get { if (this.messageAssertions == null) this.messageAssertions = new Dictionary>(); return this.messageAssertions; } } internal void Add(OperationDescription operation, ICollection assertions) { ICollection existent; if (!OperationAssertions.TryGetValue(operation, out existent)) { OperationAssertions.Add(operation, assertions); } else { foreach (XmlElement assertion in assertions) existent.Add(assertion); } } internal void Add(MessageDescription message, ICollection assertions) { ICollection existent; if (!MessageAssertions.TryGetValue(message, out existent)) { MessageAssertions.Add(message, assertions); } else { foreach (XmlElement assertion in assertions) existent.Add(assertion); } } protected UnrecognizedAssertionsBindingElement(UnrecognizedAssertionsBindingElement elementToBeCloned) : base(elementToBeCloned) { this.wsdlBinding = elementToBeCloned.wsdlBinding; this.bindingAsserions = elementToBeCloned.bindingAsserions; this.operationAssertions = elementToBeCloned.operationAssertions; this.messageAssertions = elementToBeCloned.messageAssertions; } public override T GetProperty(BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } return context.GetInnerProperty(); } public override BindingElement Clone() { //throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.UnsupportedBindingElementClone, typeof(UnrecognizedAssertionsBindingElement).Name))); // do not allow Cloning, return an empty BindingElement return new UnrecognizedAssertionsBindingElement(new XmlQualifiedName(wsdlBinding.Name, wsdlBinding.Namespace), null); } } }