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
- ThreadExceptionDialog.cs
- UriSectionData.cs
- SqlDataAdapter.cs
- PropertyChangingEventArgs.cs
- SequentialWorkflowRootDesigner.cs
- InvalidCommandTreeException.cs
- AssemblyHelper.cs
- Material.cs
- HtmlToClrEventProxy.cs
- NotImplementedException.cs
- StrokeFIndices.cs
- SimpleExpression.cs
- SessionEndingCancelEventArgs.cs
- HMACSHA256.cs
- OracleRowUpdatedEventArgs.cs
- SpecularMaterial.cs
- RequiredAttributeAttribute.cs
- CodePageUtils.cs
- AsyncOperation.cs
- EntityCollection.cs
- BrushMappingModeValidation.cs
- PtsHelper.cs
- dtdvalidator.cs
- ProcessInputEventArgs.cs
- CompilerLocalReference.cs
- BrowserCapabilitiesFactory35.cs
- GrowingArray.cs
- OrderedEnumerableRowCollection.cs
- LambdaCompiler.Expressions.cs
- RegexCode.cs
- CodeTryCatchFinallyStatement.cs
- XmlSchemaAll.cs
- SpecialNameAttribute.cs
- DBPropSet.cs
- SocketElement.cs
- EntityDataSourceEntitySetNameItem.cs
- ConsumerConnectionPoint.cs
- CodePropertyReferenceExpression.cs
- EntityDataSourceContextCreatingEventArgs.cs
- XmlSchemaSimpleContentExtension.cs
- AssemblyResourceLoader.cs
- Mappings.cs
- TextContainerHelper.cs
- ControlEvent.cs
- TextBoxBase.cs
- MSHTMLHost.cs
- EventPropertyMap.cs
- ColorEditor.cs
- FontFamily.cs
- NumericUpDown.cs
- BasicExpandProvider.cs
- ArithmeticException.cs
- CacheOutputQuery.cs
- DecimalConverter.cs
- RowToFieldTransformer.cs
- PlatformNotSupportedException.cs
- TokenizerHelper.cs
- SafeHandles.cs
- GeneralTransform3D.cs
- BrushValueSerializer.cs
- SmtpException.cs
- CmsInterop.cs
- XamlWrappingReader.cs
- WebPartDisplayModeCollection.cs
- ClientRuntimeConfig.cs
- DataObjectCopyingEventArgs.cs
- UshortList2.cs
- LinqDataSourceInsertEventArgs.cs
- GridItemPatternIdentifiers.cs
- TransactionInformation.cs
- OSFeature.cs
- UrlAuthorizationModule.cs
- iisPickupDirectory.cs
- StreamReader.cs
- DataRowCollection.cs
- DesignerTransactionCloseEvent.cs
- UrlSyndicationContent.cs
- ConcurrentBag.cs
- XmlILAnnotation.cs
- WorkflowQueue.cs
- AddInControllerImpl.cs
- BindUriHelper.cs
- SqlConnectionStringBuilder.cs
- HtmlFormAdapter.cs
- PropertyGridCommands.cs
- CommonServiceBehaviorElement.cs
- MobileComponentEditorPage.cs
- ThousandthOfEmRealDoubles.cs
- GraphicsContainer.cs
- Win32Native.cs
- VectorAnimationUsingKeyFrames.cs
- WebDisplayNameAttribute.cs
- SecurityPermission.cs
- TriggerActionCollection.cs
- HistoryEventArgs.cs
- ControlTemplate.cs
- ScopelessEnumAttribute.cs
- BrowserTree.cs
- ConfigsHelper.cs
- PageAction.cs