e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
106 lines
3.9 KiB
C#
106 lines
3.9 KiB
C#
//----------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//----------------------------------------------------------------
|
|
|
|
namespace System.ServiceModel.Discovery.Configuration
|
|
{
|
|
using System.Configuration;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.Runtime;
|
|
using System.ServiceModel.Configuration;
|
|
using System.ServiceModel.Description;
|
|
using SR2 = System.ServiceModel.Discovery.SR;
|
|
|
|
public sealed class ServiceDiscoveryElement : BehaviorExtensionElement
|
|
{
|
|
ConfigurationPropertyCollection properties;
|
|
|
|
public ServiceDiscoveryElement()
|
|
{
|
|
}
|
|
|
|
[ConfigurationProperty(ConfigurationStrings.AnnouncementEndpoints)]
|
|
public AnnouncementChannelEndpointElementCollection AnnouncementEndpoints
|
|
{
|
|
get
|
|
{
|
|
return (AnnouncementChannelEndpointElementCollection)base[ConfigurationStrings.AnnouncementEndpoints];
|
|
}
|
|
}
|
|
|
|
[SuppressMessage(FxCop.Category.Configuration, FxCop.Rule.ConfigurationPropertyAttributeRule,
|
|
Justification = "This property is defined by the base class to determine the type of the behavior.")]
|
|
public override Type BehaviorType
|
|
{
|
|
get
|
|
{
|
|
return typeof(ServiceDiscoveryBehavior);
|
|
}
|
|
}
|
|
|
|
protected override ConfigurationPropertyCollection Properties
|
|
{
|
|
get
|
|
{
|
|
if (this.properties == null)
|
|
{
|
|
ConfigurationPropertyCollection properties = new ConfigurationPropertyCollection();
|
|
|
|
properties.Add(
|
|
new ConfigurationProperty(
|
|
ConfigurationStrings.AnnouncementEndpoints,
|
|
typeof(AnnouncementChannelEndpointElementCollection),
|
|
null,
|
|
null,
|
|
null,
|
|
ConfigurationPropertyOptions.None));
|
|
|
|
this.properties = properties;
|
|
}
|
|
return this.properties;
|
|
}
|
|
}
|
|
|
|
protected internal override object CreateBehavior()
|
|
{
|
|
ServiceDiscoveryBehavior serviceDiscoveryBehavior = new ServiceDiscoveryBehavior();
|
|
|
|
AnnouncementEndpoint announcementEndpoint;
|
|
foreach (ChannelEndpointElement channelEndpointElement in this.AnnouncementEndpoints)
|
|
{
|
|
if (string.IsNullOrEmpty(channelEndpointElement.Kind))
|
|
{
|
|
throw FxTrace.Exception.AsError(
|
|
new ConfigurationErrorsException(
|
|
SR2.DiscoveryConfigAnnouncementEndpointMissingKind(
|
|
typeof(AnnouncementEndpoint).FullName)));
|
|
}
|
|
|
|
ServiceEndpoint serviceEndpoint = ConfigLoader.LookupEndpoint(channelEndpointElement, null);
|
|
if (serviceEndpoint == null)
|
|
{
|
|
throw FxTrace.Exception.AsError(
|
|
new ConfigurationErrorsException(
|
|
SR2.DiscoveryConfigInvalidEndpointConfiguration(
|
|
channelEndpointElement.Kind)));
|
|
}
|
|
|
|
announcementEndpoint = serviceEndpoint as AnnouncementEndpoint;
|
|
if (announcementEndpoint == null)
|
|
{
|
|
throw FxTrace.Exception.AsError(
|
|
new InvalidOperationException(
|
|
SR2.DiscoveryConfigInvalidAnnouncementEndpoint(
|
|
channelEndpointElement.Kind,
|
|
serviceEndpoint.GetType().FullName,
|
|
typeof(AnnouncementEndpoint).FullName)));
|
|
}
|
|
|
|
serviceDiscoveryBehavior.AnnouncementEndpoints.Add(announcementEndpoint);
|
|
}
|
|
|
|
return serviceDiscoveryBehavior;
|
|
}
|
|
}
|
|
}
|