| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- //------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------
- namespace System.ServiceModel
- {
- using System.Runtime;
- using System.ServiceModel.Channels;
- using System.ServiceModel.Description;
- sealed class ConfigurationEndpointTrait<TChannel> : EndpointTrait<TChannel>
- where TChannel : class
- {
- string endpointConfigurationName;
- EndpointAddress remoteAddress;
- InstanceContext callbackInstance;
- public ConfigurationEndpointTrait(string endpointConfigurationName,
- EndpointAddress remoteAddress,
- InstanceContext callbackInstance)
- {
- this.endpointConfigurationName = endpointConfigurationName;
- this.remoteAddress = remoteAddress;
- this.callbackInstance = callbackInstance;
- }
- public override bool Equals(object obj)
- {
- ConfigurationEndpointTrait<TChannel> trait1 = obj as ConfigurationEndpointTrait<TChannel>;
- if (trait1 == null) return false;
- if (!object.ReferenceEquals(this.callbackInstance, trait1.callbackInstance))
- return false;
- if (string.CompareOrdinal(this.endpointConfigurationName, trait1.endpointConfigurationName) != 0)
- {
- return false;
- }
- // EndpointAddress.Equals is used.
- if (this.remoteAddress != trait1.remoteAddress)
- return false;
- return true;
- }
- public override int GetHashCode()
- {
- int hashCode = 0;
- if (this.callbackInstance != null)
- {
- hashCode ^= this.callbackInstance.GetHashCode();
- }
- Fx.Assert(this.endpointConfigurationName != null, "endpointConfigurationName should not be null.");
- hashCode ^= this.endpointConfigurationName.GetHashCode();
- if (this.remoteAddress != null)
- {
- hashCode ^= this.remoteAddress.GetHashCode();
- }
- return hashCode;
- }
- public override ChannelFactory<TChannel> CreateChannelFactory()
- {
- if (this.callbackInstance != null)
- return CreateDuplexFactory();
- return CreateSimplexFactory();
- }
- DuplexChannelFactory<TChannel> CreateDuplexFactory()
- {
- if (this.remoteAddress != null)
- {
- return new DuplexChannelFactory<TChannel>(this.callbackInstance, this.endpointConfigurationName, this.remoteAddress);
- }
- return new DuplexChannelFactory<TChannel>(this.callbackInstance, this.endpointConfigurationName);
- }
- ChannelFactory<TChannel> CreateSimplexFactory()
- {
- if (this.remoteAddress != null)
- {
- return new ChannelFactory<TChannel>(this.endpointConfigurationName, this.remoteAddress);
- }
- return new ChannelFactory<TChannel>(this.endpointConfigurationName);
- }
- }
- }
|