Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / DuplexChannelFactory.cs / 1 / DuplexChannelFactory.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel { using System.Collections.Generic; using System.ServiceModel.Description; using System.ServiceModel.Dispatcher; using System.ServiceModel.Channels; using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Runtime.Serialization; using System.Text; using System.Threading; using System.ServiceModel.Diagnostics; using System.ServiceModel.Configuration; public class DuplexChannelFactory: ChannelFactory { //Type overloads public DuplexChannelFactory(Type callbackInstanceType) : this((object)callbackInstanceType) { } public DuplexChannelFactory(Type callbackInstanceType, Binding binding, String remoteAddress) : this((object)callbackInstanceType, binding, new EndpointAddress(remoteAddress)) { } public DuplexChannelFactory(Type callbackInstanceType, Binding binding, EndpointAddress remoteAddress) : this((object)callbackInstanceType, binding, remoteAddress) { } public DuplexChannelFactory(Type callbackInstanceType, Binding binding) : this((object)callbackInstanceType, binding) { } public DuplexChannelFactory(Type callbackInstanceType, string endpointConfigurationName, EndpointAddress remoteAddress) : this((object)callbackInstanceType, endpointConfigurationName, remoteAddress) { } public DuplexChannelFactory(Type callbackInstanceType, string endpointConfigurationName) : this((object)callbackInstanceType, endpointConfigurationName) { } public DuplexChannelFactory(Type callbackInstanceType, ServiceEndpoint endpoint) : this((object)callbackInstanceType, endpoint) { } //InstanceContext overloads public DuplexChannelFactory(InstanceContext callbackInstance) : this((object)callbackInstance) { } public DuplexChannelFactory(InstanceContext callbackInstance, Binding binding, String remoteAddress) : this((object)callbackInstance, binding, new EndpointAddress(remoteAddress)) { } public DuplexChannelFactory(InstanceContext callbackInstance, Binding binding, EndpointAddress remoteAddress) : this((object)callbackInstance, binding, remoteAddress) { } public DuplexChannelFactory(InstanceContext callbackInstance, Binding binding) : this((object)callbackInstance, binding) { } public DuplexChannelFactory(InstanceContext callbackInstance, string endpointConfigurationName, EndpointAddress remoteAddress) : this((object)callbackInstance, endpointConfigurationName, remoteAddress) { } public DuplexChannelFactory(InstanceContext callbackInstance, string endpointConfigurationName) : this((object)callbackInstance, endpointConfigurationName) { } public DuplexChannelFactory(InstanceContext callbackInstance, ServiceEndpoint endpoint) : this((object)callbackInstance, endpoint) { } // TChannel provides ContractDescription public DuplexChannelFactory(object callbackObject) : base(typeof(TChannel)) { using (ServiceModelActivity activity = DiagnosticUtility.ShouldUseActivity ? ServiceModelActivity.CreateBoundedActivity() : null) { if (DiagnosticUtility.ShouldUseActivity) { ServiceModelActivity.Start(activity, SR.GetString(SR.ActivityConstructChannelFactory, DiagnosticTrace.CreateSourceString(this)), ActivityType.Construct); } if (callbackObject == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("callbackObject"); } this.CheckAndAssignCallbackInstance(callbackObject); this.InitializeEndpoint((string)null, (EndpointAddress)null); } } // TChannel provides ContractDescription, attr/config [TChannel,name] provides Address,Binding public DuplexChannelFactory(object callbackObject, string endpointConfigurationName) : this(callbackObject, endpointConfigurationName, null) { } // TChannel provides ContractDescription, attr/config [TChannel,name] provides Binding, provide Address explicitly public DuplexChannelFactory(object callbackObject, string endpointConfigurationName, EndpointAddress remoteAddress) : base(typeof(TChannel)) { using (ServiceModelActivity activity = DiagnosticUtility.ShouldUseActivity ? ServiceModelActivity.CreateBoundedActivity() : null) { if (DiagnosticUtility.ShouldUseActivity) { ServiceModelActivity.Start(activity, SR.GetString(SR.ActivityConstructChannelFactory, DiagnosticTrace.CreateSourceString(this)), ActivityType.Construct); } if (callbackObject == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("callbackObject"); } if (endpointConfigurationName == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpointConfigurationName"); } this.CheckAndAssignCallbackInstance(callbackObject); this.InitializeEndpoint(endpointConfigurationName, remoteAddress); } } // TChannel provides ContractDescription, attr/config [TChannel,name] provides Address,Binding public DuplexChannelFactory(object callbackObject, Binding binding) : this(callbackObject, binding, (EndpointAddress)null) { } // TChannel provides ContractDescription, provide Address,Binding explicitly public DuplexChannelFactory(object callbackObject, Binding binding, String remoteAddress) : this(callbackObject, binding, new EndpointAddress(remoteAddress)) { } // TChannel provides ContractDescription, provide Address,Binding explicitly public DuplexChannelFactory(object callbackObject, Binding binding, EndpointAddress remoteAddress) : base(typeof(TChannel)) { using (ServiceModelActivity activity = DiagnosticUtility.ShouldUseActivity ? ServiceModelActivity.CreateBoundedActivity() : null) { if (DiagnosticUtility.ShouldUseActivity) { ServiceModelActivity.Start(activity, SR.GetString(SR.ActivityConstructChannelFactory, DiagnosticTrace.CreateSourceString(this)), ActivityType.Construct); } if (callbackObject == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("callbackObject"); } if (binding == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("binding"); } this.CheckAndAssignCallbackInstance(callbackObject); this.InitializeEndpoint(binding, remoteAddress); } } // provide ContractDescription,Address,Binding explicitly public DuplexChannelFactory(object callbackObject, ServiceEndpoint endpoint) : base(typeof(TChannel)) { using (ServiceModelActivity activity = DiagnosticUtility.ShouldUseActivity ? ServiceModelActivity.CreateBoundedActivity() : null) { if (DiagnosticUtility.ShouldUseActivity) { ServiceModelActivity.Start(activity, SR.GetString(SR.ActivityConstructChannelFactory, DiagnosticTrace.CreateSourceString(this)), ActivityType.Construct); } if (callbackObject == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("callbackObject"); } if (endpoint == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpoint"); } this.CheckAndAssignCallbackInstance(callbackObject); this.InitializeEndpoint(endpoint); } } void CheckAndAssignCallbackInstance(object callbackInstance) { if (callbackInstance is Type) { this.CallbackType = (Type)callbackInstance; } else if (callbackInstance is InstanceContext) { this.CallbackInstance = (InstanceContext)callbackInstance; } else { this.CallbackInstance = new InstanceContext(callbackInstance); } } public TChannel CreateChannel(InstanceContext callbackInstance) { return CreateChannel(callbackInstance, CreateEndpointAddress(this.Endpoint), null); } public TChannel CreateChannel(InstanceContext callbackInstance, EndpointAddress address) { if (address == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("address"); } return CreateChannel(callbackInstance, address, address.Uri); } public override TChannel CreateChannel(EndpointAddress address, Uri via) { return CreateChannel(this.CallbackInstance, address, via); } public virtual TChannel CreateChannel(InstanceContext callbackInstance, EndpointAddress address, Uri via) { if (address == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("address"); } if (this.CallbackType != null && callbackInstance == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.SFxCreateDuplexChannelNoCallback1))); } if (callbackInstance == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.SFxCreateDuplexChannelNoCallback))); } if (callbackInstance.UserObject == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.SFxCreateDuplexChannelNoCallbackUserObject))); } if (!this.HasDuplexOperations()) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.SFxCreateDuplexChannel1, this.Endpoint.Contract.Name))); } Type userObjectType = callbackInstance.UserObject.GetType(); Type callbackType = this.Endpoint.Contract.CallbackContractType; if (callbackType != null && !callbackType.IsAssignableFrom(userObjectType)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString( SR.SFxCreateDuplexChannelBadCallbackUserObject, callbackType))); } EnsureOpened(); TChannel result = (TChannel) this.ServiceChannelFactory.CreateChannel(typeof(TChannel), address, via); IDuplexContextChannel duplexChannel = result as IDuplexContextChannel; if (duplexChannel != null) { duplexChannel.CallbackInstance = callbackInstance; } return result; } //Static funtions to create channels static InstanceContext GetInstanceContextForObject(object callbackObject) { if (callbackObject is InstanceContext) { return (InstanceContext)callbackObject; } return new InstanceContext(callbackObject); } public static TChannel CreateChannel(object callbackObject, String endpointConfigurationName) { return CreateChannel(GetInstanceContextForObject(callbackObject), endpointConfigurationName); } public static TChannel CreateChannel(object callbackObject, Binding binding, EndpointAddress endpointAddress) { return CreateChannel(GetInstanceContextForObject(callbackObject), binding, endpointAddress); } public static TChannel CreateChannel(object callbackObject, Binding binding, EndpointAddress endpointAddress, Uri via) { return CreateChannel(GetInstanceContextForObject(callbackObject), binding, endpointAddress, via); } public static TChannel CreateChannel(InstanceContext callbackInstance, String endpointConfigurationName) { DuplexChannelFactory channelFactory = new DuplexChannelFactory (callbackInstance, endpointConfigurationName); TChannel channel = channelFactory.CreateChannel(); SetFactoryToAutoClose(channel); return channel; } public static TChannel CreateChannel(InstanceContext callbackInstance, Binding binding, EndpointAddress endpointAddress) { DuplexChannelFactory channelFactory = new DuplexChannelFactory (callbackInstance, binding, endpointAddress); TChannel channel = channelFactory.CreateChannel(); SetFactoryToAutoClose(channel); return channel; } public static TChannel CreateChannel(InstanceContext callbackInstance, Binding binding, EndpointAddress endpointAddress, Uri via) { DuplexChannelFactory channelFactory = new DuplexChannelFactory (callbackInstance, binding); TChannel channel = channelFactory.CreateChannel(endpointAddress, via); SetFactoryToAutoClose(channel); return channel; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AsymmetricKeyExchangeDeformatter.cs
- IntSecurity.cs
- LogFlushAsyncResult.cs
- EtwTrace.cs
- FunctionMappingTranslator.cs
- columnmapkeybuilder.cs
- RegistrationServices.cs
- BuilderPropertyEntry.cs
- UInt16.cs
- DataSourceControlBuilder.cs
- TraceRecord.cs
- CallSite.cs
- DataServiceException.cs
- ScriptRegistrationManager.cs
- SingleTagSectionHandler.cs
- CodeEntryPointMethod.cs
- WebPartTransformer.cs
- basemetadatamappingvisitor.cs
- CompilerErrorCollection.cs
- mansign.cs
- TextTabProperties.cs
- RequiredAttributeAttribute.cs
- DrawingContextDrawingContextWalker.cs
- ExtractCollection.cs
- ManagedWndProcTracker.cs
- DatatypeImplementation.cs
- InfoCardRSAOAEPKeyExchangeFormatter.cs
- CapacityStreamGeometryContext.cs
- HandlerWithFactory.cs
- HostSecurityManager.cs
- BookmarkNameHelper.cs
- XmlSchemaAttributeGroupRef.cs
- XmlObjectSerializerWriteContext.cs
- MappingSource.cs
- UnsafeNativeMethods.cs
- CheckableControlBaseAdapter.cs
- DataStreams.cs
- Win32Exception.cs
- TypeDelegator.cs
- APCustomTypeDescriptor.cs
- VarRemapper.cs
- RemotingAttributes.cs
- WaitForChangedResult.cs
- EntityDataSourceConfigureObjectContext.cs
- XmlTypeMapping.cs
- DivideByZeroException.cs
- LinqDataSourceHelper.cs
- XmlText.cs
- SmiRecordBuffer.cs
- TypeGeneratedEventArgs.cs
- DataTableCollection.cs
- Deflater.cs
- ThrowHelper.cs
- NativeMethods.cs
- ViewManager.cs
- ResolveMatchesMessageCD1.cs
- CachedTypeface.cs
- LocalizabilityAttribute.cs
- DefaultWorkflowSchedulerService.cs
- Stroke2.cs
- AuthenticateEventArgs.cs
- ClassHandlersStore.cs
- ColorAnimationBase.cs
- StringCollection.cs
- GroupQuery.cs
- _ConnectStream.cs
- CollectionAdapters.cs
- DataGridViewLinkCell.cs
- RelatedCurrencyManager.cs
- XPathBinder.cs
- DataColumnMappingCollection.cs
- TabOrder.cs
- AnchorEditor.cs
- Propagator.Evaluator.cs
- FreezableCollection.cs
- HelpEvent.cs
- ResolveNameEventArgs.cs
- ClientSettingsProvider.cs
- WebAdminConfigurationHelper.cs
- TemplateInstanceAttribute.cs
- FileLevelControlBuilderAttribute.cs
- Pair.cs
- HtmlGenericControl.cs
- ResourceManager.cs
- ResourceProviderFactory.cs
- NumberSubstitution.cs
- SerializationAttributes.cs
- SupportsEventValidationAttribute.cs
- RadioButtonRenderer.cs
- SingleObjectCollection.cs
- Vector3DAnimationUsingKeyFrames.cs
- DocumentPageView.cs
- AnimationClockResource.cs
- PageContent.cs
- smtpconnection.cs
- SignerInfo.cs
- TextMarkerSource.cs
- StorageBasedPackageProperties.cs
- BamlMapTable.cs
- Menu.cs