1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel
{
using System;
using System.ComponentModel;
using System.Configuration;
using System.Runtime;
using System.ServiceModel.Channels;
using System.ServiceModel.Configuration;
public class BasicHttpsBinding : HttpBindingBase
{
WSMessageEncoding messageEncoding = BasicHttpBindingDefaults.MessageEncoding;
BasicHttpsSecurity basicHttpsSecurity;
public BasicHttpsBinding() : this(BasicHttpsSecurity.DefaultMode) { }
public BasicHttpsBinding(string configurationName) : this()
{
this.ApplyConfiguration(configurationName);
}
public BasicHttpsBinding(BasicHttpsSecurityMode securityMode)
: base()
{
this.basicHttpsSecurity = new BasicHttpsSecurity();
this.basicHttpsSecurity.Mode = securityMode;
}
[DefaultValue(WSMessageEncoding.Text)]
public WSMessageEncoding MessageEncoding
{
get
{
return this.messageEncoding;
}
set
{
this.messageEncoding = value;
}
}
public BasicHttpsSecurity Security
{
get
{
return this.basicHttpsSecurity;
}
set
{
if (value == null)
{
throw FxTrace.Exception.ArgumentNull("value");
}
this.basicHttpsSecurity = value;
}
}
internal override BasicHttpSecurity BasicHttpSecurity
{
get
{
return this.basicHttpsSecurity.BasicHttpSecurity;
}
}
internal override EnvelopeVersion GetEnvelopeVersion()
{
return EnvelopeVersion.Soap11;
}
public override IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingParameterCollection parameters)
{
if ((this.BasicHttpSecurity.Mode == BasicHttpSecurityMode.Transport ||
this.BasicHttpSecurity.Mode == BasicHttpSecurityMode.TransportCredentialOnly) &&
this.BasicHttpSecurity.Transport.ClientCredentialType == HttpClientCredentialType.InheritedFromHost)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.HttpClientCredentialTypeInvalid, this.BasicHttpSecurity.Transport.ClientCredentialType)));
}
return base.BuildChannelFactory<TChannel>(parameters);
}
public override BindingElementCollection CreateBindingElements()
{
this.CheckSettings();
// return collection of BindingElements
BindingElementCollection bindingElements = new BindingElementCollection();
// order of BindingElements is important
// add security (*optional)
SecurityBindingElement wsSecurity = this.BasicHttpSecurity.CreateMessageSecurity();
if (wsSecurity != null)
{
bindingElements.Add(wsSecurity);
}
// add encoding (text or mtom)
WSMessageEncodingHelper.SyncUpEncodingBindingElementProperties(this.TextMessageEncodingBindingElement, this.MtomMessageEncodingBindingElement);
if (this.MessageEncoding == WSMessageEncoding.Text)
bindingElements.Add(this.TextMessageEncodingBindingElement);
else if (this.MessageEncoding == WSMessageEncoding.Mtom)
bindingElements.Add(this.MtomMessageEncodingBindingElement);
// add transport (http or https)
bindingElements.Add(this.GetTransport());
return bindingElements.Clone();
}
[EditorBrowsable(EditorBrowsableState.Never)]
public bool ShouldSerializeSecurity()
{
// Default Security mode here is different from that of BasicHttpBinding. Therefore, we call into the BasicHttpsSecurity.InternalShouldSerialize() here.
return this.Security.InternalShouldSerialize();
}
void ApplyConfiguration(string configurationName)
{
BasicHttpsBindingCollectionElement section = BasicHttpsBindingCollectionElement.GetBindingCollectionElement();
BasicHttpsBindingElement element = section.Bindings[configurationName];
if (element == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
new ConfigurationErrorsException(
SR.GetString(
SR.ConfigInvalidBindingConfigurationName,
configurationName,
ConfigurationStrings.BasicHttpsBindingCollectionElementName)));
}
else
{
element.ApplyConfiguration(this);
}
}
}
}
|