Helper method to extract a specific string from long message private string ExtractExceptionMesssage(string exceptionMessage)
{
    const string startWord = "Message&amp;gt";
    int startWordLength = startWord.Length;
    const string endWord = "/Message&amp;gt";
    var length = exceptionMessage.Length;
    int index = 0;
    var sb = new StringBuilder();

    while (index &lt; length)
    {
        var startIndex = exceptionMessage.IndexOf(startWord, index, StringComparison.Ordinal);
        if (startIndex &lt; 0)
            break;
        var endIndex = exceptionMessage.IndexOf(endWord, startIndex, StringComparison.Ordinal);
        if (endIndex &lt; 0)
        {
            break;
        }
        var len = endIndex - 4 - (startIndex + startWord.Length); // -4 is ".&amp;lt"
        sb.AppendLine(exceptionMessage.Substring(startIndex + startWordLength, len));
        index = endIndex + endWord.Length + 1;
    }

    if (sb.Length == 0) sb.Append("Unknown error");
    return sb.ToString();
}


I'll appreciate any idea of how to make it better
Consistent style
You kind of mixing your styles with curly braces - your indentation is inconsistent, and for two duplicate ifs with single statement you once omit the braces, and on the other not. Choose a style, and stick to it - it will make your code more readable

Magic numbers
You made a curious choice to omit the "&amp;lt;" from you start and end indicators, which made you add the mysterious - 4 to your len calculation. This is a major maintenance issue, since tomorrow you will want to extract with unescaped text, where the "&amp;lt;" will be reduced to "&lt;", and your code will stop working...

Use the powers of the tools at hand
Your solution could be much simpler if you used Regex to solve it:

private string ExtractExceptionMesssage(string exceptionMessage) {
    string pattern = @"&amp;lt;Message&amp;gt;(.+?)lt;/Message&amp;gt;";
    Regex rgx = new Regex(pattern);
    var sb = new StringBuilder();
    MatchCollection matches = rgx.Matches(input);
    if (matches.Count &gt; 0) {
       foreach (Match match in matches) {
         sb.AppendLine(match.Value);
       }
    } else {
       return "Unknown error";
    }
    return sb.ToString();
}