protected override void MessageReceived(Message message, Action dequeuedCallback) { RelayViaHeader relayViaHeader = RelayViaHeader.ReadHeader(message); message = this.messageWrapper.UnwrapMessage(message); if (relayViaHeader != null) { message.Properties.Via = relayViaHeader.Via; } RelayedOnewayChannelListener[] relayedOnewayChannelListenerArray = this.listener.Lookup(message.Properties.Via); if (relayedOnewayChannelListenerArray == null) { MessagingClientEtwProvider.Provider.RelayListenerFailedToDispatchMessage(base.Activity, base.Uri.AbsoluteUri, message.Properties.Via.AbsoluteUri); message.Close(); dequeuedCallback(); return; } if ((int)relayedOnewayChannelListenerArray.Length == 1) { relayedOnewayChannelListenerArray[0].EnqueueAndDispatch(message, dequeuedCallback); return; } Action action = dequeuedCallback; MessageBuffer messageBuffer = message.CreateBufferedCopy(65536); for (int i = 0; i < (int)relayedOnewayChannelListenerArray.Length; i++) { relayedOnewayChannelListenerArray[i].EnqueueAndDispatch(messageBuffer.CreateMessage(), action); action = null; } }
public static RelayViaHeader ReadHeader(Message message) { return(RelayViaHeader.ReadHeader(message.Headers)); }