Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / BasicHttpBinding.cs / 1 / BasicHttpBinding.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel { using System; using System.Text; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Configuration; using System.Globalization; using System.Net; using System.Net.Security; using System.Runtime.Serialization; using System.Security.Principal; using System.ServiceModel.Channels; using System.ServiceModel.Configuration; using System.ServiceModel.Security; using System.Xml; using System.ServiceModel.Security.Tokens; public class BasicHttpBinding : Binding, IBindingRuntimePreferences { WSMessageEncoding messageEncoding; // private BindingElements HttpTransportBindingElement httpTransport; HttpsTransportBindingElement httpsTransport; TextMessageEncodingBindingElement textEncoding; MtomMessageEncodingBindingElement mtomEncoding; BasicHttpSecurity security = new BasicHttpSecurity(); public BasicHttpBinding() : this(BasicHttpSecurityMode.None) { } public BasicHttpBinding(string configurationName) : this() { ApplyConfiguration(configurationName); } public BasicHttpBinding(BasicHttpSecurityMode securityMode) : base() { Initialize(); this.security.Mode = securityMode; } BasicHttpBinding(BasicHttpSecurity security) : base() { Initialize(); this.security = security; } public bool AllowCookies { get { return httpTransport.AllowCookies; } set { httpTransport.AllowCookies = value; httpsTransport.AllowCookies = value; } } public bool BypassProxyOnLocal { get { return httpTransport.BypassProxyOnLocal; } set { httpTransport.BypassProxyOnLocal = value; httpsTransport.BypassProxyOnLocal = value; } } public HostNameComparisonMode HostNameComparisonMode { get { return httpTransport.HostNameComparisonMode; } set { httpTransport.HostNameComparisonMode = value; httpsTransport.HostNameComparisonMode = value; } } public int MaxBufferSize { get { return httpTransport.MaxBufferSize; } set { httpTransport.MaxBufferSize = value; httpsTransport.MaxBufferSize = value; mtomEncoding.MaxBufferSize = value; } } public long MaxBufferPoolSize { get { return httpTransport.MaxBufferPoolSize; } set { httpTransport.MaxBufferPoolSize = value; httpsTransport.MaxBufferPoolSize = value; } } public long MaxReceivedMessageSize { get { return httpTransport.MaxReceivedMessageSize; } set { httpTransport.MaxReceivedMessageSize = value; httpsTransport.MaxReceivedMessageSize = value; } } public WSMessageEncoding MessageEncoding { get { return messageEncoding; } set { messageEncoding = value; } } public Uri ProxyAddress { get { return httpTransport.ProxyAddress; } set { httpTransport.ProxyAddress = value; httpsTransport.ProxyAddress = value; } } public XmlDictionaryReaderQuotas ReaderQuotas { get { return textEncoding.ReaderQuotas; } set { if (value == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("value"); value.CopyTo(textEncoding.ReaderQuotas); value.CopyTo(mtomEncoding.ReaderQuotas); } } public override string Scheme { get { return GetTransport().Scheme; } } public BasicHttpSecurity Security { get { return this.security; } } public EnvelopeVersion EnvelopeVersion { get { return EnvelopeVersion.Soap11; } } public System.Text.Encoding TextEncoding { get { return textEncoding.WriteEncoding; } set { textEncoding.WriteEncoding = value; mtomEncoding.WriteEncoding = value; } } public TransferMode TransferMode { get { return httpTransport.TransferMode; } set { httpTransport.TransferMode = value; httpsTransport.TransferMode = value; } } public bool UseDefaultWebProxy { get { return httpTransport.UseDefaultWebProxy; } set { httpTransport.UseDefaultWebProxy = value; httpsTransport.UseDefaultWebProxy = value; } } bool IBindingRuntimePreferences.ReceiveSynchronously { get { return false; } } void Initialize() { httpTransport = new HttpTransportBindingElement(); httpsTransport = new HttpsTransportBindingElement(); messageEncoding = WSMessageEncoding.Text; textEncoding = new TextMessageEncodingBindingElement(); textEncoding.MessageVersion = MessageVersion.Soap11; mtomEncoding = new MtomMessageEncodingBindingElement(); mtomEncoding.MessageVersion = MessageVersion.Soap11; } // check that properties of the HttpTransportBindingElement and // MessageEncodingBindingElement not exposed as properties on BasicHttpBinding // match default values of the binding elements bool IsBindingElementsMatch(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding) { if (this.MessageEncoding == WSMessageEncoding.Text) { if (!this.textEncoding.IsMatch(encoding)) return false; } else if (this.MessageEncoding == WSMessageEncoding.Mtom) { if (!this.mtomEncoding.IsMatch(encoding)) return false; } if (!this.GetTransport().IsMatch(transport)) return false; return true; } void InitializeFrom(HttpTransportBindingElement transport, MessageEncodingBindingElement encoding) { this.BypassProxyOnLocal = transport.BypassProxyOnLocal; this.HostNameComparisonMode = transport.HostNameComparisonMode; this.MaxBufferPoolSize = transport.MaxBufferPoolSize; this.MaxBufferSize = transport.MaxBufferSize; this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize; this.ProxyAddress = transport.ProxyAddress; this.TransferMode = transport.TransferMode; this.UseDefaultWebProxy = transport.UseDefaultWebProxy; // BasicHttpBinding only supports Text and Mtom encoding if (encoding is TextMessageEncodingBindingElement) { this.MessageEncoding = WSMessageEncoding.Text; TextMessageEncodingBindingElement text = (TextMessageEncodingBindingElement)encoding; this.TextEncoding = text.WriteEncoding; this.ReaderQuotas = text.ReaderQuotas; } else if (encoding is MtomMessageEncodingBindingElement) { messageEncoding = WSMessageEncoding.Mtom; MtomMessageEncodingBindingElement mtom = (MtomMessageEncodingBindingElement)encoding; this.TextEncoding = mtom.WriteEncoding; this.ReaderQuotas = mtom.ReaderQuotas; } } void ApplyConfiguration(string configurationName) { BasicHttpBindingCollectionElement section = BasicHttpBindingCollectionElement.GetBindingCollectionElement(); BasicHttpBindingElement element = section.Bindings[configurationName]; if (element == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException( SR.GetString(SR.ConfigInvalidBindingConfigurationName, configurationName, ConfigurationStrings.BasicHttpBindingCollectionElementName))); } else { element.ApplyConfiguration(this); } } public override BindingElementCollection CreateBindingElements() { // return collection of BindingElements BindingElementCollection bindingElements = new BindingElementCollection(); // order of BindingElements is important // add security (*optional) SecurityBindingElement wsSecurity = this.CreateMessageSecurity(); if (wsSecurity != null) { bindingElements.Add(wsSecurity); } // add encoding (text or mtom) WSMessageEncodingHelper.SyncUpEncodingBindingElementProperties(textEncoding, mtomEncoding); if (this.MessageEncoding == WSMessageEncoding.Text) bindingElements.Add(textEncoding); else if (this.MessageEncoding == WSMessageEncoding.Mtom) bindingElements.Add(mtomEncoding); // add transport (http or https) bindingElements.Add(GetTransport()); return bindingElements.Clone(); } internal static bool TryCreate(BindingElementCollection elements, out Binding binding) { binding = null; if (elements.Count > 3) return false; SecurityBindingElement securityElement = null; MessageEncodingBindingElement encoding = null; HttpTransportBindingElement transport = null; foreach(BindingElement element in elements) { if (element is SecurityBindingElement) securityElement = element as SecurityBindingElement; else if (element is TransportBindingElement) transport = element as HttpTransportBindingElement; else if (element is MessageEncodingBindingElement) encoding = element as MessageEncodingBindingElement; else return false; } // process transport binding element UnifiedSecurityMode mode; HttpTransportSecurity transportSecurity = new HttpTransportSecurity(); if (!GetSecurityModeFromTransport(transport, transportSecurity, out mode)) return false; if (encoding == null) return false; // BasicHttpBinding only supports Soap11 if (!encoding.CheckEncodingVersion(EnvelopeVersion.Soap11)) return false; BasicHttpSecurity security; if (!TryCreateSecurity(securityElement, mode, transportSecurity, out security)) return false; BasicHttpBinding basicHttpBinding = new BasicHttpBinding(security); basicHttpBinding.InitializeFrom(transport, encoding); // make sure all our defaults match if (!basicHttpBinding.IsBindingElementsMatch(transport, encoding)) return false; binding = basicHttpBinding; return true; } TransportBindingElement GetTransport() { if (security.Mode == BasicHttpSecurityMode.Transport || security.Mode == BasicHttpSecurityMode.TransportWithMessageCredential) { security.EnableTransportSecurity(httpsTransport); return httpsTransport; } else if (security.Mode == BasicHttpSecurityMode.TransportCredentialOnly) { security.EnableTransportAuthentication(httpTransport); return httpTransport; } else { // ensure that there is no transport security security.DisableTransportAuthentication(httpTransport); return httpTransport; } } static bool GetSecurityModeFromTransport(HttpTransportBindingElement http, HttpTransportSecurity transportSecurity, out UnifiedSecurityMode mode) { mode = UnifiedSecurityMode.None; if (http == null) return false; if (http is HttpsTransportBindingElement) { mode = UnifiedSecurityMode.Transport | UnifiedSecurityMode.TransportWithMessageCredential; BasicHttpSecurity.EnableTransportSecurity((HttpsTransportBindingElement)http, transportSecurity); } else if (HttpTransportSecurity.IsDisabledTransportAuthentication(http)) { mode = UnifiedSecurityMode.Message | UnifiedSecurityMode.None; } else if (!BasicHttpSecurity.IsEnabledTransportAuthentication(http, transportSecurity)) { return false; } else { mode = UnifiedSecurityMode.TransportCredentialOnly; } return true; } SecurityBindingElement CreateMessageSecurity() { return security.CreateMessageSecurity(); } static bool TryCreateSecurity(SecurityBindingElement securityElement, UnifiedSecurityMode mode, HttpTransportSecurity transportSecurity, out BasicHttpSecurity security) { return BasicHttpSecurity.TryCreate(securityElement, mode, transportSecurity, out security); } } } // 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
- PackageRelationshipCollection.cs
- ManagementPath.cs
- FontClient.cs
- PartitionResolver.cs
- XmlSchemaInferenceException.cs
- DbConnectionInternal.cs
- KeyboardDevice.cs
- LockRenewalTask.cs
- TransmissionStrategy.cs
- FileInfo.cs
- ISessionStateStore.cs
- ResolveDuplexAsyncResult.cs
- SqlBooleanizer.cs
- TextServicesDisplayAttribute.cs
- ByteFacetDescriptionElement.cs
- BufferedStream.cs
- SqlCharStream.cs
- Storyboard.cs
- AsymmetricAlgorithm.cs
- ClientScriptManager.cs
- SspiHelper.cs
- BitmapCodecInfoInternal.cs
- HtmlTableCellCollection.cs
- ScriptReference.cs
- Win32SafeHandles.cs
- ControlTemplate.cs
- RegistryDataKey.cs
- SmtpCommands.cs
- SafeTimerHandle.cs
- BrowserInteropHelper.cs
- TextSelectionHighlightLayer.cs
- RegexCharClass.cs
- WebPartCloseVerb.cs
- OutputScopeManager.cs
- DocumentSchemaValidator.cs
- DependsOnAttribute.cs
- XmlMapping.cs
- BorderGapMaskConverter.cs
- SQLInt16.cs
- FixedElement.cs
- TypefaceCollection.cs
- ComAdminInterfaces.cs
- DocumentReferenceCollection.cs
- DataListItemEventArgs.cs
- BoundPropertyEntry.cs
- SineEase.cs
- BasicViewGenerator.cs
- TypeFieldSchema.cs
- ObjectRef.cs
- ResourceDescriptionAttribute.cs
- InstalledFontCollection.cs
- Message.cs
- IsolatedStoragePermission.cs
- DataGridTable.cs
- DataBindingCollection.cs
- ErrorFormatter.cs
- NullExtension.cs
- Component.cs
- KoreanLunisolarCalendar.cs
- RoutedEvent.cs
- WindowsUpDown.cs
- BulletedList.cs
- CachedPathData.cs
- ConstructorArgumentAttribute.cs
- HtmlTableCell.cs
- HttpWriter.cs
- MailMessage.cs
- View.cs
- ServicePointManager.cs
- WebControl.cs
- DataRowChangeEvent.cs
- _ChunkParse.cs
- SchemaConstraints.cs
- ComContractElement.cs
- AsyncPostBackTrigger.cs
- InputLanguageCollection.cs
- SystemUnicastIPAddressInformation.cs
- CodeVariableDeclarationStatement.cs
- CanExecuteRoutedEventArgs.cs
- ChannelManagerHelpers.cs
- CodeCommentStatement.cs
- CmsUtils.cs
- StrongNamePublicKeyBlob.cs
- X509Certificate2.cs
- XmlDocument.cs
- TextWriterEngine.cs
- ProgramPublisher.cs
- HwndMouseInputProvider.cs
- XmlAttributeCollection.cs
- MetadataSource.cs
- XmlHelper.cs
- PropertyDescriptorCollection.cs
- Ref.cs
- SqlTriggerContext.cs
- DbModificationClause.cs
- TrackBar.cs
- Privilege.cs
- WebBrowser.cs
- AnnotationMap.cs
- PageVisual.cs