1 //----------------------------------------------------------------------------- 2 // Copyright (c) Microsoft Corporation. All rights reserved. 3 //----------------------------------------------------------------------------- 4 5 namespace System.ServiceModel.Dispatcher 6 { 7 using System.Collections.Generic; 8 using System.ServiceModel.Channels; 9 using System.Runtime.Serialization; 10 11 class EndpointFilterProvider 12 { 13 SynchronizedCollection<string> initiatingActions; 14 object mutex; 15 EndpointFilterProvider(params string[] initiatingActions)16 public EndpointFilterProvider(params string[] initiatingActions) 17 { 18 this.mutex = new object(); 19 this.initiatingActions = new SynchronizedCollection<string>(this.mutex, initiatingActions); 20 } 21 22 public SynchronizedCollection<string> InitiatingActions 23 { 24 get { return this.initiatingActions; } 25 } 26 CreateFilter(out int priority)27 public MessageFilter CreateFilter(out int priority) 28 { 29 lock (this.mutex) 30 { 31 priority = 1; 32 if (initiatingActions.Count == 0) 33 return new MatchNoneMessageFilter(); 34 35 string[] actions = new string[initiatingActions.Count]; 36 int index = 0; 37 for (int i = 0; i < initiatingActions.Count; i++) 38 { 39 string currentAction = initiatingActions[i]; 40 if (currentAction == MessageHeaders.WildcardAction) 41 { 42 priority = 0; 43 return new MatchAllMessageFilter(); 44 } 45 actions[index] = currentAction; 46 ++index; 47 } 48 49 return new ActionMessageFilter(actions); 50 } 51 } 52 } 53 } 54 55