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