/// <summary> /// Handle the message. /// </summary> /// <param name="session"></param> /// <param name="brokeredMessage"></param> /// <param name="receiver"></param> /// <param name="handlerMap"></param> /// <returns></returns> private async Task OnHandleMessage(IMessageReceiver receiver, MessageSession session, BrokeredMessage brokeredMessage, MessageHandlerMap handlerMap) { MessagingEventSource.Log.MessageReceived(brokeredMessage.ContentType, receiver, brokeredMessage.MessageId, brokeredMessage.CorrelationId, brokeredMessage.SessionId); // Create new isolated scope. using (var scope = Configuration.Container.BeginScope()) { var envelope = await BuildMessage(brokeredMessage); // Dispatch the message. var dispatcher = new MessageDispatcher(scope, handlerMap); await dispatcher.Dispatch(brokeredMessage.ContentType, envelope, session != null ? new Session(session, Configuration.Serializer) : null); // Cleanup the message. var messageReceiver = receiver as IMessagePump; if (messageReceiver != null && messageReceiver.Mode == ReceiveMode.PeekLock) { // Log. MessagingEventSource.Log.MessageCompleting(brokeredMessage.ContentType, brokeredMessage.MessageId, brokeredMessage.CorrelationId, brokeredMessage.SessionId); // Complete the message. brokeredMessage.TryComplete(); return; } // Cleanup the message. var sessionMessageReceiver = receiver as ISessionMessagePump; if (sessionMessageReceiver != null && sessionMessageReceiver.Mode == ReceiveMode.PeekLock) { // Log. MessagingEventSource.Log.MessageCompleting(brokeredMessage.ContentType, brokeredMessage.MessageId, brokeredMessage.CorrelationId, brokeredMessage.SessionId); // Complete the message. brokeredMessage.TryComplete(); } } }