| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- using System;
- using System.Collections.Generic;
- using System.ServiceModel;
- using System.ServiceModel.Channels;
- using System.ServiceModel.Security;
- using System.ServiceModel.Security.Tokens;
- using System.Text;
- using System.ServiceModel.MonoInternal;
- namespace System.ServiceModel.Dispatcher
- {
- internal class InputOrReplyRequestProcessor : BaseRequestProcessor
- {
- DispatchRuntime dispatch_runtime;
- IChannel reply_or_input;
- public InputOrReplyRequestProcessor (DispatchRuntime runtime, IChannel replyOrInput)
- {
- Init (runtime, replyOrInput);
- //initialization
- InitializeChain.AddHandler (new InitializingHandler ());
- //processing
- ProcessingChain.AddHandler (new PostReceiveRequestHandler ()).
- AddHandler(new SecurityHandler ()).
- AddHandler(new OperationInvokerHandler (replyOrInput));
- //errors
- ErrorChain.AddHandler (new ErrorProcessingHandler (replyOrInput));
- //finalize
- FinalizationChain.AddHandler (new FinalizeProcessingHandler ());
- }
- void Init (DispatchRuntime runtime, IChannel replyOrInput)
- {
- dispatch_runtime = runtime;
- reply_or_input = replyOrInput;
- }
- public void ProcessInput (Message message)
- {
- OperationContext opcx = CreateOperationContext (message);
- ProcessRequest (new MessageProcessingContext (opcx));
- }
- public void ProcessReply (RequestContext rc)
- {
- OperationContext opcx = CreateOperationContext (rc.RequestMessage);
- opcx.RequestContext = rc;
- ProcessRequest (new MessageProcessingContext (opcx));
- }
- OperationContext CreateOperationContext (Message incoming)
- {
- ServiceRuntimeChannel contextChannel;
- if (dispatch_runtime.CallbackClientRuntime.CallbackClientType != null) {
- var type = ServiceProxyGenerator.CreateCallbackProxyType (dispatch_runtime.Type, dispatch_runtime.CallbackClientRuntime.CallbackClientType);
- contextChannel = (ServiceRuntimeChannel) Activator.CreateInstance (type, new object [] {reply_or_input, dispatch_runtime});
- }
- else
- contextChannel = new ServiceRuntimeChannel (reply_or_input, dispatch_runtime);
- OperationContext opCtx = new OperationContext (contextChannel);
- opCtx.IncomingMessage = incoming;
- opCtx.EndpointDispatcher = dispatch_runtime.EndpointDispatcher;
- return opCtx;
- }
- }
- }
|