static void AssignMsmqNativeCorrelationId(OutgoingMessage message, Message result)
{
string correlationIdHeader;
if (!message.Headers.TryGetValue(Headers.CorrelationId, out correlationIdHeader))
{
return;
}
if (string.IsNullOrEmpty(correlationIdHeader))
{
return;
}
Guid correlationId;
if (Guid.TryParse(correlationIdHeader, out correlationId))
{
//msmq required the id's to be in the {guid}\{incrementing number} format so we need to fake a \0 at the end to make it compatible
result.CorrelationId = $"{correlationIdHeader}\\0";
return;
}
try
{
if (correlationIdHeader.Contains("\\"))
{
var parts = correlationIdHeader.Split('\\');
int number;
if (parts.Length == 2 && Guid.TryParse(parts.First(), out correlationId) &&
int.TryParse(parts[1], out number))
{
result.CorrelationId = correlationIdHeader;
}
}
}
catch (Exception ex)
{
Logger.Warn($"Failed to assign a native correlation id for message: {message.MessageId}", ex);
}
}