none
SMTP Fehler (Uncaught exception nner exception: Multi-part message 'FailedMessage' has body part 'EmailBody', expected body part 'FailedMessage')

    Frage

  • Hallo,

    ich benutze als Send Port einen statischen SMTP-Adapter. Ist dieser nicht korrekt konfiguriert bzw. ist der MailServer nicht erreichbar, wird die Nachricht auf "Suspended (resumable) gesetzt und läuft  nach Abarbeitung der Retry-Counts die Instanz auf folgenden Fehler:

    • Uncaught exception (see the 'inner exception' below) has suspended an instance of service 'ACORD_Messages.HandlingValidationErrors(c4c8b436-98bb-6df9-764d-8c39d0abf2f2)'.
      The service instance will remain suspended until administratively resumed or terminated.
      If resumed the instance will continue from its last persisted state and may re-throw the same unexpected exception.
      InstanceId: 88e8aa4d-4051-4e9b-a57c-740b79925e72
      Shape name: Receive_Validation_Message
      ShapeId: 9c02ffe2-827d-47cf-87bc-758f471e876f
      Exception thrown from: segment 1, progress 3
      Inner exception: Multi-part message 'FailedMessage' has body part 'EmailBody', expected body part 'FailedMessage'.

    Der Mail Versand klappt ansonsten einwandfrei.

    Zu den technischen Details:

    Ich baue die Mail in einer Orchestration zusammen. Hierzu benutze ich folgenden Source-Code:

    •  msgbody = new System.Text.StringBuilder();

      msgbody.AppendLine("<html><body style=\"font-family:Helvetica,Arial,sans-serif; font-size:x-small;\">");

      msgbody.AppendLine("<h2 style=\"background-color:#bfdae4;\">The attached document failed on processing in BizTalk Server.</h2>");

      msgbody.AppendLine("<p><b>Error Description: </b><br><i>" + FailedMessage(ErrorReport.Description) + "</i></p>");

      msgbody.AppendLine("<hr noshade size=\"2\" align=\"left\">");

      msgbody.AppendLine("<p><b>Error Type: </b><br><i>" + FailedMessage(ErrorReport.ErrorType) + "</i></p>");

      msgbody.AppendLine("<hr noshade size=\"2\" align=\"left\">");

      msgbody.AppendLine("<p><b>Failure Category: </b><br><i>" + System.Convert.ToString(FailedMessage(ErrorReport.FailureCategory)) + "</i></p>");

      msgbody.AppendLine("<hr noshade size=\"2\" align=\"left\">");

      msgbody.AppendLine("<p><b>Failure Code: </b><br><i>" + FailedMessage(ErrorReport.FailureCode) + "</i></p>");

      msgbody.AppendLine("<hr noshade size=\"2\" align=\"left\">");

      msgbody.AppendLine("<p><b>Failure Adapter: </b><br><i>" + FailedMessage(ErrorReport.FailureAdapter) + "</i></p>");

      msgbody.AppendLine("<hr noshade size=\"2\" align=\"left\">");

      msgbody.AppendLine(lv_port_name_string);

      msgbody.AppendLine("<hr noshade size=\"2\" align=\"left\">");

      msgbody.AppendLine(lv_transport_location_string);

      msgbody.AppendLine("</body></html>");

      Email.EmailBody = new Microsoft.Samples.BizTalk.XlangCustomFormatters.RawString(msgbody.ToString());

      Email.EmailBody(Microsoft.XLANGs.BaseTypes.ContentType) = "text/html";

      Email.FailedMessage = FailedMessage;

      Email.FailedMessage(MIME.FileName) = "ACORD-Message.xml";

      Email(MIME.IsMultipartRelated) = true;

      Email(SMTP.MessagePartsAttachments) = 2;

      Email(SMTP.Subject) = "Failed error message notification";

      Email(SMTP.EmailBodyFileCharset) = "UTF-8";

    Email ist hierbei die Nachricht, welche eine Multi-part Nachricht enthält.

    Beim EmailBody ist der Message Body Part = True.
    Bei der FailedMessage ist der Message Body Part = False.

    Ich würde gerne die EMail-Nachricht nach auftreten des obigen Fehlers wieder neustarten. Hierzu möchte ich die "Suspended (resumable) Nachricht neuanstarten. Wenn ich dies tue, läuft der BizTalk auf den gleichen Fehler.

    Was muss hier eingestellt werden, damit dies funktioniert?

    Kann mir bitte hier jemand helfen?

    Vielen Dank.

    Gruß

    ma76ba

    Montag, 20. Februar 2012 14:03

Antworten

  • Hallo Herr Fischer,

    Es lag an der Aktivierung der Flags "Routing for Failed Messages". Ich habe jetzt dieses Flag im SMTP-SendPort deaktiviert, nun funktioniert es.

    Vielen Dank für Ihre Hilfe.

    Gruß

    ma76ba


    • Als Antwort markiert ma76ba Dienstag, 28. Februar 2012 09:18
    • Bearbeitet ma76ba Dienstag, 28. Februar 2012 09:19
    Dienstag, 28. Februar 2012 09:18

Alle Antworten

  • Hallo,
     
    Wenn ich das richtig verstehe soll ein Custom Error Handling implementiert werden – d. h. auf dem SendPort ist “Routing for Failed Messages” aktiviert und es soll eine Orchestration auf die suspendierten Nachrichten hören – richtig?
     
    Die Fehlernachricht weist darauf hin, dass die Nachrichtenstruktur nicht übereinstimmt; der MessageType innerhalb des Bodies stimmt nicht überein. Ggf. würde ich vorschlagen, als MessageType einfach eine XmlDocument Nachricht zu verwenden, da damit keine Aussage über den Nachrichtentyp getroffen wird (geht auch für nicht-XML Daten).
     
    Grüße
     
    Jörg Fischer
     
    "ma76ba" schrieb im Newsbeitrag news:16be705b-38e7-4b76-a88f-ae31f68f3161...

    Hallo,

    ich benutze als Send Port einen statischen SMTP-Adapter. Ist dieser nicht korrekt konfiguriert bzw. ist der MailServer nicht erreichbar, wird die Nachricht auf "Suspended (resumable) gesetzt und läuft  nach Abarbeitung der Retry-Counts die Instanz auf folgenden Fehler:

    • Uncaught exception (see the 'inner exception' below) has suspended an instance of service 'ACORD_Messages.HandlingValidationErrors(c4c8b436-98bb-6df9-764d-8c39d0abf2f2)'.
      The service instance will remain suspended until administratively resumed or terminated.
      If resumed the instance will continue from its last persisted state and may re-throw the same unexpected exception.
      InstanceId: 88e8aa4d-4051-4e9b-a57c-740b79925e72
      Shape name: Receive_Validation_Message
      ShapeId: 9c02ffe2-827d-47cf-87bc-758f471e876f
      Exception thrown from: segment 1, progress 3
      Inner exception: Multi-part message 'FailedMessage' has body part 'EmailBody', expected body part 'FailedMessage'.

    Der Mail Versand klappt ansonsten einwandfrei.

    Zu den technischen Details:

    Ich baue die Mail in einer Orchestration zusammen. Hierzu benutze ich folgenden Source-Code:

    • msgbody = new System.Text.StringBuilder();

      msgbody.AppendLine("<html><body style=\"font-family:Helvetica,Arial,sans-serif; font-size:x-small;\">");

      msgbody.AppendLine("<h2 style=\"background-color:#bfdae4;\">The attached document failed on processing in BizTalk Server.</h2>");

      msgbody.AppendLine("<p><b>Error Description: </b><br><i>" + FailedMessage(ErrorReport.Description) + "</i></p>");

      msgbody.AppendLine("<hr noshade size=\"2\" align=\"left\">");

      msgbody.AppendLine("<p><b>Error Type: </b><br><i>" + FailedMessage(ErrorReport.ErrorType) + "</i></p>");

      msgbody.AppendLine("<hr noshade size=\"2\" align=\"left\">");

      msgbody.AppendLine("<p><b>Failure Category: </b><br><i>" + System.Convert.ToString(FailedMessage(ErrorReport.FailureCategory)) + "</i></p>");

      msgbody.AppendLine("<hr noshade size=\"2\" align=\"left\">");

      msgbody.AppendLine("<p><b>Failure Code: </b><br><i>" + FailedMessage(ErrorReport.FailureCode) + "</i></p>");

      msgbody.AppendLine("<hr noshade size=\"2\" align=\"left\">");

      msgbody.AppendLine("<p><b>Failure Adapter: </b><br><i>" + FailedMessage(ErrorReport.FailureAdapter) + "</i></p>");

      msgbody.AppendLine("<hr noshade size=\"2\" align=\"left\">");

      msgbody.AppendLine(lv_port_name_string);

      msgbody.AppendLine("<hr noshade size=\"2\" align=\"left\">");

      msgbody.AppendLine(lv_transport_location_string);

      msgbody.AppendLine("</body></html>");

      Email.EmailBody = new Microsoft.Samples.BizTalk.XlangCustomFormatters.RawString(msgbody.ToString());

      Email.EmailBody(Microsoft.XLANGs.BaseTypes.ContentType) = "text/html";

      Email.FailedMessage = FailedMessage;

      Email.FailedMessage(MIME.FileName) = "ACORD-Message.xml";

      Email(MIME.IsMultipartRelated) = true;

      Email(SMTP.MessagePartsAttachments) = 2;

      Email(SMTP.Subject) = "Failed error message notification";

      Email(SMTP.EmailBodyFileCharset) = "UTF-8";

    Email ist hierbei die Nachricht, welche eine Multi-part Nachricht enthält.

    Beim EmailBody ist der Message Body Part = True.
    Bei der FailedMessage ist der Message Body Part = False.

    Ich würde gerne die EMail-Nachricht nach auftreten des obigen Fehlers wieder neustarten. Hierzu möchte ich die "Suspended (resumable) Nachricht neuanstarten. Wenn ich dies tue, läuft der BizTalk auf den gleichen Fehler.

    Was muss hier eingestellt werden, damit dies funktioniert?

    Kann mir bitte hier jemand helfen?

    Vielen Dank.

    Gruß

    ma76ba


    Jörg Fischer
    Donnerstag, 23. Februar 2012 15:19
    Moderator
  • Hallo Herr Fischer,

    vielen Dank für ihre Antwort.

    Zu unserem Szenario:

    Der Mailversand wird angetriggert, sobald in spezifischen ReceivePorts bzw. SendPorts Fehler bzw. Warnungen auftreten. Bei diesen Ports ist “Routing for Failed Messages” aktiviert.

    Für den Mail-Versand benutze ich einen separaten SMTP-SendPort. Wie bereits oben geschrieben, dieses Szenario funktioniert einwandfrei. Es funktioniert auch noch, wenn innerhalb der Retry-Versuche der SMTP-Server wieder erreichbar ist.

    Falls aber der im SMTP-SendPort hinterlegte Server nicht erreichbar ist und alle Retry-Versuche erfolglos waren, tritt der oben genannte Fehler auf.

    Wir benutzen folgende Messagetypen:

    Email ist hierbei die Nachricht, welche auf einen Multi-part Type referenziert.

    Der Multi-Part-Typ enthält folgende Komponenten

    1. EmailBody = Microsoft.Samples.BizTalk.XlangCustomFormatters.RawString (Text der EMail)

    2. FailedMessage = System.Xml.XmlDocument (Anhang im EMail)

    Kann man den EmailBody in System.Xml.XmlDocument abändern? Wird dann nicht der EMail Body als XML dargestellt? Die Nachricht soll als gewöhnlich EMail verschickt werden.

    Gruß

    ma76ba

    Donnerstag, 23. Februar 2012 16:14
  • Hallo,
     
    Hier gibt es m. E. nach eine Rückkopplung vom SMTP SendPort auf Ihre Fehlerbehandlungs-Orchestration – haben Sie auf dem SMTP SendPort auch “Routing for Failed Messages” aktiviert?
     
    Wollen Sie dort ein Custom Error Handling implementieren? Ggf. müssen Sie den Filter für die ORchestration ändern oder eben auf XmlDocument ausweichen. Letzeres heisst dann für die ORchestration, dass Sie jede Art von Dokument übernimmt, gleich ob es XML oder sonst was ist.
     
    Danke, Grüße
     
    Jörg Fischer
     
    "ma76ba" schrieb im Newsbeitrag news:f69bd649-3d00-4fac-ba96-d104a89bb3cf...

    Hallo Herr Fischer,

    vielen Dank für ihre Antwort.

    Zu unserem Szenario:

    Der Mailversand wird angetriggert, sobald in spezifischen ReceivePorts bzw. SendPorts Fehler bzw. Warnungen auftreten. Bei diesen Ports ist “Routing for Failed Messages” aktiviert.

    Für den Mail-Versand benutze ich einen separaten SMTP-SendPort. Wie bereits oben geschrieben, dieses Szenario funktioniert einwandfrei. Es funktioniert auch noch, wenn innerhalb der Retry-Versuche der SMTP-Server wieder erreichbar ist.

    Falls aber der im SMTP-SendPort hinterlegte Server nicht erreichbar ist und alle Retry-Versuche erfolglos waren, tritt der oben genannte Fehler auf.

    Wir benutzen folgende Messagetypen:

    Email ist hierbei die Nachricht, welche auf einen Multi-part Type referenziert.

    Der Multi-Part-Typ enthält folgende Komponenten

    1. EmailBody = Microsoft.Samples.BizTalk.XlangCustomFormatters.RawString (Text der EMail)

    2. FailedMessage = System.Xml.XmlDocument (Anhang im EMail)

    Kann man den EmailBody in System.Xml.XmlDocument abändern? Wird dann nicht der EMail Body als XML dargestellt? Die Nachricht soll als gewöhnlich EMail verschickt werden.

    Gruß

    ma76ba


    Jörg Fischer
    Freitag, 24. Februar 2012 10:22
    Moderator
  • Hallo Herr Fischer,

    Es lag an der Aktivierung der Flags "Routing for Failed Messages". Ich habe jetzt dieses Flag im SMTP-SendPort deaktiviert, nun funktioniert es.

    Vielen Dank für Ihre Hilfe.

    Gruß

    ma76ba


    • Als Antwort markiert ma76ba Dienstag, 28. Februar 2012 09:18
    • Bearbeitet ma76ba Dienstag, 28. Februar 2012 09:19
    Dienstag, 28. Februar 2012 09:18