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
- PackageDigitalSignatureManager.cs
- Normalization.cs
- NativeMethods.cs
- MemberJoinTreeNode.cs
- Registry.cs
- _Events.cs
- XXXInfos.cs
- DrawingVisualDrawingContext.cs
- DataGridViewColumnConverter.cs
- VisualTreeUtils.cs
- Coordinator.cs
- DataSourceHelper.cs
- MultiSelector.cs
- MethodBody.cs
- Line.cs
- ConstNode.cs
- FixedNode.cs
- CommandEventArgs.cs
- DecryptedHeader.cs
- SequenceDesigner.cs
- recordstatefactory.cs
- XPathScanner.cs
- TypeCodeDomSerializer.cs
- StorageTypeMapping.cs
- sqlcontext.cs
- RequestQueryProcessor.cs
- PenThreadPool.cs
- ApplyImportsAction.cs
- LockCookie.cs
- FontConverter.cs
- UIHelper.cs
- Membership.cs
- ReturnEventArgs.cs
- SystemIcmpV4Statistics.cs
- CheckBoxList.cs
- OleDbDataReader.cs
- WebPartExportVerb.cs
- ManagementPath.cs
- LedgerEntry.cs
- Processor.cs
- FixUp.cs
- SerializerWriterEventHandlers.cs
- DataServiceQueryException.cs
- Scene3D.cs
- safemediahandle.cs
- ParentQuery.cs
- SimpleBitVector32.cs
- Stroke.cs
- GridToolTip.cs
- NamespaceMapping.cs
- HighContrastHelper.cs
- OrderedDictionary.cs
- CacheManager.cs
- GridViewAutoFormat.cs
- MemberInfoSerializationHolder.cs
- JournalNavigationScope.cs
- clipboard.cs
- C14NUtil.cs
- XamlToRtfWriter.cs
- Translator.cs
- QueryStringConverter.cs
- IdentitySection.cs
- DbConnectionInternal.cs
- WebPartPersonalization.cs
- IsolatedStoragePermission.cs
- JavascriptXmlWriterWrapper.cs
- CodeValidator.cs
- CategoryAttribute.cs
- EnvironmentPermission.cs
- DataTableClearEvent.cs
- ThreadExceptionDialog.cs
- AffineTransform3D.cs
- ProtocolsSection.cs
- TypeElementCollection.cs
- EventLogPermissionAttribute.cs
- SmiConnection.cs
- ZipIOExtraFieldZip64Element.cs
- GridViewDeletedEventArgs.cs
- AsyncOperationManager.cs
- DataTableExtensions.cs
- NetTcpSecurity.cs
- EntityClientCacheEntry.cs
- QilLoop.cs
- ConfigurationElement.cs
- ColorConverter.cs
- _LocalDataStore.cs
- AutomationIdentifier.cs
- HybridDictionary.cs
- XmlWhitespace.cs
- ParameterEditorUserControl.cs
- DataGridViewCheckBoxColumn.cs
- ExtractorMetadata.cs
- ArithmeticException.cs
- HtmlTernaryTree.cs
- DataSourceXmlClassAttribute.cs
- WindowsListView.cs
- HttpModuleAction.cs
- EncoderBestFitFallback.cs
- ShortcutKeysEditor.cs
- StorageEntitySetMapping.cs