|
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------
namespace System.ServiceModel.Discovery.VersionCD1
{
using System.Runtime.Serialization;
using System.ServiceModel.Channels;
using System.Runtime;
using System.ServiceModel.Description;
using System.Globalization;
class DiscoveryVersionCD1Implementation : IDiscoveryVersionImplementation
{
static readonly Uri ScopeMatchByExact = new Uri(ProtocolStrings.VersionCD1.ScopeMatchByExact);
static readonly Uri ScopeMatchByLdap = new Uri(ProtocolStrings.VersionCD1.ScopeMatchByLdap);
static readonly Uri ScopeMatchByPrefix = new Uri(ProtocolStrings.VersionCD1.ScopeMatchByPrefix);
static readonly Uri ScopeMatchByUuid = new Uri(ProtocolStrings.VersionCD1.ScopeMatchByUuid);
static readonly Uri ScopeMatchByNone = new Uri(ProtocolStrings.VersionCD1.ScopeMatchByNone);
Uri discoveryAddress;
DataContractSerializer eprSerializer;
DiscoveryVersion.SchemaQualifiedNames qualifiedNames;
ContractDescription adhocDiscoveryContract;
ContractDescription managedDiscoveryContract;
ContractDescription announcementContract;
[Fx.Tag.SynchronizationObject()]
object contractLock;
public DiscoveryVersionCD1Implementation()
{
this.contractLock = new object();
}
public string WsaNamespace
{
get
{
return ProtocolStrings.WsaNamespaceAugust2004;
}
}
public Uri DiscoveryAddress
{
get
{
if (this.discoveryAddress == null)
{
this.discoveryAddress = new Uri(ProtocolStrings.VersionCD1.AdhocAddress);
}
return this.discoveryAddress;
}
}
public MessageVersion MessageVersion
{
get
{
return MessageVersion.Soap12WSAddressingAugust2004;
}
}
public DiscoveryVersion.SchemaQualifiedNames QualifiedNames
{
get
{
if (this.qualifiedNames == null)
{
this.qualifiedNames = new DiscoveryVersion.SchemaQualifiedNames(ProtocolStrings.VersionCD1.Namespace, this.WsaNamespace);
}
return this.qualifiedNames;
}
}
public DataContractSerializer EprSerializer
{
get
{
if (this.eprSerializer == null)
{
this.eprSerializer = new DataContractSerializer(typeof(EndpointAddressAugust2004));
}
return this.eprSerializer;
}
}
public ContractDescription GetDiscoveryContract(ServiceDiscoveryMode discoveryMode)
{
if (discoveryMode == ServiceDiscoveryMode.Adhoc)
{
if (this.adhocDiscoveryContract == null)
{
lock (this.contractLock)
{
if (this.adhocDiscoveryContract == null)
{
this.adhocDiscoveryContract = DiscoveryUtility.GetContract(typeof(IDiscoveryContractAdhocCD1));
}
}
}
return this.adhocDiscoveryContract;
}
else if (discoveryMode == ServiceDiscoveryMode.Managed)
{
if (this.managedDiscoveryContract == null)
{
lock (this.contractLock)
{
if (this.managedDiscoveryContract == null)
{
this.managedDiscoveryContract = DiscoveryUtility.GetContract(typeof(IDiscoveryContractManagedCD1));
}
}
}
return this.managedDiscoveryContract;
}
else
{
throw FxTrace.Exception.AsError(new ArgumentException(SR.DiscoveryIncorrectMode(discoveryMode)));
}
}
public ContractDescription GetAnnouncementContract()
{
if (this.announcementContract == null)
{
lock (this.contractLock)
{
if (this.announcementContract == null)
{
this.announcementContract = DiscoveryUtility.GetContract(typeof(IAnnouncementContractCD1));
}
}
}
return this.announcementContract;
}
public IDiscoveryInnerClient CreateDiscoveryInnerClient(DiscoveryEndpoint discoveryEndpoint, IDiscoveryInnerClientResponse responseReceiver)
{
if (discoveryEndpoint.DiscoveryMode == ServiceDiscoveryMode.Adhoc)
{
return new DiscoveryInnerClientAdhocCD1(discoveryEndpoint, responseReceiver);
}
else if (discoveryEndpoint.DiscoveryMode == ServiceDiscoveryMode.Managed)
{
return new DiscoveryInnerClientManagedCD1(discoveryEndpoint, responseReceiver);
}
else
{
throw FxTrace.Exception.AsError(new ArgumentException(SR.DiscoveryIncorrectMode(discoveryEndpoint.DiscoveryMode)));
}
}
public IAnnouncementInnerClient CreateAnnouncementInnerClient(AnnouncementEndpoint announcementEndpoint)
{
return new AnnouncementInnerClientCD1(announcementEndpoint);
}
public Uri ToVersionIndependentScopeMatchBy(Uri versionDependentScopeMatchBy)
{
Uri scopeMatchBy = versionDependentScopeMatchBy;
if (versionDependentScopeMatchBy == DiscoveryVersionCD1Implementation.ScopeMatchByExact)
{
scopeMatchBy = FindCriteria.ScopeMatchByExact;
}
else if (versionDependentScopeMatchBy == DiscoveryVersionCD1Implementation.ScopeMatchByPrefix)
{
scopeMatchBy = FindCriteria.ScopeMatchByPrefix;
}
else if (versionDependentScopeMatchBy == DiscoveryVersionCD1Implementation.ScopeMatchByLdap)
{
scopeMatchBy = FindCriteria.ScopeMatchByLdap;
}
else if (versionDependentScopeMatchBy == DiscoveryVersionCD1Implementation.ScopeMatchByUuid)
{
scopeMatchBy = FindCriteria.ScopeMatchByUuid;
}
else if (versionDependentScopeMatchBy == DiscoveryVersionCD1Implementation.ScopeMatchByNone)
{
scopeMatchBy = FindCriteria.ScopeMatchByNone;
}
return scopeMatchBy;
}
public Uri ToVersionDependentScopeMatchBy(Uri versionIndependentScopeMatchBy)
{
Uri scopeMatchBy = versionIndependentScopeMatchBy;
if (versionIndependentScopeMatchBy == FindCriteria.ScopeMatchByExact)
{
scopeMatchBy = DiscoveryVersionCD1Implementation.ScopeMatchByExact;
}
else if (versionIndependentScopeMatchBy == FindCriteria.ScopeMatchByPrefix)
{
scopeMatchBy = DiscoveryVersionCD1Implementation.ScopeMatchByPrefix;
}
else if (versionIndependentScopeMatchBy == FindCriteria.ScopeMatchByLdap)
{
scopeMatchBy = DiscoveryVersionCD1Implementation.ScopeMatchByLdap;
}
else if (versionIndependentScopeMatchBy == FindCriteria.ScopeMatchByUuid)
{
scopeMatchBy = DiscoveryVersionCD1Implementation.ScopeMatchByUuid;
}
else if (versionIndependentScopeMatchBy == FindCriteria.ScopeMatchByNone)
{
scopeMatchBy = DiscoveryVersionCD1Implementation.ScopeMatchByNone;
}
return scopeMatchBy;
}
}
}
|