Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Discovery / System / ServiceModel / Discovery / DiscoveryClientChannelFactory.cs / 1305376 / DiscoveryClientChannelFactory.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.ServiceModel.Discovery { using System; using System.Runtime; using System.ServiceModel; using System.ServiceModel.Channels; class DiscoveryClientChannelFactory: ChannelFactoryBase { DiscoveryEndpointProvider discoveryEndpointProvider; FindCriteria findCriteria; IChannelFactory innerChannelFactory; public DiscoveryClientChannelFactory(IChannelFactory innerChannelFactory, FindCriteria findCriteria, DiscoveryEndpointProvider discoveryEndpointProvider) { Fx.Assert(findCriteria != null, "The findCriteria must be non null."); Fx.Assert(discoveryEndpointProvider != null, "The discoveryEndpointProvider must be non null."); Fx.Assert(innerChannelFactory != null, "The innerChannelFactory must be non null."); this.findCriteria = findCriteria; this.discoveryEndpointProvider = discoveryEndpointProvider; this.innerChannelFactory = innerChannelFactory; } protected override TChannel OnCreateChannel(EndpointAddress address, Uri via) { if (!address.Equals(DiscoveryClientBindingElement.DiscoveryEndpointAddress)) { throw FxTrace.Exception.Argument( "address", Discovery.SR.DiscoveryEndpointAddressIncorrect("address", address.Uri, DiscoveryClientBindingElement.DiscoveryEndpointAddress.Uri)); } if (!via.Equals(DiscoveryClientBindingElement.DiscoveryEndpointAddress.Uri)) { throw FxTrace.Exception.Argument( "via", Discovery.SR.DiscoveryEndpointAddressIncorrect("via", via, DiscoveryClientBindingElement.DiscoveryEndpointAddress.Uri)); } if (typeof(TChannel) == typeof(IOutputChannel)) { return (TChannel)(object)new DiscoveryClientOutputChannel ( this, (IChannelFactory )this.innerChannelFactory, this.findCriteria, this.discoveryEndpointProvider); } else if (typeof(TChannel) == typeof(IRequestChannel)) { return (TChannel)(object)new DiscoveryClientRequestChannel ( this, (IChannelFactory )this.innerChannelFactory, this.findCriteria, this.discoveryEndpointProvider); } else if (typeof(TChannel) == typeof(IDuplexChannel)) { return (TChannel)(object)new DiscoveryClientDuplexChannel ( this, (IChannelFactory )this.innerChannelFactory, this.findCriteria, this.discoveryEndpointProvider); } else if (typeof(TChannel) == typeof(IOutputSessionChannel)) { return (TChannel)(object)new DiscoveryClientOutputSessionChannel( this, (IChannelFactory )this.innerChannelFactory, this.findCriteria, this.discoveryEndpointProvider); } else if (typeof(TChannel) == typeof(IRequestSessionChannel)) { return (TChannel)(object)new DiscoveryClientRequestSessionChannel( this, (IChannelFactory )this.innerChannelFactory, this.findCriteria, this.discoveryEndpointProvider); } else if (typeof(TChannel) == typeof(IDuplexSessionChannel)) { return (TChannel)(object)new DiscoveryClientDuplexSessionChannel( this, (IChannelFactory )this.innerChannelFactory, this.findCriteria, this.discoveryEndpointProvider); } throw FxTrace.Exception.Argument("TChannel", ServiceModel.SR.GetString(ServiceModel.SR.ChannelTypeNotSupported, typeof(TChannel))); } public override T GetProperty () { if (typeof(T) == typeof(IChannelFactory )) { return (T)(object)this; } T baseProperty = base.GetProperty (); if (baseProperty != null) { return baseProperty; } return this.innerChannelFactory.GetProperty (); } protected override IAsyncResult OnBeginOpen(TimeSpan timeout, AsyncCallback callback, object state) { return this.innerChannelFactory.BeginOpen(timeout, callback, state); } protected override void OnEndOpen(IAsyncResult result) { this.innerChannelFactory.EndOpen(result); } protected override void OnOpen(TimeSpan timeout) { this.innerChannelFactory.Open(timeout); } protected override IAsyncResult OnBeginClose(TimeSpan timeout, AsyncCallback callback, object state) { // Must close higher channels before closing lower channels. return new ChainedAsyncResult( timeout, callback, state, base.OnBeginClose, base.OnEndClose, this.innerChannelFactory.BeginClose, this.innerChannelFactory.EndClose); } protected override void OnEndClose(IAsyncResult result) { ChainedAsyncResult.End(result); } protected override void OnClose(TimeSpan timeout) { // Must close higher channels before closing lower channels. TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); base.OnClose(timeoutHelper.RemainingTime()); this.innerChannelFactory.Close(timeoutHelper.RemainingTime()); } protected override void OnAbort() { // Must abort higher channels before aborting lower channels. base.OnAbort(); this.innerChannelFactory.Abort(); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MailWebEventProvider.cs
- ZipIOLocalFileBlock.cs
- CopyAction.cs
- WebPartMenuStyle.cs
- OciEnlistContext.cs
- _FtpControlStream.cs
- LinqDataSourceUpdateEventArgs.cs
- Int32EqualityComparer.cs
- DeferredReference.cs
- CqlLexerHelpers.cs
- ImplicitInputBrush.cs
- ReflectEventDescriptor.cs
- AlignmentYValidation.cs
- HtmlElementErrorEventArgs.cs
- Window.cs
- Point3DValueSerializer.cs
- X509Chain.cs
- Boolean.cs
- ValueCollectionParameterReader.cs
- ServiceHostingEnvironment.cs
- EntityContainerEntitySet.cs
- PseudoWebRequest.cs
- FocusChangedEventArgs.cs
- ValueUtilsSmi.cs
- RadioButtonAutomationPeer.cs
- PinnedBufferMemoryStream.cs
- XmlBindingWorker.cs
- PingOptions.cs
- Accessors.cs
- XmlSerializationWriter.cs
- InputReportEventArgs.cs
- KeyFrames.cs
- SqlGenerator.cs
- RpcResponse.cs
- StylusPointDescription.cs
- Int32KeyFrameCollection.cs
- EnumConverter.cs
- Evidence.cs
- DisplayNameAttribute.cs
- BindingListCollectionView.cs
- RadioButton.cs
- XPathNavigator.cs
- EntityTypeEmitter.cs
- DataGridViewCellLinkedList.cs
- UnaryOperationBinder.cs
- CoTaskMemSafeHandle.cs
- XmlCDATASection.cs
- PackUriHelper.cs
- SafeBitVector32.cs
- Event.cs
- cache.cs
- KeyMatchBuilder.cs
- ClientOperationFormatterProvider.cs
- XXXInfos.cs
- MetadataAssemblyHelper.cs
- IPPacketInformation.cs
- XPathNodeIterator.cs
- InstanceDataCollectionCollection.cs
- WindowsToolbar.cs
- DXD.cs
- MatrixTransform.cs
- InputScope.cs
- RoutingExtension.cs
- SelectionPattern.cs
- ToolStripDropDownItem.cs
- IncrementalCompileAnalyzer.cs
- MultiBindingExpression.cs
- DataTemplateKey.cs
- AnimationTimeline.cs
- XmlSerializerObjectSerializer.cs
- DependencyPropertyAttribute.cs
- TabletCollection.cs
- DataGridViewRowHeaderCell.cs
- MobileCategoryAttribute.cs
- Tag.cs
- DispatcherOperation.cs
- OutputScope.cs
- VideoDrawing.cs
- ListBoxItemAutomationPeer.cs
- UniqueConstraint.cs
- ToolStripSeparatorRenderEventArgs.cs
- TreeNodeCollection.cs
- SamlAuthorityBinding.cs
- X509Certificate.cs
- FormParameter.cs
- AssemblyAttributesGoHere.cs
- ResourceContainerWrapper.cs
- DesignerView.xaml.cs
- Size3D.cs
- VariantWrapper.cs
- ServiceAuthorizationManager.cs
- ProfileEventArgs.cs
- HttpHandlerAction.cs
- FieldInfo.cs
- ObjectAnimationBase.cs
- MiniParameterInfo.cs
- Matrix.cs
- ConstraintEnumerator.cs
- ImageButton.cs
- MarkedHighlightComponent.cs