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
- PageThemeParser.cs
- ChannelManagerService.cs
- TextRangeSerialization.cs
- NumericExpr.cs
- odbcmetadatafactory.cs
- Table.cs
- SoapAttributeAttribute.cs
- WorkflowDurableInstance.cs
- PointConverter.cs
- SqlTypeSystemProvider.cs
- XhtmlTextWriter.cs
- SmiContext.cs
- SpotLight.cs
- GlyphRunDrawing.cs
- RightsManagementEncryptedStream.cs
- ReplyAdapterChannelListener.cs
- TextElementCollectionHelper.cs
- CompressEmulationStream.cs
- RenderOptions.cs
- FamilyCollection.cs
- HttpModuleAction.cs
- DivideByZeroException.cs
- EffectiveValueEntry.cs
- ExpressionEvaluator.cs
- MatchingStyle.cs
- ColorKeyFrameCollection.cs
- DESCryptoServiceProvider.cs
- DynamicRouteExpression.cs
- MatrixUtil.cs
- CheckedPointers.cs
- WSDualHttpBinding.cs
- TableRowsCollectionEditor.cs
- SmtpMail.cs
- DocumentXPathNavigator.cs
- ZipIOExtraFieldElement.cs
- Model3D.cs
- InvalidAsynchronousStateException.cs
- OdbcPermission.cs
- SqlCacheDependency.cs
- ResponseBodyWriter.cs
- AppSecurityManager.cs
- InvocationExpression.cs
- NodeInfo.cs
- DiscoveryClientElement.cs
- PageEventArgs.cs
- SqlServer2KCompatibilityAnnotation.cs
- TextContainerChangeEventArgs.cs
- SemanticAnalyzer.cs
- DataGridColumn.cs
- AsymmetricAlgorithm.cs
- ListControl.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- ProtocolElementCollection.cs
- ObjectCloneHelper.cs
- ListBoxChrome.cs
- RightsManagementPermission.cs
- ProfileModule.cs
- WindowsFormsLinkLabel.cs
- DataViewListener.cs
- StubHelpers.cs
- WhitespaceSignificantCollectionAttribute.cs
- BitmapEffectInputData.cs
- StorageScalarPropertyMapping.cs
- TextBoxAutoCompleteSourceConverter.cs
- Operand.cs
- ToolbarAUtomationPeer.cs
- ExpressionVisitor.cs
- ExceptionHandlers.cs
- DoubleStorage.cs
- XmlSchemaChoice.cs
- ThreadAttributes.cs
- _FtpControlStream.cs
- RightsController.cs
- BitConverter.cs
- PropertiesTab.cs
- PolyQuadraticBezierSegment.cs
- PropertySegmentSerializationProvider.cs
- Pens.cs
- HtmlSelect.cs
- SortQuery.cs
- MenuItemStyle.cs
- WindowsPen.cs
- SecureEnvironment.cs
- RenderDataDrawingContext.cs
- FacetChecker.cs
- UrlPropertyAttribute.cs
- KnownBoxes.cs
- StaticSiteMapProvider.cs
- WindowsFormsHelpers.cs
- ParallelLoopState.cs
- NaturalLanguageHyphenator.cs
- SqlUDTStorage.cs
- Attributes.cs
- IndicShape.cs
- ClientApiGenerator.cs
- TraceListeners.cs
- QueryAccessibilityHelpEvent.cs
- EditingScope.cs
- brushes.cs
- CanonicalFormWriter.cs