1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
namespace System.ServiceModel.Configuration
{
using System.Configuration;
using System.ServiceModel.Description;
using System.Globalization;
using System.Net;
using System.Net.Security;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.PeerResolvers;
using System.ComponentModel;
public sealed partial class PeerCustomResolverElement : ServiceModelConfigurationElement
{
[ConfigurationProperty(ConfigurationStrings.Address, DefaultValue = null, Options = ConfigurationPropertyOptions.None)]
public Uri Address
{
get { return (Uri)base[ConfigurationStrings.Address]; }
set { base[ConfigurationStrings.Address] = value; }
}
[ConfigurationProperty(ConfigurationStrings.Headers)]
public AddressHeaderCollectionElement Headers
{
get { return (AddressHeaderCollectionElement)base[ConfigurationStrings.Headers]; }
}
[ConfigurationProperty(ConfigurationStrings.Identity)]
public IdentityElement Identity
{
get { return (IdentityElement)base[ConfigurationStrings.Identity]; }
}
[ConfigurationProperty(ConfigurationStrings.Binding, DefaultValue = "")]
[StringValidator(MinLength = 0)]
public string Binding
{
get { return (string)base[ConfigurationStrings.Binding]; }
set { base[ConfigurationStrings.Binding] = value; }
}
[ConfigurationProperty(ConfigurationStrings.BindingConfiguration, DefaultValue = "")]
[StringValidator(MinLength = 0)]
public string BindingConfiguration
{
get { return (string)base[ConfigurationStrings.BindingConfiguration]; }
set { base[ConfigurationStrings.BindingConfiguration] = value; }
}
[ConfigurationProperty(ConfigurationStrings.PeerResolverType, DefaultValue = "")]
[StringValidator(MinLength = 0)]
public string ResolverType
{
get { return (string)base[ConfigurationStrings.PeerResolverType]; }
set { base[ConfigurationStrings.PeerResolverType] = value; }
}
internal void ApplyConfiguration(PeerCustomResolverSettings settings)
{
if (settings == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("settings");
}
if (this.Address != null)
{
settings.Address = new EndpointAddress(this.Address, ConfigLoader.LoadIdentity(this.Identity), this.Headers.Headers);
}
settings.BindingSection = this.Binding;
settings.BindingConfiguration = this.BindingConfiguration;
if (!String.IsNullOrEmpty(this.Binding) && !String.IsNullOrEmpty(this.BindingConfiguration))
settings.Binding = ConfigLoader.LookupBinding(this.Binding, this.BindingConfiguration);
if (!String.IsNullOrEmpty(this.ResolverType))
{
Type myResolverType = Type.GetType(this.ResolverType, false);
if (myResolverType != null)
{
settings.Resolver = Activator.CreateInstance(myResolverType) as PeerResolver;
}
else
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(
SR.GetString(SR.PeerResolverInvalid, this.ResolverType)));
}
}
}
internal void InitializeFrom(PeerCustomResolverSettings settings)
{
if (settings == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("settings");
}
if (settings.Address != null)
{
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.Address, settings.Address.Uri);
this.Identity.InitializeFrom(settings.Address.Identity);
}
if (settings.Resolver != null)
{
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.PeerResolverType, settings.Resolver.GetType().AssemblyQualifiedName);
}
if (settings.Binding != null)
{
SetPropertyValueIfNotDefaultValue(ConfigurationStrings.BindingConfiguration, PeerStrings.PeerCustomResolver + Guid.NewGuid().ToString());
string sectionName;
BindingsSection.TryAdd(this.BindingConfiguration,
settings.Binding,
out sectionName);
this.Binding = sectionName;
}
}
}
}
|