internal Wrapper(ref MessageRpc rpc) { this.rpc = rpc; MessageRpcProcessor nextProcessor = rpc.NextProcessor; this.rpc.IncrementBusyCount(); }
bool ProcessError(Exception e) { MessageRpcProcessor handler = this.ErrorProcessor; try { Type exceptionType = e.GetType(); if (exceptionType.IsAssignableFrom(typeof(FaultException))) { DiagnosticUtility.TraceHandledException(e, TraceEventType.Information); } else { DiagnosticUtility.TraceHandledException(e, TraceEventType.Error); } if (TraceUtility.MessageFlowTracingOnly) { TraceUtility.SetActivityId(this.Request.Properties); if (Guid.Empty == DiagnosticTraceBase.ActivityId) { Guid receivedActivityId = TraceUtility.ExtractActivityId(this.Request); if (Guid.Empty != receivedActivityId) { DiagnosticTraceBase.ActivityId = receivedActivityId; } } } this.Error = e; if (this.ErrorProcessor != null) { this.ErrorProcessor(ref this); } return(this.Error == null); } #pragma warning suppress 56500 // covered by FxCOP catch (Exception e2) { if (Fx.IsFatal(e2)) { throw; } return((handler != this.ErrorProcessor) && this.ProcessError(e2)); } }
private bool ProcessError(Exception e) { MessageRpcProcessor errorProcessor = this.ErrorProcessor; try { if (e.GetType().IsAssignableFrom(typeof(FaultException))) { if (DiagnosticUtility.ShouldTraceInformation) { DiagnosticUtility.ExceptionUtility.TraceHandledException(e, TraceEventType.Information); } } else if (DiagnosticUtility.ShouldTraceError) { DiagnosticUtility.ExceptionUtility.TraceHandledException(e, TraceEventType.Error); } if (TraceUtility.MessageFlowTracingOnly) { TraceUtility.SetActivityId(this.Request.Properties); if (Guid.Empty == DiagnosticTrace.ActivityId) { Guid guid = TraceUtility.ExtractActivityId(this.Request); if (Guid.Empty != guid) { DiagnosticTrace.ActivityId = guid; } } } this.Error = e; if (this.ErrorProcessor != null) { this.ErrorProcessor(ref this); } return(this.Error == null); } catch (Exception exception) { if (Fx.IsFatal(exception)) { throw; } return((errorProcessor != this.ErrorProcessor) && this.ProcessError(exception)); } }
internal ImmutableDispatchRuntime(DispatchRuntime dispatch) { _concurrency = new ConcurrencyBehavior(dispatch); _error = new ErrorBehavior(dispatch.ChannelDispatcher); EnableFaults = dispatch.EnableFaults; _instance = new InstanceBehavior(dispatch, this); ManualAddressing = dispatch.ManualAddressing; _messageInspectors = EmptyArray <IDispatchMessageInspector> .ToArray(dispatch.MessageInspectors); _terminate = TerminatingOperationBehavior.CreateIfNecessary(dispatch); _thread = new ThreadBehavior(dispatch); _sendAsynchronously = dispatch.ChannelDispatcher.SendAsynchronously; CorrelationCount = dispatch.MaxParameterInspectors; DispatchOperationRuntime unhandled = new DispatchOperationRuntime(dispatch.UnhandledDispatchOperation, this); ActionDemuxer demuxer = new ActionDemuxer(); for (int i = 0; i < dispatch.Operations.Count; i++) { DispatchOperation operation = dispatch.Operations[i]; DispatchOperationRuntime operationRuntime = new DispatchOperationRuntime(operation, this); demuxer.Add(operation.Action, operationRuntime); } demuxer.SetUnhandled(unhandled); _demuxer = demuxer; _processMessage1 = ProcessMessage1; _processMessage11 = ProcessMessage11; _processMessage2 = ProcessMessage2; _processMessage3 = ProcessMessage3; _processMessage31 = ProcessMessage31; _processMessage4 = ProcessMessage4; _processMessage41 = ProcessMessage41; _processMessage5 = ProcessMessage5; _processMessage6 = ProcessMessage6; _processMessage7 = ProcessMessage7; _processMessage8 = ProcessMessage8; _processMessage9 = ProcessMessage9; _processMessageCleanup = ProcessMessageCleanup; _processMessageCleanupError = ProcessMessageCleanupError; }
private bool ProcessError(Exception e) { MessageRpcProcessor handler = this.ErrorProcessor; try { if (TraceUtility.MessageFlowTracingOnly) { TraceUtility.SetActivityId(this.Request.Properties); if (Guid.Empty == DiagnosticTraceBase.ActivityId) { Guid receivedActivityId = TraceUtility.ExtractActivityId(this.Request); if (Guid.Empty != receivedActivityId) { DiagnosticTraceBase.ActivityId = receivedActivityId; } } } this.Error = e; if (this.ErrorProcessor != null) { this.ErrorProcessor(ref this); } return(this.Error == null); } #pragma warning disable 56500 // covered by FxCOP catch (Exception e2) { if (Fx.IsFatal(e2)) { throw; } return((handler != this.ErrorProcessor) && this.ProcessError(e2)); } }
internal ImmutableDispatchRuntime(DispatchRuntime dispatch) { _concurrency = new ConcurrencyBehavior(dispatch); _error = new ErrorBehavior(dispatch.ChannelDispatcher); _enableFaults = dispatch.EnableFaults; _instance = new InstanceBehavior(dispatch, this); _manualAddressing = dispatch.ManualAddressing; _thread = new ThreadBehavior(dispatch); _sendAsynchronously = dispatch.ChannelDispatcher.SendAsynchronously; _correlationCount = dispatch.MaxParameterInspectors; DispatchOperationRuntime unhandled = new DispatchOperationRuntime(dispatch.UnhandledDispatchOperation, this); ActionDemuxer demuxer = new ActionDemuxer(); for (int i = 0; i < dispatch.Operations.Count; i++) { DispatchOperation operation = dispatch.Operations[i]; DispatchOperationRuntime operationRuntime = new DispatchOperationRuntime(operation, this); demuxer.Add(operation.Action, operationRuntime); } demuxer.SetUnhandled(unhandled); _demuxer = demuxer; _processMessage1 = ProcessMessage1; _processMessage11 = ProcessMessage11; _processMessage2 = ProcessMessage2; _processMessage3 = ProcessMessage3; _processMessage31 = ProcessMessage31; _processMessage4 = ProcessMessage4; _processMessage41 = ProcessMessage41; _processMessage5 = ProcessMessage5; _processMessage6 = ProcessMessage6; _processMessage7 = ProcessMessage7; _processMessage8 = ProcessMessage8; _processMessage9 = ProcessMessage9; _processMessageCleanup = ProcessMessageCleanup; _processMessageCleanupError = ProcessMessageCleanupError; }
private bool ProcessError(Exception e) { MessageRpcProcessor handler = ErrorProcessor; try { if (TraceUtility.MessageFlowTracingOnly) { TraceUtility.SetActivityId(Request.Properties); if (Guid.Empty == DiagnosticTraceBase.ActivityId) { Guid receivedActivityId = TraceUtility.ExtractActivityId(Request); if (Guid.Empty != receivedActivityId) { DiagnosticTraceBase.ActivityId = receivedActivityId; } } } Error = e; if (ErrorProcessor != null) { ErrorProcessor(ref this); } return(Error == null); } catch (Exception e2) { if (Fx.IsFatal(e2)) { throw; } return((handler != ErrorProcessor) && ProcessError(e2)); } }
internal bool Process(bool isOperationContextSet) { using (ServiceModelActivity.BoundOperation(this.Activity)) { bool completed = true; if (this.NextProcessor != null) { MessageRpcProcessor processor = this.NextProcessor; this.NextProcessor = null; OperationContext originalContext; OperationContext.Holder contextHolder; if (!isOperationContextSet) { contextHolder = OperationContext.CurrentHolder; originalContext = contextHolder.Context; } else { contextHolder = null; originalContext = null; } IncrementBusyCount(); IDisposable hostedIntegrationContext = this.ApplyHostingIntegrationContext(); try { if (!isOperationContextSet) { contextHolder.Context = this.OperationContext; } processor(ref this); if (!this.paused) { this.OperationContext.SetClientReply(null, false); } } #pragma warning suppress 56500 // covered by FxCOP catch (Exception e) { if (Fx.IsFatal(e)) { throw; } if (!this.ProcessError(e) && this.FaultInfo.Fault == null) { this.Abort(); } } finally { try { DecrementBusyCount(); if (hostedIntegrationContext != null) { hostedIntegrationContext.Dispose(); } if (!isOperationContextSet) { contextHolder.Context = originalContext; } completed = !this.paused; if (completed) { this.channelHandler.DispatchDone(); this.OperationContext.ClearClientReplyNoThrow(); } } #pragma warning suppress 56500 // covered by FxCOP catch (Exception e) { if (Fx.IsFatal(e)) { throw; } throw DiagnosticUtility.ExceptionUtility.ThrowHelperFatal(e.Message, e); } } } return completed; } }
internal MessageRpc(RequestContext requestContext, Message request, DispatchOperationRuntime operation, ServiceChannel channel, ChannelHandler channelHandler, bool cleanThread, OperationContext operationContext, InstanceContext instanceContext, EventTraceActivity eventTraceActivity) { Fx.Assert((operationContext != null), "System.ServiceModel.Dispatcher.MessageRpc.MessageRpc(), operationContext == null"); Fx.Assert(channelHandler != null, "System.ServiceModel.Dispatcher.MessageRpc.MessageRpc(), channelHandler == null"); this.Activity = null; this.EventTraceActivity = eventTraceActivity; this.AsyncResult = null; this.CanSendReply = true; this.Channel = channel; this.channelHandler = channelHandler; this.Correlation = EmptyArray <object> .Allocate(operation.Parent.CorrelationCount); this.DidDeserializeRequestBody = false; this.Error = null; this.ErrorProcessor = null; this.FaultInfo = new ErrorHandlerFaultInfo(request.Version.Addressing.DefaultFaultAction); this.HasSecurityContext = false; this.Instance = null; this.MessageRpcOwnsInstanceContextThrottle = false; this.NextProcessor = null; this.NotUnderstoodHeaders = null; this.Operation = operation; this.OperationContext = operationContext; _paused = false; this.ParametersDisposed = false; this.Request = request; this.RequestContext = requestContext; this.RequestContextThrewOnReply = false; this.SuccessfullySendReply = false; this.RequestVersion = request.Version; this.Reply = null; this.ReplyTimeoutHelper = new TimeoutHelper(); this.SecurityContext = null; this.InstanceContext = instanceContext; this.SuccessfullyBoundInstance = false; this.SuccessfullyIncrementedActivity = false; this.SuccessfullyLockedInstance = false; _switchedThreads = !cleanThread; this.InputParameters = null; this.OutputParameters = null; this.ReturnParameter = null; _isInstanceContextSingleton = false; _invokeContinueGate = null; if (!operation.IsOneWay && !operation.Parent.ManualAddressing) { this.RequestID = request.Headers.MessageId; this.ReplyToInfo = new RequestReplyCorrelator.ReplyToInfo(request); } else { this.RequestID = null; this.ReplyToInfo = new RequestReplyCorrelator.ReplyToInfo(); } if (DiagnosticUtility.ShouldUseActivity) { this.Activity = TraceUtility.ExtractActivity(this.Request); } if (DiagnosticUtility.ShouldUseActivity || TraceUtility.ShouldPropagateActivity) { this.ResponseActivityId = ActivityIdHeader.ExtractActivityId(this.Request); } else { this.ResponseActivityId = Guid.Empty; } this.InvokeNotification = new MessageRpcInvokeNotification(this.Activity, this.channelHandler); if (this.EventTraceActivity == null && FxTrace.Trace.IsEnd2EndActivityTracingEnabled) { if (this.Request != null) { this.EventTraceActivity = EventTraceActivityHelper.TryExtractActivity(this.Request, true); } } }
internal bool Process(bool isOperationContextSet) { using (ServiceModelActivity.BoundOperation(this.Activity)) { bool completed = true; if (this.NextProcessor != null) { MessageRpcProcessor processor = this.NextProcessor; this.NextProcessor = null; OperationContext originalContext; OperationContext.Holder contextHolder; if (!isOperationContextSet) { contextHolder = OperationContext.CurrentHolder; originalContext = contextHolder.Context; } else { contextHolder = null; originalContext = null; } IncrementBusyCount(); try { if (!isOperationContextSet) { contextHolder.Context = this.OperationContext; } processor(ref this); if (!_paused) { this.OperationContext.SetClientReply(null, false); } } #pragma warning disable 56500 // covered by FxCOP catch (Exception e) { if (Fx.IsFatal(e)) { throw; } if (!this.ProcessError(e) && this.FaultInfo.Fault == null) { this.Abort(); } } finally { try { DecrementBusyCount(); if (!isOperationContextSet) { contextHolder.Context = originalContext; } completed = !_paused; if (completed) { this.channelHandler.DispatchDone(); this.OperationContext.ClearClientReplyNoThrow(); } } #pragma warning disable 56500 // covered by FxCOP catch (Exception e) { if (Fx.IsFatal(e)) { throw; } throw DiagnosticUtility.ExceptionUtility.ThrowHelperFatal(e.Message, e); } } } return(completed); } }
internal MessageRpc(System.ServiceModel.Channels.RequestContext requestContext, Message request, DispatchOperationRuntime operation, ServiceChannel channel, ServiceHostBase host, ChannelHandler channelHandler, bool cleanThread, System.ServiceModel.OperationContext operationContext, System.ServiceModel.InstanceContext instanceContext) { this.Activity = null; this.AsyncResult = null; this.CanSendReply = true; this.Channel = channel; this.channelHandler = channelHandler; this.Correlation = EmptyArray.Allocate(operation.Parent.CorrelationCount); this.CorrelationCallback = null; this.DidDeserializeRequestBody = false; this.TransactionMessageProperty = null; this.TransactedBatchContext = null; this.Error = null; this.ErrorProcessor = null; this.FaultInfo = new ErrorHandlerFaultInfo(request.Version.Addressing.DefaultFaultAction); this.HasSecurityContext = false; this.Host = host; this.Instance = null; this.MessageRpcOwnsInstanceContextThrottle = false; this.NextProcessor = null; this.NotUnderstoodHeaders = null; this.Operation = operation; this.OperationContext = operationContext; this.paused = false; this.ParametersDisposed = false; this.ReceiveContext = null; this.Request = request; this.RequestContext = requestContext; this.RequestContextThrewOnReply = false; this.SuccessfullySendReply = false; this.RequestVersion = request.Version; this.Reply = null; this.ReplyTimeoutHelper = new TimeoutHelper(); this.SecurityContext = null; this.InstanceContext = instanceContext; this.SuccessfullyBoundInstance = false; this.SuccessfullyIncrementedActivity = false; this.SuccessfullyLockedInstance = false; this.switchedThreads = !cleanThread; this.transaction = null; this.InputParameters = null; this.OutputParameters = null; this.ReturnParameter = null; this.isInstanceContextSingleton = InstanceContextProviderBase.IsProviderSingleton(this.Channel.DispatchRuntime.InstanceContextProvider); this.invokeContinueGate = null; if (!operation.IsOneWay && !operation.Parent.ManualAddressing) { this.RequestID = request.Headers.MessageId; this.ReplyToInfo = new System.ServiceModel.Channels.RequestReplyCorrelator.ReplyToInfo(request); } else { this.RequestID = null; this.ReplyToInfo = new System.ServiceModel.Channels.RequestReplyCorrelator.ReplyToInfo(); } this.HostingProperty = AspNetEnvironment.Current.PrepareMessageForDispatch(request); if (DiagnosticUtility.ShouldUseActivity) { this.Activity = TraceUtility.ExtractActivity(this.Request); } if (DiagnosticUtility.ShouldUseActivity || TraceUtility.ShouldPropagateActivity) { this.ResponseActivityId = ActivityIdHeader.ExtractActivityId(this.Request); } else { this.ResponseActivityId = Guid.Empty; } this.InvokeNotification = new MessageRpcInvokeNotification(this.Activity, this.channelHandler); }
internal bool Process(bool isOperationContextSet) { using (ServiceModelActivity.BoundOperation(this.Activity)) { bool flag = true; if (this.NextProcessor != null) { System.ServiceModel.OperationContext context; System.ServiceModel.OperationContext.Holder currentHolder; MessageRpcProcessor nextProcessor = this.NextProcessor; this.NextProcessor = null; if (!isOperationContextSet) { currentHolder = System.ServiceModel.OperationContext.CurrentHolder; context = currentHolder.Context; } else { currentHolder = null; context = null; } this.IncrementBusyCount(); IDisposable disposable = this.ApplyHostingIntegrationContext(); try { if (!isOperationContextSet) { currentHolder.Context = this.OperationContext; } nextProcessor(ref this); if (!this.paused) { this.OperationContext.SetClientReply(null, false); } } catch (Exception exception) { if (Fx.IsFatal(exception)) { throw; } if (!this.ProcessError(exception) && (this.FaultInfo.Fault == null)) { this.Abort(); } } finally { try { this.DecrementBusyCount(); if (disposable != null) { disposable.Dispose(); } if (!isOperationContextSet) { currentHolder.Context = context; } flag = !this.paused; if (flag) { this.channelHandler.DispatchDone(); this.OperationContext.ClearClientReplyNoThrow(); } } catch (Exception exception2) { if (Fx.IsFatal(exception2)) { throw; } throw DiagnosticUtility.ExceptionUtility.ThrowHelperFatal(exception2.Message, exception2); } } } return(flag); } }
internal bool Process(bool isOperationContextSet) { using (ServiceModelActivity.BoundOperation(this.Activity)) { bool flag = true; if (this.NextProcessor != null) { System.ServiceModel.OperationContext context; System.ServiceModel.OperationContext.Holder currentHolder; MessageRpcProcessor nextProcessor = this.NextProcessor; this.NextProcessor = null; if (!isOperationContextSet) { currentHolder = System.ServiceModel.OperationContext.CurrentHolder; context = currentHolder.Context; } else { currentHolder = null; context = null; } this.IncrementBusyCount(); IDisposable disposable = this.ApplyHostingIntegrationContext(); try { if (!isOperationContextSet) { currentHolder.Context = this.OperationContext; } nextProcessor(ref this); if (!this.paused) { this.OperationContext.SetClientReply(null, false); } } catch (Exception exception) { if (Fx.IsFatal(exception)) { throw; } if (!this.ProcessError(exception) && (this.FaultInfo.Fault == null)) { this.Abort(); } } finally { try { this.DecrementBusyCount(); if (disposable != null) { disposable.Dispose(); } if (!isOperationContextSet) { currentHolder.Context = context; } flag = !this.paused; if (flag) { this.channelHandler.DispatchDone(); this.OperationContext.ClearClientReplyNoThrow(); } } catch (Exception exception2) { if (Fx.IsFatal(exception2)) { throw; } throw DiagnosticUtility.ExceptionUtility.ThrowHelperFatal(exception2.Message, exception2); } } } return flag; } }
internal bool Process(bool isOperationContextSet) { using (ServiceModelActivity.BoundOperation(Activity)) { bool completed = true; if (NextProcessor != null) { MessageRpcProcessor processor = NextProcessor; NextProcessor = null; OperationContext originalContext; if (!isOperationContextSet) { originalContext = OperationContext.Current; } else { originalContext = null; } IncrementBusyCount(); try { if (!isOperationContextSet) { OperationContext.Current = OperationContext; } processor(ref this); if (!IsPaused) { OperationContext.SetClientReply(null, false); } } catch (Exception e) { if (Fx.IsFatal(e)) { throw; } if (!ProcessError(e) && FaultInfo.Fault == null) { Abort(); } } finally { try { DecrementBusyCount(); if (!isOperationContextSet) { OperationContext.Current = originalContext; } completed = !IsPaused; if (completed) { channelHandler.DispatchDone(); OperationContext.ClearClientReplyNoThrow(); } } catch (Exception e) { if (Fx.IsFatal(e)) { throw; } throw DiagnosticUtility.ExceptionUtility.ThrowHelperFatal(e.Message, e); } } } return completed; } }
internal MessageRpc(RequestContext requestContext, Message request, DispatchOperationRuntime operation, ServiceChannel channel, ServiceHostBase host, ChannelHandler channelHandler, bool cleanThread, OperationContext operationContext, InstanceContext instanceContext, EventTraceActivity eventTraceActivity) { Fx.Assert((operationContext != null), "System.ServiceModel.Dispatcher.MessageRpc.MessageRpc(), operationContext == null"); Fx.Assert(channelHandler != null, "System.ServiceModel.Dispatcher.MessageRpc.MessageRpc(), channelHandler == null"); this.Activity = null; this.EventTraceActivity = eventTraceActivity; this.AsyncResult = null; this.CanSendReply = true; this.Channel = channel; this.channelHandler = channelHandler; this.Correlation = EmptyArray.Allocate(operation.Parent.CorrelationCount); this.CorrelationCallback = null; this.DidDeserializeRequestBody = false; this.TransactionMessageProperty = null; this.TransactedBatchContext = null; this.Error = null; this.ErrorProcessor = null; this.FaultInfo = new ErrorHandlerFaultInfo(request.Version.Addressing.DefaultFaultAction); this.HasSecurityContext = false; this.Host = host; this.Instance = null; this.MessageRpcOwnsInstanceContextThrottle = false; this.NextProcessor = null; this.NotUnderstoodHeaders = null; this.Operation = operation; this.OperationContext = operationContext; this.paused = false; this.ParametersDisposed = false; this.ReceiveContext = null; this.Request = request; this.RequestContext = requestContext; this.RequestContextThrewOnReply = false; this.SuccessfullySendReply = false; this.RequestVersion = request.Version; this.Reply = null; this.ReplyTimeoutHelper = new TimeoutHelper(); this.SecurityContext = null; this.InstanceContext = instanceContext; this.SuccessfullyBoundInstance = false; this.SuccessfullyIncrementedActivity = false; this.SuccessfullyLockedInstance = false; this.switchedThreads = !cleanThread; this.transaction = null; this.InputParameters = null; this.OutputParameters = null; this.ReturnParameter = null; this.isInstanceContextSingleton = InstanceContextProviderBase.IsProviderSingleton(this.Channel.DispatchRuntime.InstanceContextProvider); this.invokeContinueGate = null; if (!operation.IsOneWay && !operation.Parent.ManualAddressing) { this.RequestID = request.Headers.MessageId; this.ReplyToInfo = new RequestReplyCorrelator.ReplyToInfo(request); } else { this.RequestID = null; this.ReplyToInfo = new RequestReplyCorrelator.ReplyToInfo(); } this.HostingProperty = AspNetEnvironment.Current.GetHostingProperty(request, true); if (DiagnosticUtility.ShouldUseActivity) { this.Activity = TraceUtility.ExtractActivity(this.Request); } if (DiagnosticUtility.ShouldUseActivity || TraceUtility.ShouldPropagateActivity) { this.ResponseActivityId = ActivityIdHeader.ExtractActivityId(this.Request); } else { this.ResponseActivityId = Guid.Empty; } this.InvokeNotification = new MessageRpcInvokeNotification(this.Activity, this.channelHandler); if (this.EventTraceActivity == null && FxTrace.Trace.IsEnd2EndActivityTracingEnabled) { if (this.Request != null) { this.EventTraceActivity = EventTraceActivityHelper.TryExtractActivity(this.Request, true); } } }
internal ImmutableDispatchRuntime(DispatchRuntime dispatch) { this.authenticationBehavior = AuthenticationBehavior.TryCreate(dispatch); this.authorizationBehavior = AuthorizationBehavior.TryCreate(dispatch); this.concurrency = new ConcurrencyBehavior(dispatch); this.error = new ErrorBehavior(dispatch.ChannelDispatcher); this.enableFaults = dispatch.EnableFaults; this.inputSessionShutdownHandlers = EmptyArray<IInputSessionShutdown>.ToArray(dispatch.InputSessionShutdownHandlers); this.instance = new InstanceBehavior(dispatch, this); this.isOnServer = dispatch.IsOnServer; this.manualAddressing = dispatch.ManualAddressing; this.messageInspectors = EmptyArray<IDispatchMessageInspector>.ToArray(dispatch.MessageInspectors); this.requestReplyCorrelator = new RequestReplyCorrelator(); this.securityImpersonation = SecurityImpersonationBehavior.CreateIfNecessary(dispatch); this.requireClaimsPrincipalOnOperationContext = dispatch.RequireClaimsPrincipalOnOperationContext; this.impersonateOnSerializingReply = dispatch.ImpersonateOnSerializingReply; this.terminate = TerminatingOperationBehavior.CreateIfNecessary(dispatch); this.thread = new ThreadBehavior(dispatch); this.validateMustUnderstand = dispatch.ValidateMustUnderstand; this.ignoreTransactionFlow = dispatch.IgnoreTransactionMessageProperty; this.transaction = TransactionBehavior.CreateIfNeeded(dispatch); this.receiveContextEnabledChannel = dispatch.ChannelDispatcher.ReceiveContextEnabled; this.sendAsynchronously = dispatch.ChannelDispatcher.SendAsynchronously; this.parameterInspectorCorrelationOffset = (dispatch.MessageInspectors.Count + dispatch.MaxCallContextInitializers); this.correlationCount = this.parameterInspectorCorrelationOffset + dispatch.MaxParameterInspectors; DispatchOperationRuntime unhandled = new DispatchOperationRuntime(dispatch.UnhandledDispatchOperation, this); if (dispatch.OperationSelector == null) { ActionDemuxer demuxer = new ActionDemuxer(); for (int i = 0; i < dispatch.Operations.Count; i++) { DispatchOperation operation = dispatch.Operations[i]; DispatchOperationRuntime operationRuntime = new DispatchOperationRuntime(operation, this); demuxer.Add(operation.Action, operationRuntime); } demuxer.SetUnhandled(unhandled); this.demuxer = demuxer; } else { CustomDemuxer demuxer = new CustomDemuxer(dispatch.OperationSelector); for (int i = 0; i < dispatch.Operations.Count; i++) { DispatchOperation operation = dispatch.Operations[i]; DispatchOperationRuntime operationRuntime = new DispatchOperationRuntime(operation, this); demuxer.Add(operation.Name, operationRuntime); } demuxer.SetUnhandled(unhandled); this.demuxer = demuxer; } this.processMessage1 = new MessageRpcProcessor(this.ProcessMessage1); this.processMessage11 = new MessageRpcProcessor(this.ProcessMessage11); this.processMessage2 = new MessageRpcProcessor(this.ProcessMessage2); this.processMessage3 = new MessageRpcProcessor(this.ProcessMessage3); this.processMessage31 = new MessageRpcProcessor(this.ProcessMessage31); this.processMessage4 = new MessageRpcProcessor(this.ProcessMessage4); this.processMessage41 = new MessageRpcProcessor(this.ProcessMessage41); this.processMessage5 = new MessageRpcProcessor(this.ProcessMessage5); this.processMessage6 = new MessageRpcProcessor(this.ProcessMessage6); this.processMessage7 = new MessageRpcProcessor(this.ProcessMessage7); this.processMessage8 = new MessageRpcProcessor(this.ProcessMessage8); this.processMessage9 = new MessageRpcProcessor(this.ProcessMessage9); this.processMessageCleanup = new MessageRpcProcessor(this.ProcessMessageCleanup); this.processMessageCleanupError = new MessageRpcProcessor(this.ProcessMessageCleanupError); }
internal MessageRpc(RequestContext requestContext, Message request, DispatchOperationRuntime operation, ServiceChannel channel, ServiceHostBase host, ChannelHandler channelHandler, bool cleanThread, OperationContext operationContext, InstanceContext instanceContext /*, EventTraceActivity eventTraceActivity*/) { Fx.Assert((operationContext != null), "correwcf.Dispatcher.MessageRpc.MessageRpc(), operationContext == null"); // TODO: ChannelHandler supplied an ErrorHandler, need to supply this some other way. //Fx.Assert(channelHandler != null, "System.ServiceModel.Dispatcher.MessageRpc.MessageRpc(), channelHandler == null"); //this.Activity = null; //this.EventTraceActivity = eventTraceActivity; AsyncResult = null; TaskResult = null; CanSendReply = true; Channel = channel; this.channelHandler = channelHandler; Correlation = EmptyArray.Allocate(operation.Parent.CorrelationCount); DidDeserializeRequestBody = false; Error = null; ErrorProcessor = null; FaultInfo = new ErrorHandlerFaultInfo(request.Version.Addressing.DefaultFaultAction); HasSecurityContext = false; Host = host; Instance = null; AsyncProcessor = null; NotUnderstoodHeaders = null; Operation = operation; OperationContext = operationContext; paused = false; ParametersDisposed = false; Request = request; RequestContext = requestContext; RequestContextThrewOnReply = false; SuccessfullySendReply = false; RequestVersion = request.Version; Reply = null; ReplyTimeoutHelper = new TimeoutHelper(); SecurityContext = null; InstanceContext = instanceContext; SuccessfullyBoundInstance = false; SuccessfullyIncrementedActivity = false; SuccessfullyLockedInstance = false; switchedThreads = !cleanThread; //this.transaction = null; InputParameters = null; OutputParameters = null; ReturnParameter = null; isInstanceContextSingleton = InstanceContextProviderBase.IsProviderSingleton(Channel.DispatchRuntime.InstanceContextProvider); invokeContinueGate = null; if (!operation.IsOneWay && !operation.Parent.ManualAddressing) { RequestID = request.Headers.MessageId; ReplyToInfo = new RequestReplyCorrelator.ReplyToInfo(request); } else { RequestID = null; ReplyToInfo = new RequestReplyCorrelator.ReplyToInfo(); } //if (DiagnosticUtility.ShouldUseActivity) //{ // this.Activity = TraceUtility.ExtractActivity(this.Request); //} //if (DiagnosticUtility.ShouldUseActivity || TraceUtility.ShouldPropagateActivity) //{ // this.ResponseActivityId = ActivityIdHeader.ExtractActivityId(this.Request); //} //else //{ ResponseActivityId = Guid.Empty; //} //if (this.EventTraceActivity == null && FxTrace.Trace.IsEnd2EndActivityTracingEnabled) //{ // if (this.Request != null) // { // this.EventTraceActivity = EventTraceActivityHelper.TryExtractActivity(this.Request, true); // } //} }