BizTalk Часть сообщения «‹MessageName›» содержит нулевые байты данных.

Я получаю эту ошибку в форме назначения сообщения в моей оркестровке. В этой форме назначения я пытаюсь выполнить запрос XPath для извлечения строки в кодировке base64 из сообщения, полученного WCF. Затем я пытаюсь загрузить переменную XmlDocument с помощью Stream, созданного написанным мной вспомогательным классом. Строка base64 будет содержимым файла PDF или Excel (примечание: это не XML). Я читал, что это можно сделать.

Вот выражение, используемое в моем назначении сообщения:

messageCreator = new IAS.Integration.Services.Helpers.MessageCreator();
System.Diagnostics.EventLog.WriteEntry("IAS.Integration.Services.Orchestration", "MessageCreator Object created");

base64 = xpath(PerformTransformationResponse, "string(/*[local-name()='PerformTransformationResponseWrapper' and namespace-uri()='http://www.iasreo.com/integration/servicetypes']/*[local-name()='TransformedPayload'])");
//System.Diagnostics.EventLog.WriteEntry("IAS.Integration.Services.Orchestration", System.String.Format("Base64 from xpath: {0}", base64));

Output = new System.Xml.XmlDocument();
System.Diagnostics.EventLog.WriteEntry("IAS.Integration.Services.Orchestration", "Output instantiated as XmlDocument");

messageCreator.CreateMyMessage(Output, base64);
System.Diagnostics.EventLog.WriteEntry("IAS.Integration.Services.Orchestration", "messageCreator.CreateMyMessage(Output, base64)");

Вот вспомогательные классы, которые я написал для поддержки этого выражения:

[Serializable]
public class MessageCreator
{
    public void CreateMyMessage(XLANGMessage outMessage, string binaryStringMessage)
    {
        outMessage[0].LoadFrom(new StreamFactory(binaryStringMessage));
    }
}

[Serializable]
public class StreamFactory : IStreamFactory
{
    private string messageContent;

    public StreamFactory(string inMessageContent)
    {
        messageContent = inMessageContent;
    }

    public Stream CreateStream()
    {
        byte[] messageBytes = Convert.FromBase64String(messageContent);

        return new MemoryStream(messageBytes, 0, messageBytes.Length, true, true);
    }
}

Наконец, это ошибка, которую я получаю в средстве просмотра событий:

Запись журнала событий механизма xlang / s: Неперехваченное исключение (см. «внутреннее исключение» ниже) приостановило экземпляр службы «IAS.Integration.Services.Orchestrations.MainOrchestration (fcad6d68-ce54-bfa2-d035-56608b99ef52)». Экземпляр службы будет приостановлен до тех пор, пока не будет возобновлен или остановлен в административном порядке. При возобновлении экземпляр продолжит работу из своего последнего сохраненного состояния и может повторно вызвать то же непредвиденное исключение. InstanceId: c398fd2a-b654-4981-be13-94146d640375 Имя формы: Send_StreamedDocument ShapeId: bc7a463b-eed2-4222-b2f7-3fdb1e44a3c5 Исключение, выброшенное из: сегмент 1, ход выполнения Выход 25 Внутреннее нулевое сообщение: «часть '' часть сообщения содержит байты данных.

Тип исключения: EmptyPartException Источник: Microsoft.XLANGs.Engine Целевой сайт: System.IO.Stream Persist (System.String ByRef, Boolean) Ниже приведена трассировка стека, которая определяет место возникновения исключения в Microsoft.XLANGs.Core.Part .Persist (String & encoding, Boolean wantEncoding) в Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.StagePartData (часть часть) в Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.PrepareMessage (XLANGMessage msg) в Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.PrepareMessage (XLANGMessage msg). BizTalk.XLANGs.BTXEngine.BTXXlangStore.WriteMessageState (IBTPEPInfoLookup pepLookup, Guid portId, XLANGMessage msg, сегментный сегмент, String opname, String url, IList promoProps, Boolean track, IList toPromoteBromoteXLine. XLANGMessage msg, XlangStore store, Segment seg, OperationInfo op, IList additionalProps, IList toPromote, Boolean ignoreRoutingFailure) в Microsoft.BizTalk.XLANGs.BTXEng ine.BTXPortBase.SendMessage (Int32 iOperation, XLANGMessage msg, Correlation [] initCorrelations, Correlation [] followCorrelations, Context cxt, Segment seg, ActivityFlags flags) в IAS.Integration.Services.Orchestrations.MainOrchestration.segment. XLANGs.Core.SegmentScheduler.RunASegment (сегменты, StopConditions stopCond, Exception & exp) **


person dustyhoppe    schedule 29.02.2012    source источник


Ответы (1)


Я вижу, что это происходит, когда вы сериализуете сообщение как часть постоянного состояния непосредственно перед его отправкой. «Имя формы: Send_StreamedDocument»

Ваше сообщение OutPut определяется как простое сообщение или составное сообщение?

Вы пробовали сделать сообщение OutPut строкой вместо XMLDocument?

Изменить: на самом деле XMLDocument сам по себе не сериализуем. Я этого не знал - думаю, мне всегда удавалось вводить свои сообщения в какую-то схему, прежде чем отправлять их.
См. Здесь: http://talentedmonkeys.wordpress.com/2010/02/15/xmldocument-serialization-in-biztalk-2009-not/ И здесь: http://extremelytalentedmonkeys.blogspot.com/2009/12/xmldocument-serialization-not.html

Вы можете обернуть свое назначение сообщения и отправить форму в атомарной транзакции, чтобы избежать попыток сохранить что-то, что не сериализуемо. Или вы могли бы использовать что-то еще, кроме XMLDocument?

person LarsWA    schedule 09.03.2012