我有一个BizTalk自定义管道组件,在这里我使用itexsharp解析一个PDF附件到一个自定义模型中。管道绑定到POP3接收端口。
在新创建的消息中,如果我返回附件流(outputMessage.GetPart("Body").Data = ms),那么在BizTalk管理控制台中这看起来很好。我已经能够从这里手动保存消息,并且使用与管道中相同的解析方法正确地解析了消息。
当直接在管道中解析PDF时,我得到以下错误:重建失败:未找到预告片;原始消息: xref分段未在文件指针1620729处找到
如果我从管道中删除默认的XMLDisassembler组件,那么解析错误就消失了,但是在控制台中消息体是空的,尽管AttachmentSizeInBytes=1788是空的。
public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)
{
return ExtractMessagePartToMessage(pContext, pInMsg);
}
private IBaseMessage ExtractMessagePartToMessage(IPipelineContext pContext, IBaseMessage pInMsg)
{
if (pInMsg.PartCount <= 1)
{
throw new InvalidOperationException("The email had no attachment, apparently.");
}
string partName;
IBaseMessagePart attachmentPart = pInMsg.GetPartByIndex(1, out partName);
Stream attachmentPartStream = attachmentPart.GetOriginalDataStream();
IBaseMessage outputMessage;
outputMessage = pContext.GetMessageFactory().CreateMessage();
outputMessage.AddPart("Body", pContext.GetMessageFactory().CreateMessagePart(), true);
outputMessage.Context = pInMsg.Context;
var ms = new MemoryStream();
attachmentPartStream.CopyTo(ms);
ms.Seek(0L, SeekOrigin.Begin);
Stream orderStream = PdfFormParser.Parse(ms);
outputMessage.GetPart("Body").Data = orderStream;
outputMessage.Context.Write("AttachmentName", "http://schemas.microsoft.com/BizTalk/2003/file-properties", partName);
outputMessage.Context.Write("AttachmentSizeInBytes", "http://schemas.microsoft.com/BizTalk/2003/file-properties", orderStream.Length.ToString());
pContext.ResourceTracker.AddResource(ms);
pContext.ResourceTracker.AddResource(orderStream);
return outputMessage;
}
public static Stream Parse(Stream pdfDocument)
{
using (var reader = new PdfReader(pdfDocument))
{
var outputStream = new MemoryStream();
var pdfForm = ParseInternal(reader);
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(pdfForm.Serialize());
xmlDocument.Save(outputStream);
return outputStream;
}发布于 2017-07-19 22:34:55
在管道中,当您读取或写入一个流时,如果要使用它(特别是您希望BizTalk处理的最后消息),您必须将流回原点。
https://stackoverflow.com/questions/45170460
复制相似问题