private void TryHandleMessageInner(MessageQueueTransaction transaction, Message message) { IncomingTransportMessage transportMessage = null; try { transportMessage = TryConvertTransportMessage(message); if (!transportMessage.Headers.ContainsKey(StandardHeaders.OriginatingAddress)) { transportMessage.Headers[StandardHeaders.OriginatingAddress] = message.ResponseQueue.QueueName; } Exception lastException = null; if (faultManager.MaxRetriesExceeded(transportMessage, out lastException)) { logger.Debug("MaxRetriesExceeded: Moving message {0} from queue {1} to poison message table.", message.Id, localQueue.QueueName); MoveToPoisonMessage(transaction, message, transportMessage, lastException, "MaxRetriesExceeded", MaxRetries); return; // return without error to commit transaction } logger.Debug("Notifying observers of new TransportMessage for message {0} from queue {1}.", message.Id, localQueue.QueueName); if (this.MessageAvailable != null) { this.MessageAvailable(this, new MessageAvailable(transportMessage)); } } catch (CannotDeserializeMessageException e) { // If we can't deserialize the transport message or inner message, there is no reason to retry. // note: error is already logged so we don't need to log here logger.Debug("DeserializeError: Moving message {0} from queue {1} to poison message table.", message.Id, localQueue.QueueName); MoveToPoisonMessage(transaction, message, transportMessage, e, "DeserializeError", 0); return; // return without error to commit transaction } }
private void TryHandleMessageInner(SqlTransaction transaction, ServiceBrokerMessage message) { // Only handle transport messages if (message.MessageTypeName != ServiceBrokerMessageType && !message.IsDialogTimerMessage()) { logger.Debug("Ignoring message of type {0} from queue {1}", message.MessageTypeName, ServiceBrokerQueue); return; // ignore } IncomingTransportMessage transportMessage = null; try { if (message.IsDialogTimerMessage()) { transportMessage = TryLoadDialogTimerTimeoutMessage(transaction, message); } else { transportMessage = TryDeserializeTransportMessage(message); } if (!transportMessage.Headers.ContainsKey(StandardHeaders.OriginatingAddress)) { transportMessage.Headers[StandardHeaders.OriginatingAddress] = ServiceBrokerWrapper.TryGetConversationFarService(transaction, message.ConversationHandle); } Exception lastException = null; if (faultManager.MaxRetriesExceeded(transportMessage, out lastException)) { logger.Debug("MaxRetriesExceeded: Moving message {0} from queue {1} to poison message table.", message.ConversationHandle.ToString(), ServiceBrokerQueue); MoveToPoisonMessage(transaction, message, transportMessage, lastException, "MaxRetriesExceeded", MaxRetries); return; // return without error to commit transaction } logger.Debug("Notifying observers of new TransportMessage for message {0} from queue {1}.", message.ConversationHandle, ServiceBrokerQueue); if (this.MessageAvailable != null) { this.MessageAvailable(this, new MessageAvailable(transportMessage)); } } catch (CannotDeserializeMessageException e) { // If we can't deserialize the transport message or inner message, there is no reason to retry. // note: error is already logged so we don't need to log here logger.Debug("DeserializeError: Moving message {0} from queue {1} to poison message table.", message.ConversationHandle.ToString(), ServiceBrokerQueue); MoveToPoisonMessage(transaction, message, transportMessage, e, "DeserializeError", 0); return; // return without error to commit transaction } }