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
- DataServiceQueryException.cs
- WindowInteractionStateTracker.cs
- Site.cs
- EntityDataSourceView.cs
- OleDbFactory.cs
- MsmqBindingBase.cs
- ExpressionBuilderCollection.cs
- CompilationSection.cs
- InputMethod.cs
- HwndTarget.cs
- HyperLinkStyle.cs
- WebServiceResponse.cs
- ReadOnlyTernaryTree.cs
- Maps.cs
- PerformanceCounterPermission.cs
- DataViewSettingCollection.cs
- MailBnfHelper.cs
- StyleCollection.cs
- ChoiceConverter.cs
- MD5CryptoServiceProvider.cs
- Command.cs
- FormsAuthenticationConfiguration.cs
- Opcode.cs
- SchemaImporterExtensionElement.cs
- SQlBooleanStorage.cs
- HealthMonitoringSectionHelper.cs
- LocalFileSettingsProvider.cs
- ChangeProcessor.cs
- JoinQueryOperator.cs
- CryptoProvider.cs
- Scene3D.cs
- Compiler.cs
- DbCommandTree.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- CodeSubDirectoriesCollection.cs
- MouseCaptureWithinProperty.cs
- UrlPath.cs
- NonVisualControlAttribute.cs
- OptimalBreakSession.cs
- Style.cs
- SparseMemoryStream.cs
- DataGridViewLinkColumn.cs
- SelectionService.cs
- HitTestDrawingContextWalker.cs
- OleDbInfoMessageEvent.cs
- CodeCompiler.cs
- securitycriticaldataformultiplegetandset.cs
- RowsCopiedEventArgs.cs
- QueryCursorEventArgs.cs
- XmlAttributeHolder.cs
- ActivationArguments.cs
- mediaeventshelper.cs
- GridViewRowPresenterBase.cs
- QueryStringParameter.cs
- WmlTextViewAdapter.cs
- StylusTip.cs
- TextSegment.cs
- PackageController.cs
- Parameter.cs
- StringToken.cs
- Exceptions.cs
- Queue.cs
- ImageListStreamer.cs
- WebPartHelpVerb.cs
- SessionStateContainer.cs
- MessageCredentialType.cs
- SystemWebExtensionsSectionGroup.cs
- XmlHierarchicalDataSourceView.cs
- QuaternionAnimationUsingKeyFrames.cs
- FileSystemWatcher.cs
- Brush.cs
- CqlQuery.cs
- WindowsGrip.cs
- Duration.cs
- DbRetry.cs
- __TransparentProxy.cs
- Accessible.cs
- SubqueryTrackingVisitor.cs
- XmlNodeChangedEventManager.cs
- RuntimeWrappedException.cs
- CodeConditionStatement.cs
- RangeValidator.cs
- Restrictions.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- LoginDesigner.cs
- TableLayoutStyle.cs
- DocumentOrderQuery.cs
- RewritingSimplifier.cs
- StructuralCache.cs
- X509ChainElement.cs
- AnonymousIdentificationModule.cs
- OperationPickerDialog.designer.cs
- Trigger.cs
- DeviceFilterDictionary.cs
- XmlConverter.cs
- SqlOuterApplyReducer.cs
- PropertyGridEditorPart.cs
- OracleString.cs
- CheckBoxAutomationPeer.cs
- Convert.cs