| File: System\ServiceModel\Channels\TransportDefaults.cs | Web Access |
| Project: src\src\System.ServiceModel.Primitives\src\System.ServiceModel.Primitives.csproj (System.ServiceModel.Primitives) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Net; using System.Net.Security; using System.Net.WebSockets; using System.Security.Authentication; using System.Security.Principal; using System.ServiceModel.Security; using System.Text; using System.Xml; namespace System.ServiceModel.Channels { // If any of the const's are modified in this file, they must also be modified // on the Internal.ServiceModel.Primitives contract and implementation assemblies. internal static class EncoderDefaults { public const int MaxReadPoolSize = 64; public const int MaxWritePoolSize = 16; public const int MaxDepth = 32; public const int MaxStringContentLength = 8192; public const int MaxArrayLength = 16384; public const int MaxBytesPerRead = 4096; public const int MaxNameTableCharCount = 16384; public const int BufferedReadDefaultMaxDepth = 128; public const int BufferedReadDefaultMaxStringContentLength = Int32.MaxValue; public const int BufferedReadDefaultMaxArrayLength = Int32.MaxValue; public const int BufferedReadDefaultMaxBytesPerRead = Int32.MaxValue; public const int BufferedReadDefaultMaxNameTableCharCount = Int32.MaxValue; public const CompressionFormat DefaultCompressionFormat = CompressionFormat.None; public static readonly XmlDictionaryReaderQuotas ReaderQuotas = new XmlDictionaryReaderQuotas(); public static bool IsDefaultReaderQuotas(XmlDictionaryReaderQuotas quotas) { return quotas.ModifiedQuotas == 0x00; } } internal static class TextEncoderDefaults { public static readonly Encoding Encoding = Encoding.GetEncoding(TextEncoderDefaults.EncodingString); public const string EncodingString = "utf-8"; public static readonly Encoding[] SupportedEncodings = new Encoding[] { Encoding.UTF8, Encoding.Unicode, Encoding.BigEndianUnicode }; public const string MessageVersionString = "Soap12WSAddressing10"; // Desktop: System.ServiceModel.Configuration.ConfigurationStrings.Soap12WSAddressing10; public static readonly CharSetEncoding[] CharSetEncodings = new CharSetEncoding[] { new CharSetEncoding("utf-8", Encoding.UTF8), new CharSetEncoding("utf-16LE", Encoding.Unicode), new CharSetEncoding("utf-16BE", Encoding.BigEndianUnicode), new CharSetEncoding("utf-16", null), // Ignore. Ambiguous charSet, so autodetect. new CharSetEncoding(null, null), // CharSet omitted, so autodetect. }; public static void ValidateEncoding(Encoding encoding) { string charSet = encoding.WebName; Encoding[] supportedEncodings = SupportedEncodings; for (int i = 0; i < supportedEncodings.Length; i++) { if (charSet == supportedEncodings[i].WebName) { return; } } throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SRP.Format(SRP.MessageTextEncodingNotSupported, charSet), "encoding")); } public static string EncodingToCharSet(Encoding encoding) { string webName = encoding.WebName; CharSetEncoding[] charSetEncodings = CharSetEncodings; for (int i = 0; i < charSetEncodings.Length; i++) { Encoding enc = charSetEncodings[i].Encoding; if (enc == null) { continue; } if (enc.WebName == webName) { return charSetEncodings[i].CharSet; } } return null; } public static bool TryGetEncoding(string charSet, out Encoding encoding) { CharSetEncoding[] charSetEncodings = CharSetEncodings; // Quick check for exact equality for (int i = 0; i < charSetEncodings.Length; i++) { if (charSetEncodings[i].CharSet == charSet) { encoding = charSetEncodings[i].Encoding; return true; } } // Check for case insensitive match for (int i = 0; i < charSetEncodings.Length; i++) { string compare = charSetEncodings[i].CharSet; if (compare == null) { continue; } if (compare.Equals(charSet, StringComparison.OrdinalIgnoreCase)) { encoding = charSetEncodings[i].Encoding; return true; } } encoding = null; return false; } public class CharSetEncoding { public string CharSet; public Encoding Encoding; public CharSetEncoding(string charSet, Encoding enc) { CharSet = charSet; Encoding = enc; } } } internal static class MtomEncoderDefaults { internal const int MaxBufferSize = 65536; } internal static class BinaryEncoderDefaults { public static EnvelopeVersion EnvelopeVersion { get { return EnvelopeVersion.Soap12; } } public static BinaryVersion BinaryVersion { get { return BinaryVersion.Version1; } } public const int MaxSessionSize = 2048; } internal static class TransportDefaults { public const bool ExtractGroupsForWindowsAccounts = SspiSecurityTokenProvider.DefaultExtractWindowsGroupClaims; public const HostNameComparisonMode HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.Exact; public const TokenImpersonationLevel ImpersonationLevel = TokenImpersonationLevel.Identification; public const bool ManualAddressing = false; public const long MaxReceivedMessageSize = 65536; public const int MaxDrainSize = (int)MaxReceivedMessageSize; public const long MaxBufferPoolSize = 512 * 1024; public const int MaxBufferSize = (int)MaxReceivedMessageSize; public const bool RequireClientCertificate = false; public const int MaxFaultSize = MaxBufferSize; public const int MaxSecurityFaultSize = 16384; #pragma warning disable SYSLIB0039 public const SslProtocols SslProtocols = // SSL3 is not supported in CoreFx. System.Security.Authentication.SslProtocols.Tls | System.Security.Authentication.SslProtocols.Tls11 | System.Security.Authentication.SslProtocols.Tls12; #pragma warning restore SYSLIB0039 // Calling CreateFault on an incoming message can expose some DoS-related security // vulnerabilities when a service is in streaming mode. See MB 47592 for more details. // The RM protocol service does not use streaming mode on any of its bindings, so the // message we have in hand has already passed the binding’s MaxReceivedMessageSize check. // Custom transports can use RM so int.MaxValue is dangerous. public const int MaxRMFaultSize = (int)MaxReceivedMessageSize; public static MessageEncoderFactory GetDefaultMessageEncoderFactory() { return new BinaryMessageEncodingBindingElement().CreateMessageEncoderFactory(); } } internal static class ReliableSessionDefaults { internal const string AcknowledgementIntervalString = "00:00:00.2"; internal static TimeSpan AcknowledgementInterval { get { return TimeSpanHelper.FromMilliseconds(200, AcknowledgementIntervalString); } } internal const bool Enabled = false; internal const bool FlowControlEnabled = true; internal const string InactivityTimeoutString = "00:10:00"; internal static TimeSpan InactivityTimeout { get { return TimeSpanHelper.FromMinutes(10, InactivityTimeoutString); } } internal const int MaxPendingChannels = 4; internal const int MaxRetryCount = 8; internal const int MaxTransferWindowSize = 8; internal const bool Ordered = true; internal static ReliableMessagingVersion ReliableMessagingVersion { get { return System.ServiceModel.ReliableMessagingVersion.WSReliableMessagingFebruary2005; } } internal const string ReliableMessagingVersionString = "WSReliableMessagingFebruary2005"; } }