1 //----------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //----------------------------------------------------------------
4 
5 namespace System.ServiceModel.Routing
6 {
7     using System;
8     using System.Diagnostics.CodeAnalysis;
9     using System.Runtime;
10     using System.ServiceModel;
11     using System.ServiceModel.Dispatcher;
12 
13     [Fx.Tag.XamlVisible(false)]
14     public sealed class RoutingExtension : IExtension<ServiceHostBase>
15     {
16         volatile RoutingConfiguration configuration;
17 
RoutingExtension(RoutingConfiguration configuration)18         internal RoutingExtension(RoutingConfiguration configuration)
19         {
20             Fx.Assert(configuration != null, "Configuration required");
21 
22             if (TD.RoutingServiceDisplayConfigIsEnabled())
23             {
24                 TD.RoutingServiceDisplayConfig(
25                     configuration.RouteOnHeadersOnly.ToString(TD.Culture),
26                     configuration.SoapProcessingEnabled.ToString(TD.Culture),
27                     configuration.EnsureOrderedDispatch.ToString(TD.Culture));
28             }
29             this.configuration = configuration;
30         }
31 
32         [SuppressMessage(FxCop.Category.Performance, FxCop.Rule.AvoidUncalledPrivateCode, Justification = "This gets called in RoutingService..ctor")]
33         internal RoutingConfiguration RoutingConfiguration
34         {
35             get
36             {
37                 return this.configuration;
38             }
39         }
40 
Attach(ServiceHostBase owner)41         void IExtension<ServiceHostBase>.Attach(ServiceHostBase owner)
42         {
43         }
44 
Detach(ServiceHostBase owner)45         void IExtension<ServiceHostBase>.Detach(ServiceHostBase owner)
46         {
47         }
48 
ApplyConfiguration(RoutingConfiguration routingConfiguration)49         public void ApplyConfiguration(RoutingConfiguration routingConfiguration)
50         {
51             if (routingConfiguration == null)
52             {
53                 throw FxTrace.Exception.ArgumentNull("routingConfiguration");
54             }
55 
56             if (TD.RoutingServiceConfigurationAppliedIsEnabled())
57             {
58                 TD.RoutingServiceConfigurationApplied();
59             }
60             if (TD.RoutingServiceDisplayConfigIsEnabled())
61             {
62                 TD.RoutingServiceDisplayConfig(
63                     routingConfiguration.RouteOnHeadersOnly.ToString(TD.Culture),
64                     routingConfiguration.SoapProcessingEnabled.ToString(TD.Culture),
65                     routingConfiguration.EnsureOrderedDispatch.ToString(TD.Culture));
66             }
67 
68             this.configuration = routingConfiguration;
69         }
70     }
71 }
72