File: System\ServiceModel\Discovery\DiscoveryUtility.cs
Project: ndp\cdf\src\NetFx40\System.ServiceModel.Discovery\System.ServiceModel.Discovery.csproj (System.ServiceModel.Discovery)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
 
namespace System.ServiceModel.Discovery
{
    using System.Collections.ObjectModel;
    using System.Runtime;
    using System.ServiceModel.Description;
    using System.ServiceModel.Discovery.Version11;
    using System.ServiceModel.Discovery.VersionApril2005;
    using System.ServiceModel.Discovery.VersionCD1;
 
    class DiscoveryUtility
    {
        public static Collection<EndpointDiscoveryMetadata> ToEndpointDiscoveryMetadataCollection(
            Collection<EndpointDiscoveryMetadataApril2005> endpointDiscoveryMetadataApril2005Collection)
        {
            Collection<EndpointDiscoveryMetadata> endpointDiscoveryMetadataCollection = new Collection<EndpointDiscoveryMetadata>();
            foreach (EndpointDiscoveryMetadataApril2005 endpointDiscoveryMetadataApril2005 in endpointDiscoveryMetadataApril2005Collection)
            {
                endpointDiscoveryMetadataCollection.Add(endpointDiscoveryMetadataApril2005.ToEndpointDiscoveryMetadata());
            }
            return endpointDiscoveryMetadataCollection;
        }
 
        public static Collection<EndpointDiscoveryMetadata> ToEndpointDiscoveryMetadataCollection(
            Collection<EndpointDiscoveryMetadataCD1> endpointDiscoveryMetadataCD1Collection)
        {
            Collection<EndpointDiscoveryMetadata> endpointDiscoveryMetadataCollection = new Collection<EndpointDiscoveryMetadata>();
            foreach (EndpointDiscoveryMetadataCD1 endpointDiscoveryMetadataCD1 in endpointDiscoveryMetadataCD1Collection)
            {
                endpointDiscoveryMetadataCollection.Add(endpointDiscoveryMetadataCD1.ToEndpointDiscoveryMetadata());
            }
            return endpointDiscoveryMetadataCollection;
        }
 
        public static Collection<EndpointDiscoveryMetadata> ToEndpointDiscoveryMetadataCollection(
            Collection<EndpointDiscoveryMetadata11> endpointDiscoveryMetadata11Collection)
        {
            Collection<EndpointDiscoveryMetadata> endpointDiscoveryMetadataCollection = new Collection<EndpointDiscoveryMetadata>();
            foreach (EndpointDiscoveryMetadata11 endpointDiscoveryMetadata11 in endpointDiscoveryMetadata11Collection)
            {
                endpointDiscoveryMetadataCollection.Add(endpointDiscoveryMetadata11.ToEndpointDiscoveryMetadata());
            }
            return endpointDiscoveryMetadataCollection;
        }
 
        public static ContractDescription GetContract(Type contractType)
        {
            Fx.Assert(contractType != null, "The discoveryContractType attribute must not be null.");
 
            ContractDescription discoveryContract = ContractDescription.GetContract(contractType);
            OperationBehaviorAttribute operationBehaviorAttribute;
            foreach (OperationDescription operationDescription in discoveryContract.Operations)
            {
                operationBehaviorAttribute = operationDescription.Behaviors.Find<OperationBehaviorAttribute>();
                if (operationBehaviorAttribute == null)
                {
                    operationBehaviorAttribute = new OperationBehaviorAttribute();
                    operationDescription.Behaviors.Add(operationBehaviorAttribute);
                }
 
                operationBehaviorAttribute.PreferAsyncInvocation = true;
            }
 
            return discoveryContract;
        }
 
        public static DiscoveryMessageSequence ToDiscoveryMessageSequenceOrNull(DiscoveryMessageSequenceApril2005 messageSequence)
        {
            if (messageSequence == null)
            {
                return null;
            }
            else
            {
                return messageSequence.ToDiscoveryMessageSequence();
            }
        }
 
        public static DiscoveryMessageSequence ToDiscoveryMessageSequenceOrNull(DiscoveryMessageSequenceCD1 messageSequence)
        {
            if (messageSequence == null)
            {
                return null;
            }
            else
            {
                return messageSequence.ToDiscoveryMessageSequence();
            }
        }
 
        public static DiscoveryMessageSequence ToDiscoveryMessageSequenceOrNull(DiscoveryMessageSequence11 messageSequence)
        {
            if (messageSequence == null)
            {
                return null;
            }
            else
            {
                return messageSequence.ToDiscoveryMessageSequence();
            }
        }
 
        public static bool IsCompatible(OperationContext context, IContextChannel channel)
        {
            return ((context != null) && 
                (context.InternalServiceChannel != null) && 
                (object.ReferenceEquals(context.InternalServiceChannel.Proxy, channel)));
        }
    }
}