예제 #1
0
		void IServiceBehavior.ApplyDispatchBehavior (ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
		{
			// FIXME: not sure if this is correct.
			if (config.SoapProcessingEnabled)
				foreach (var ses in config.FilterTable.Values)
					foreach (var se in ses)
						se.Behaviors.Add (new SoapProcessingBehavior ());

			var ext = new RoutingExtension ();
			((IExtension<ServiceHostBase>) ext).Attach (serviceHostBase);
			ext.ApplyConfiguration (config);
		}
 void IServiceBehavior.ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
 {
     RoutingExtension routingExtension = new RoutingExtension(this.configuration);
     serviceHostBase.Extensions.Add(routingExtension);
     for (int i = 0; i < serviceHostBase.ChannelDispatchers.Count; i++)
     {
         ChannelDispatcher channelDispatcher = serviceHostBase.ChannelDispatchers[i] as ChannelDispatcher;
         if (channelDispatcher != null)
         {
             foreach (EndpointDispatcher endpointDispatcher in channelDispatcher.Endpoints)
             {
                 if (!endpointDispatcher.IsSystemEndpoint &&
                     RoutingUtilities.IsRoutingServiceNamespace(endpointDispatcher.ContractNamespace))
                 {
                     DispatchRuntime dispatchRuntime = endpointDispatcher.DispatchRuntime;
                     //Since we use PerSession instancing this concurrency only applies to messages
                     //in the same session, also needed to maintain order.
                     dispatchRuntime.ConcurrencyMode = ConcurrencyMode.Single;
                     dispatchRuntime.EnsureOrderedDispatch = this.configuration.EnsureOrderedDispatch;
                 }
             }
         }
     }
 }