Я получаю эту ошибку в форме Назначения сообщений в моей оркестровке. В этой форме назначения я пытаюсь выполнить запрос XPath для извлечения закодированной строки base64 из сообщения, полученного WCF. Затем я пытаюсь загрузить переменную XmlDocument потоком, сгенерированным вспомогательным классом, который я написал. Строка 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)» ,
Экземпляр службы будет приостановлен до административного возобновления или прекращения.
Если возобновить, экземпляр продолжит свое последнее сохраненное состояние и может повторно выдать то же неожиданное исключение.
Идентификатор экземпляра: c398fd2a-b654-4981-be13-94146d640375
Имя формы: Send_StreamedDocument
ShapeId: bc7a463b-eed2-4222-b2f7-3fdb1e44a3c5
Исключение: сегмент 1, прогресс 25
Внутреннее исключение: часть 'part' сообщения 'Output' содержит ноль байтов данных.
Тип исключения: 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, IList promoProps, IList toPromote)
в Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.WriteMessageState (IBTPEPInfoLookup pepLookup, идентификатор порта Guid, XLANGMessage msg, сегмент Seg, имя строки, URL-адрес строки, продвижение IList, логическая дорожка, IList toPromote)
в Microsoft.BizTalk.XLANGs.BTXEngine.BTXLogicalPortBinding.SendMessage (XLANGMessage msg, хранилище XlangStore, сегмент Seg, OperationInfo op, дополнительные предложения IList, IList toPromote, Boolean ignoreRoutingFailure)
в Microsoft.BizTalk.XLANGs.BTXEngine.BTXPortBase.SendMessage (Int32 iOperation, XLANGMessage msg, Correlation [] initCorrelations, Correlation [] followCorrelations, контекст cxt, сегмент seg, флаги ActivityFlags)
в IAS.Integration.Services.Orchestrations.MainOrchestration.segment1 (StopConditions stopOn)
в Microsoft.XLANGs.Core.SegmentScheduler.RunASegment (Сегменты s, StopConditions stopCond, Exception & exp) **