119 lines
4.9 KiB
C#
119 lines
4.9 KiB
C#
|
//------------------------------------------------------------------------------
|
||
|
// 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;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|