2 using System.Collections.Generic;
\r
3 using System.ServiceModel;
\r
4 using System.ServiceModel.Channels;
\r
5 using System.ServiceModel.Security;
\r
6 using System.ServiceModel.Security.Tokens;
\r
9 namespace System.ServiceModel.Dispatcher
\r
11 internal class BaseRequestProcessor
\r
13 HandlersChain initialize_handlers_chain = new HandlersChain();
\r
14 HandlersChain process_handlers_chain = new HandlersChain ();
\r
15 HandlersChain error_handlers_chain = new HandlersChain ();
\r
16 HandlersChain finalize_handlers_chain = new HandlersChain ();
\r
18 protected BaseRequestProcessor () { }
\r
20 protected virtual void ProcessRequest (MessageProcessingContext mrc)
\r
22 initialize_handlers_chain.ProcessRequestChain (mrc);
\r
24 using (new OperationContextScope (mrc.OperationContext)) {
\r
26 process_handlers_chain.ProcessRequestChain (mrc);
\r
28 catch (Exception e) {
\r
29 Console.WriteLine ("Exception " + e.Message + " " + e.StackTrace);
\r
30 mrc.ProcessingException = e;
\r
31 error_handlers_chain.ProcessRequestChain (mrc);
\r
34 finalize_handlers_chain.ProcessRequestChain (mrc);
\r
39 public HandlersChain InitializeChain
\r
41 get { return initialize_handlers_chain; }
\r
44 public HandlersChain ProcessingChain
\r
46 get { return process_handlers_chain; }
\r
49 public HandlersChain ErrorChain
\r
51 get { return error_handlers_chain; }
\r
54 public HandlersChain FinalizationChain
\r
56 get { return finalize_handlers_chain; }
\r
60 internal class HandlersChain
\r
62 BaseRequestProcessorHandler chain;
\r
64 public void ProcessRequestChain (MessageProcessingContext mrc)
\r
67 chain.ProcessRequestChain (mrc);
\r
70 public HandlersChain AddHandler (BaseRequestProcessorHandler handler)
\r
72 if (chain == null) {
\r
76 BaseRequestProcessorHandler current = chain;
\r
77 while (current.Next != null)
\r
78 current = current.Next;
\r
79 current.Next = handler;
\r