Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / NetPeerTcpBinding.cs / 1 / NetPeerTcpBinding.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel { using System; using System.Diagnostics; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Configuration; using System.Globalization; using System.Net.Security; using System.ServiceModel.Configuration; using System.ServiceModel.Channels; using System.ServiceModel.PeerResolvers; using System.Xml; using System.Net; public class NetPeerTcpBinding : Binding, IBindingRuntimePreferences { // private BindingElements PeerTransportBindingElement transport; PeerResolverSettings resolverSettings; BinaryMessageEncodingBindingElement encoding; PeerSecuritySettings peerSecurity; public NetPeerTcpBinding() { Initialize(); } public NetPeerTcpBinding(string configurationName) : this() { ApplyConfiguration(configurationName); } static public bool IsPnrpAvailable { get { return PnrpPeerResolver.IsPnrpAvailable; } } public long MaxBufferPoolSize { get { return transport.MaxBufferPoolSize; } set { transport.MaxBufferPoolSize = value; } } public long MaxReceivedMessageSize { get { return transport.MaxReceivedMessageSize; } set { transport.MaxReceivedMessageSize = value; } } public IPAddress ListenIPAddress { get { return transport.ListenIPAddress; } set { transport.ListenIPAddress = value; } } public PeerSecuritySettings Security { get { return peerSecurity; } internal set { this.peerSecurity = value; } } public int Port { get { return transport.Port; } set { transport.Port = value; } } public XmlDictionaryReaderQuotas ReaderQuotas { get { return encoding.ReaderQuotas; } set { if (value == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value"); value.CopyTo(encoding.ReaderQuotas); } } public PeerResolverSettings Resolver { get { return this.resolverSettings; } } bool IBindingRuntimePreferences.ReceiveSynchronously { get { return false; } } public override string Scheme { get { return transport.Scheme; } } // Soap version supported by this binding public EnvelopeVersion EnvelopeVersion { get { return EnvelopeVersion.Soap12; } } void Initialize() { this.resolverSettings = new PeerResolverSettings(); transport = new PeerTransportBindingElement(); encoding = new BinaryMessageEncodingBindingElement(); peerSecurity = new PeerSecuritySettings(); } void InitializeFrom(PeerTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding) { DiagnosticUtility.DebugAssert(transport != null, "Invalid null transport."); DiagnosticUtility.DebugAssert(encoding != null, "Invalid null encoding."); this.MaxBufferPoolSize = transport.MaxBufferPoolSize; this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize; this.ListenIPAddress = transport.ListenIPAddress; this.Port = transport.Port; this.Security.Mode = transport.Security.Mode; this.ReaderQuotas = encoding.ReaderQuotas; } // check that properties of the HttpTransportBindingElement and // MessageEncodingBindingElement not exposed as properties on BasicHttpBinding // match default values of the binding elements bool IsBindingElementsMatch(PeerTransportBindingElement transport, BinaryMessageEncodingBindingElement encoding) { if (!this.transport.IsMatch(transport)) return false; if (!this.encoding.IsMatch(encoding)) return false; return true; } void ApplyConfiguration(string configurationName) { NetPeerTcpBindingCollectionElement section = NetPeerTcpBindingCollectionElement.GetBindingCollectionElement(); NetPeerTcpBindingElement element = section.Bindings[configurationName]; this.resolverSettings = new PeerResolverSettings(); if (element == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException( SR.GetString(SR.ConfigInvalidBindingConfigurationName, configurationName, ConfigurationStrings.NetPeerTcpBindingCollectionElementName))); } else { element.ApplyConfiguration(this); } this.transport.CreateDefaultResolver(this.Resolver); } public override BindingElementCollection CreateBindingElements() { BindingElementCollection bindingElements = new BindingElementCollection(); switch(this.Resolver.Mode) { case PeerResolverMode.Auto: { if(CanUseCustomResolver()) bindingElements.Add(new PeerCustomResolverBindingElement(this.Resolver.Custom)); else if(PeerTransportDefaults.ResolverAvailable) bindingElements.Add(new PnrpPeerResolverBindingElement(this.Resolver.ReferralPolicy)); else throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.PeerResolverRequired))); } break; case PeerResolverMode.Custom: { if(CanUseCustomResolver()) bindingElements.Add(new PeerCustomResolverBindingElement(this.Resolver.Custom)); else throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.PeerResolverSettingsInvalid))); } break; case PeerResolverMode.Pnrp: { if(PeerTransportDefaults.ResolverAvailable) bindingElements.Add(new PnrpPeerResolverBindingElement(this.Resolver.ReferralPolicy)); else throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.PeerResolverRequired))); } break; default: throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.PeerResolverRequired))); } bindingElements.Add(encoding); bindingElements.Add(transport); transport.Security.Mode = this.Security.Mode; transport.Security.Transport.CredentialType = this.Security.Transport.CredentialType; return bindingElements.Clone(); } internal static bool TryCreate(BindingElementCollection elements, out Binding binding) { binding = null; if (elements.Count != 3) return false; PeerResolverBindingElement resolver = null; PeerTransportBindingElement transport = null; BinaryMessageEncodingBindingElement encoding = null; foreach (BindingElement element in elements) { if (element is TransportBindingElement) transport = element as PeerTransportBindingElement; else if (element is BinaryMessageEncodingBindingElement) encoding = element as BinaryMessageEncodingBindingElement; else if (element is PeerResolverBindingElement) resolver = element as PeerResolverBindingElement; else return false; } if (transport == null) return false; if (encoding == null) return false; if (resolver == null) return false; NetPeerTcpBinding netPeerTcpBinding = new NetPeerTcpBinding(); netPeerTcpBinding.InitializeFrom(transport, encoding); if (!netPeerTcpBinding.IsBindingElementsMatch(transport, encoding)) return false; PeerCustomResolverBindingElement customResolver = resolver as PeerCustomResolverBindingElement; if (customResolver != null) { netPeerTcpBinding.Resolver.Custom.Address = customResolver.Address; netPeerTcpBinding.Resolver.Custom.Binding = customResolver.Binding; netPeerTcpBinding.Resolver.Custom.Resolver = customResolver.CreatePeerResolver(); } else if(resolver is PnrpPeerResolverBindingElement) { if(NetPeerTcpBinding.IsPnrpAvailable) netPeerTcpBinding.Resolver.Mode = PeerResolverMode.Pnrp; } binding = netPeerTcpBinding; return true; } bool CanUseCustomResolver() { return (this.Resolver.Custom.Resolver != null || (this.Resolver.Custom.IsBindingSpecified && this.Resolver.Custom.Address != null)); } } } // 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
- SoapFault.cs
- ExpressionsCollectionEditor.cs
- Models.cs
- SimplePropertyEntry.cs
- HiddenField.cs
- PatternMatcher.cs
- TextStore.cs
- SocketAddress.cs
- MutableAssemblyCacheEntry.cs
- PathNode.cs
- NullToBooleanConverter.cs
- ProfileService.cs
- ShaderRenderModeValidation.cs
- SymmetricCryptoHandle.cs
- EventMappingSettingsCollection.cs
- cookieexception.cs
- TabletDevice.cs
- ItemsPresenter.cs
- DbBuffer.cs
- ValueType.cs
- ByteStorage.cs
- TableLayoutPanelCellPosition.cs
- OutputCacheProfileCollection.cs
- CodeSnippetExpression.cs
- LifetimeServices.cs
- QueryExtender.cs
- TextBoxRenderer.cs
- SimpleTextLine.cs
- PageContent.cs
- ConnectionsZoneDesigner.cs
- ObsoleteAttribute.cs
- RemoteCryptoTokenProvider.cs
- HttpAsyncResult.cs
- FilterInvalidBodyAccessException.cs
- DbProviderSpecificTypePropertyAttribute.cs
- TypeBuilder.cs
- XmlAttribute.cs
- Itemizer.cs
- ColumnResizeUndoUnit.cs
- PackageRelationship.cs
- BrushValueSerializer.cs
- CodeCatchClause.cs
- WebPartDescriptionCollection.cs
- PageTheme.cs
- X509PeerCertificateElement.cs
- HttpCapabilitiesSectionHandler.cs
- DetailsView.cs
- VisualTreeUtils.cs
- RotateTransform.cs
- DataGridRelationshipRow.cs
- FunctionDefinition.cs
- AtlasWeb.Designer.cs
- SendMailErrorEventArgs.cs
- HttpCachePolicy.cs
- AsyncCompletedEventArgs.cs
- ConsoleEntryPoint.cs
- OleDbWrapper.cs
- ProcessHostServerConfig.cs
- SqlClientMetaDataCollectionNames.cs
- FtpWebRequest.cs
- PageAsyncTask.cs
- CompressedStack.cs
- IItemContainerGenerator.cs
- IResourceProvider.cs
- TextChangedEventArgs.cs
- SqlWorkflowInstanceStoreLock.cs
- CurrencyWrapper.cs
- GeometryValueSerializer.cs
- MessageQueuePermission.cs
- CreateParams.cs
- ControlCollection.cs
- Image.cs
- HttpModuleAction.cs
- X509ChainPolicy.cs
- LogFlushAsyncResult.cs
- CalendarDay.cs
- SelectionPattern.cs
- EntityViewGenerationConstants.cs
- RequestBringIntoViewEventArgs.cs
- MemberAccessException.cs
- ProgressBar.cs
- SoapInteropTypes.cs
- JpegBitmapDecoder.cs
- SmiRecordBuffer.cs
- OutputCacheSettingsSection.cs
- LineProperties.cs
- Pair.cs
- InfiniteTimeSpanConverter.cs
- ContractMapping.cs
- PathGeometry.cs
- DataGridViewBand.cs
- Brushes.cs
- CdpEqualityComparer.cs
- CodeIterationStatement.cs
- HwndAppCommandInputProvider.cs
- SqlNotificationRequest.cs
- SiteMapProvider.cs
- MsmqInputChannelListener.cs
- PageContentCollection.cs
- Query.cs