1 //----------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //----------------------------------------------------------------
4 
5 namespace System.ServiceModel.Discovery.Configuration
6 {
7     using System.Configuration;
8     using System.Runtime;
9     using System.ServiceModel.Configuration;
10     using System.ServiceModel.Description;
11     using SR2 = System.ServiceModel.Discovery.SR;
12 
13     class ConfigurationDiscoveryEndpointProvider : DiscoveryEndpointProvider
14     {
15         readonly ChannelEndpointElement channelEndpointElement;
16 
ConfigurationDiscoveryEndpointProvider()17         public ConfigurationDiscoveryEndpointProvider()
18         {
19             this.channelEndpointElement = ConfigurationUtility.GetDefaultDiscoveryEndpointElement();
20         }
21 
ConfigurationDiscoveryEndpointProvider(ChannelEndpointElement channelEndpointElement)22         public ConfigurationDiscoveryEndpointProvider(ChannelEndpointElement channelEndpointElement)
23         {
24             Fx.Assert(channelEndpointElement != null, "The channelEndpointElement parameter must be non null.");
25 
26             ConfigurationDiscoveryEndpointProvider.ValidateAndGetDiscoveryEndpoint(channelEndpointElement);
27             this.channelEndpointElement = channelEndpointElement;
28         }
29 
GetDiscoveryEndpoint()30         public override DiscoveryEndpoint GetDiscoveryEndpoint()
31         {
32             return ConfigurationDiscoveryEndpointProvider.ValidateAndGetDiscoveryEndpoint(this.channelEndpointElement);
33         }
34 
ValidateAndGetDiscoveryEndpoint(ChannelEndpointElement channelEndpointElement)35         static DiscoveryEndpoint ValidateAndGetDiscoveryEndpoint(ChannelEndpointElement channelEndpointElement)
36         {
37             if (string.IsNullOrEmpty(channelEndpointElement.Kind))
38             {
39                 throw FxTrace.Exception.AsError(
40                     new ConfigurationErrorsException(
41                     SR2.DiscoveryConfigDiscoveryEndpointMissingKind(
42                     typeof(DiscoveryEndpoint).FullName)));
43             }
44 
45             ServiceEndpoint serviceEndpoint = ConfigLoader.LookupEndpoint(channelEndpointElement, null);
46 
47             if (serviceEndpoint == null)
48             {
49                 throw FxTrace.Exception.AsError(
50                     new ConfigurationErrorsException(
51                     SR2.DiscoveryConfigInvalidEndpointConfiguration(
52                     channelEndpointElement.Kind)));
53             }
54 
55             DiscoveryEndpoint discoveryEndpoint = serviceEndpoint as DiscoveryEndpoint;
56             if (discoveryEndpoint == null)
57             {
58                 throw FxTrace.Exception.AsError(
59                     new InvalidOperationException(
60                         SR2.DiscoveryConfigInvalidDiscoveryEndpoint(
61                         typeof(DiscoveryEndpoint).FullName,
62                         channelEndpointElement.Kind,
63                         serviceEndpoint.GetType().FullName)));
64             }
65 
66             return discoveryEndpoint;
67         }
68     }
69 }
70