void IInputSessionShutdown.ChannelFaulted(IDuplexContextChannel channel) { RoutingChannelExtension channelExtension = channel.Extensions.Find <RoutingChannelExtension>(); if (channelExtension != null) { channelExtension.Fault(new CommunicationObjectFaultedException()); } else { RoutingUtilities.Abort(channel, channel.LocalAddress); } }
public ProcessMessagesAsyncResult(Message message, RoutingService service, TimeSpan timeout, AsyncCallback callback, object state) : base(callback, state) { this.service = service; this.channelExtension = service.ChannelExtension; this.timeoutHelper = new TimeoutHelper(timeout); this.timeoutHelper.RemainingTime(); //Start the timer if (message == null) { //Null message means end of session, time to close everything this.closeOutboundChannels = true; this.state = ProcessingState.ClosingChannels; } else { this.closeOutboundChannels = false; MessageRpc messageRpc = new MessageRpc(message, OperationContext.Current, this.channelExtension.ImpersonationRequired); if (TD.RoutingServiceProcessingMessageIsEnabled()) { TD.RoutingServiceProcessingMessage(messageRpc.EventTraceActivity, messageRpc.UniqueID, messageRpc.Message.Headers.Action, messageRpc.OperationContext.EndpointDispatcher.EndpointAddress.Uri.ToString(), (messageRpc.Transaction != null).ToString()); } EndpointNameMessageFilter.Set(messageRpc.Message.Properties, this.channelExtension.EndpointName); messageRpc.RouteToEndpoints <TContract>(this.service.RoutingConfig); this.service.SessionMessages.Add(messageRpc); this.sessionMessageIndex = this.service.SessionMessages.Count - 1; if (this.sessionMessageIndex == 0) { //First message, do initialization stuff this.state = ProcessingState.Initial; } else { this.state = ProcessingState.SendingSessionMessages; } } this.ProcessWhileSync(); }
static void ShutdownCallback(IAsyncResult result) { if (result.CompletedSynchronously) { return; } RoutingChannelExtension thisPtr = (RoutingChannelExtension)result.AsyncState; try { thisPtr.ShutdownComplete(result); } catch (Exception exception) { if (Fx.IsFatal(exception)) { throw; } thisPtr.Fault(exception); } }
void IInputSessionShutdown.DoneReceiving(IDuplexContextChannel channel) { RoutingChannelExtension channelExtension = channel.Extensions.Find <RoutingChannelExtension>(); channelExtension.DoneReceiving(this.Endpoint.Binding.CloseTimeout); }
void IChannelInitializer.Initialize(IClientChannel channel) { RoutingChannelExtension channelState = RoutingChannelExtension.Create(this); channel.Extensions.Add(channelState); }