| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- //-----------------------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace System.ServiceModel.Description
- {
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Runtime;
- using System.ServiceModel.Channels;
- //For export we provide a builder that allows the gradual construction of a set of MetadataDocuments
- public abstract class MetadataExporter
- {
- PolicyVersion policyVersion = PolicyVersion.Policy12;
- readonly Collection<MetadataConversionError> errors = new Collection<MetadataConversionError>();
- readonly Dictionary<object, object> state = new Dictionary<object, object>();
- //prevent inheritance until we are ready to allow it.
- internal MetadataExporter()
- {
- }
- public PolicyVersion PolicyVersion
- {
- get
- {
- return this.policyVersion;
- }
- set
- {
- if (value == null)
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value");
- this.policyVersion = value;
- }
- }
- public Collection<MetadataConversionError> Errors
- {
- get { return this.errors; }
- }
- public Dictionary<object, object> State
- {
- get { return this.state; }
- }
- public abstract void ExportContract(ContractDescription contract);
- public abstract void ExportEndpoint(ServiceEndpoint endpoint);
- public abstract MetadataSet GetGeneratedMetadata();
- internal PolicyConversionContext ExportPolicy(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
- {
- PolicyConversionContext policyContext = new ExportedPolicyConversionContext(endpoint, bindingParameters);
- foreach (IPolicyExportExtension exporter in endpoint.Binding.CreateBindingElements().FindAll<IPolicyExportExtension>())
- try
- {
- exporter.ExportPolicy(this, policyContext);
- }
- #pragma warning suppress 56500 // covered by FxCOP
- catch (Exception e)
- {
- if (Fx.IsFatal(e))
- throw;
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateExtensionException(exporter, e));
- }
- return policyContext;
- }
- protected internal PolicyConversionContext ExportPolicy(ServiceEndpoint endpoint)
- {
- return this.ExportPolicy(endpoint, null);
- }
- sealed class ExportedPolicyConversionContext : PolicyConversionContext
- {
- readonly BindingElementCollection bindingElements;
- PolicyAssertionCollection bindingAssertions;
- Dictionary<OperationDescription, PolicyAssertionCollection> operationBindingAssertions;
- Dictionary<MessageDescription, PolicyAssertionCollection> messageBindingAssertions;
- Dictionary<FaultDescription, PolicyAssertionCollection> faultBindingAssertions;
- BindingParameterCollection bindingParameters;
- internal ExportedPolicyConversionContext(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
- : base(endpoint)
- {
- this.bindingElements = endpoint.Binding.CreateBindingElements();
- this.bindingAssertions = new PolicyAssertionCollection();
- this.operationBindingAssertions = new Dictionary<OperationDescription, PolicyAssertionCollection>();
- this.messageBindingAssertions = new Dictionary<MessageDescription, PolicyAssertionCollection>();
- this.faultBindingAssertions = new Dictionary<FaultDescription, PolicyAssertionCollection>();
- this.bindingParameters = bindingParameters;
- }
- public override BindingElementCollection BindingElements
- {
- get { return this.bindingElements; }
- }
- internal override BindingParameterCollection BindingParameters
- {
- get { return this.bindingParameters; }
- }
- public override PolicyAssertionCollection GetBindingAssertions()
- {
- return bindingAssertions;
- }
- public override PolicyAssertionCollection GetOperationBindingAssertions(OperationDescription operation)
- {
- lock (operationBindingAssertions)
- {
- if (!operationBindingAssertions.ContainsKey(operation))
- operationBindingAssertions.Add(operation, new PolicyAssertionCollection());
- }
- return operationBindingAssertions[operation];
- }
- public override PolicyAssertionCollection GetMessageBindingAssertions(MessageDescription message)
- {
- lock (messageBindingAssertions)
- {
- if (!messageBindingAssertions.ContainsKey(message))
- messageBindingAssertions.Add(message, new PolicyAssertionCollection());
- }
- return messageBindingAssertions[message];
- }
- public override PolicyAssertionCollection GetFaultBindingAssertions(FaultDescription fault)
- {
- lock (faultBindingAssertions)
- {
- if (!faultBindingAssertions.ContainsKey(fault))
- faultBindingAssertions.Add(fault, new PolicyAssertionCollection());
- }
- return faultBindingAssertions[fault];
- }
- }
- Exception CreateExtensionException(IPolicyExportExtension exporter, Exception e)
- {
- string errorMessage = SR.GetString(SR.PolicyExtensionExportError, exporter.GetType(), e.Message);
- return new InvalidOperationException(errorMessage, e);
- }
- }
- }
|