Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / PeerChannelFactory.cs / 1 / PeerChannelFactory.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Net; using System.Diagnostics; using System.ServiceModel; using System.Runtime.Serialization; using System.Xml; interface IPeerFactory : ITransportFactorySettings { IPAddress ListenIPAddress { get; } int Port { get; } XmlDictionaryReaderQuotas ReaderQuotas{get;} PeerResolver Resolver { get; } PeerSecurityManager SecurityManager { get; } PeerNodeImplementation PrivatePeerNode { get; set; } long MaxBufferPoolSize{ get; } } sealed class PeerChannelFactory: TransportChannelFactory , IPeerFactory { // settings passed to PeerNode IPAddress listenIPAddress; int port; PeerResolver resolver; PeerSecurityManager securityManager; XmlDictionaryReaderQuotas readerQuotas; ISecurityCapabilities securityCapabilities; // use a private mesh (PeerNode) rather than creating/retrieving one from the registry. // used as a test hook to allow multiple PeerNode instances per app domain PeerNodeImplementation privatePeerNode; internal PeerChannelFactory(PeerTransportBindingElement bindingElement, BindingContext context, PeerResolver peerResolver) : base(bindingElement, context) { this.listenIPAddress = bindingElement.ListenIPAddress; this.port = bindingElement.Port; this.resolver = peerResolver; readerQuotas = new XmlDictionaryReaderQuotas(); BinaryMessageEncodingBindingElement encoder = context.Binding.Elements.Find (); if(encoder != null) encoder.ReaderQuotas.CopyTo(this.readerQuotas); else EncoderDefaults.ReaderQuotas.CopyTo(this.readerQuotas); this.securityManager = PeerSecurityManager.Create(bindingElement.Security, context, this.readerQuotas); this.securityCapabilities = bindingElement.GetProperty (context); } public IPAddress ListenIPAddress { get { return listenIPAddress; } } public int Port { get { return port; } } public XmlDictionaryReaderQuotas ReaderQuotas { get { return this.readerQuotas; } } public PeerResolver Resolver { get { return resolver; } } public override string Scheme { get { return PeerStrings.Scheme; } } public PeerNodeImplementation PrivatePeerNode { get { return privatePeerNode; } set { privatePeerNode = value; } } public PeerSecurityManager SecurityManager { get { return this.securityManager; } set { this.securityManager = value; } } public override T GetProperty () { if(typeof(T) == typeof(PeerChannelFactory )) { return (T) (object) this; } else if(typeof(T) == typeof(IPeerFactory)) { return (T) (object) this; } else if(typeof(T) == typeof(PeerNodeImplementation)) { return (T) (object) privatePeerNode; } else if (typeof(T) == typeof(ISecurityCapabilities)) { return (T)(object)this.securityCapabilities; } return base.GetProperty (); } protected override void OnOpen(TimeSpan timeout) { } protected override IAsyncResult OnBeginOpen(TimeSpan timeout, AsyncCallback callback, object state) { return new CompletedAsyncResult(callback, state); } protected override void OnEndOpen(IAsyncResult result) { CompletedAsyncResult.End(result); } protected override TChannel OnCreateChannel(EndpointAddress to, Uri via) { base.ValidateScheme(via); PeerNodeImplementation peerNode = null; PeerNodeImplementation.Registration registration = null; // use the private PeerNode if it has been configured and matches the channel // otherwise have the channel look for one or create a new one if (privatePeerNode != null && via.Host == privatePeerNode.MeshId) { peerNode = privatePeerNode; } else { registration = new PeerNodeImplementation.Registration(via, this); } if (typeof(TChannel) == typeof(IOutputChannel)) { return (TChannel)(object)new PeerOutputChannel(peerNode, registration, this, to, via, this.MessageVersion); } // typeof(TChannel) == typeof(IDuplexChannel) // 'to' is both the remote address and the local address PeerDuplexChannel duplexChannel = new PeerDuplexChannel(peerNode, registration, this, to, via); PeerMessageDispatcher .PeerMessageQueueAdapter queueHandler = new PeerMessageDispatcher .PeerMessageQueueAdapter(duplexChannel); PeerMessageDispatcher dispatcher = new PeerMessageDispatcher (queueHandler, duplexChannel.InnerNode, this, to, via); duplexChannel.Dispatcher = dispatcher; return (TChannel)(object)duplexChannel; } } } // 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
- TimelineCollection.cs
- Int32CAMarshaler.cs
- ZipArchive.cs
- Util.cs
- StylusPointCollection.cs
- XPathDocument.cs
- RegexGroupCollection.cs
- SelectionEditor.cs
- RoleManagerModule.cs
- PnrpPermission.cs
- BuildProvider.cs
- PolyLineSegmentFigureLogic.cs
- SafeSecurityHelper.cs
- SafeNativeMethodsOther.cs
- XmlNamespaceManager.cs
- SiteMapNodeCollection.cs
- XhtmlBasicObjectListAdapter.cs
- DelayedRegex.cs
- RuntimeComponentFilter.cs
- TypefaceMap.cs
- InvariantComparer.cs
- StagingAreaInputItem.cs
- DoubleLinkList.cs
- RSAPKCS1SignatureDeformatter.cs
- WebBaseEventKeyComparer.cs
- ModelFunction.cs
- MultiplexingFormatMapping.cs
- PrintPreviewDialog.cs
- TypographyProperties.cs
- OpenTypeCommon.cs
- WinCategoryAttribute.cs
- TreeNodeClickEventArgs.cs
- AttributeAction.cs
- MasterPage.cs
- DesignUtil.cs
- BindingMAnagerBase.cs
- ReadOnlyState.cs
- RestHandler.cs
- RecommendedAsConfigurableAttribute.cs
- BaseValidator.cs
- ScrollProviderWrapper.cs
- CompatibleIComparer.cs
- WebPartManagerInternals.cs
- CancellationState.cs
- AdornerDecorator.cs
- HttpValueCollection.cs
- SerializationHelper.cs
- FormViewCommandEventArgs.cs
- SecurityBindingElementImporter.cs
- Trace.cs
- ParserHooks.cs
- TreeNodeStyleCollection.cs
- ScalarType.cs
- Ray3DHitTestResult.cs
- WebChannelFactory.cs
- BindingMAnagerBase.cs
- OdbcParameter.cs
- LongValidator.cs
- EventProperty.cs
- Input.cs
- SqlStream.cs
- _LoggingObject.cs
- TextEffect.cs
- CodeCatchClause.cs
- UnknownWrapper.cs
- QilStrConcat.cs
- HopperCache.cs
- BatchWriter.cs
- OleDbTransaction.cs
- StringComparer.cs
- CodeDomDesignerLoader.cs
- Point3DAnimation.cs
- EventListenerClientSide.cs
- LongValidator.cs
- DisplayInformation.cs
- SEHException.cs
- GlyphInfoList.cs
- NeutralResourcesLanguageAttribute.cs
- SuppressIldasmAttribute.cs
- templategroup.cs
- XhtmlBasicPageAdapter.cs
- TextParagraph.cs
- SmtpTransport.cs
- XmlNamespaceDeclarationsAttribute.cs
- PropertyGrid.cs
- SchemaImporterExtensionsSection.cs
- XsdBuilder.cs
- OdbcParameter.cs
- SiteMap.cs
- HttpWebRequestElement.cs
- AddressAlreadyInUseException.cs
- HttpResponseHeader.cs
- DataGridViewCheckBoxColumn.cs
- WebPartDisplayModeCollection.cs
- TextServicesProperty.cs
- ApplicationId.cs
- TileBrush.cs
- SizeConverter.cs
- FieldToken.cs
- NamedPermissionSet.cs