2 // Copyright (c) Microsoft Corporation. All rights reserved.
4 namespace System.ServiceModel
7 using System.Runtime.CompilerServices;
9 // When adding a quirk, name it such that false is new behavior and true is old behavior.
10 // You are opting IN to old behavior. The new behavior is default.
11 // For example, we want to enable the functionality to explicitly add a connection close header
12 // in 4.6 and above. So we set DisableExplicitConnectionCloseHeader to true if running 4.5.2 or less.
13 internal static class LocalAppContextSwitches
15 private const string DisableExplicitConnectionCloseHeaderString = "Switch.System.ServiceModel.DisableExplicitConnectionCloseHeader";
16 private const string AllowUnsignedToHeaderString = "Switch.System.ServiceModel.AllowUnsignedToHeader";
17 private const string DisableCngCertificatesString = "Switch.System.ServiceModel.DisableCngCertificates";
19 private static int disableExplicitConnectionCloseHeader;
20 private static int allowUnsignedToHeader;
21 private static int disableCngCertificates;
23 public static bool DisableExplicitConnectionCloseHeader
25 [MethodImpl(MethodImplOptions.AggressiveInlining)]
28 return LocalAppContext.GetCachedSwitchValue(DisableExplicitConnectionCloseHeaderString, ref disableExplicitConnectionCloseHeader);
32 public static bool AllowUnsignedToHeader
34 [MethodImpl(MethodImplOptions.AggressiveInlining)]
37 return LocalAppContext.GetCachedSwitchValue(AllowUnsignedToHeaderString, ref allowUnsignedToHeader);
41 public static bool DisableCngCertificates
43 [MethodImpl(MethodImplOptions.AggressiveInlining)]
46 return LocalAppContext.GetCachedSwitchValue(DisableCngCertificatesString, ref disableCngCertificates);
50 public static void SetDefaultsLessOrEqual_452()
52 #pragma warning disable BCL0012
53 // Define the switches that should be true for 4.5.2 or less, false for 4.6+.
54 LocalAppContext.DefineSwitchDefault(DisableExplicitConnectionCloseHeaderString, true);
55 #pragma warning restore BCL0012
58 public static void SetDefaultsLessOrEqual_461()
60 #pragma warning disable BCL0012
61 // Define the switches that should be true for 4.6.1 or less, false for 4.6.2+.
62 LocalAppContext.DefineSwitchDefault(DisableCngCertificatesString, true);
63 #pragma warning restore BCL0012