我目前正在开发一个接受 xml 文件并将其转换为 Excel 的 BizTalk 自定义发送管道。不幸的是,在部署管道后,我收到了一个System.OutOfMemoryException
. IComponent
我已经包含了接口执行方法的代码。欢迎所有建议。
public Microsoft.BizTalk.Message.Interop.IBaseMessage Execute(IPipelineContext pContext, Microsoft.BizTalk.Message.Interop.IBaseMessage inmsg)
{
MemoryStream outMemStream = new MemoryStream();
try
{
if (inmsg.BodyPart.Data != null)
{
// Read the source message coming from the messaging engine and convert it to memory stream
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = inmsg.BodyPart.Data.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
buffer = ms.ToArray();
}
if (buffer != null)
{
var binaryWriter = new BinaryWriter(outMemStream);
binaryWriter.Write(buffer);
}
OpenXMLOffice oOffice = new OpenXMLOffice();
outMemStream.Position = 0;
oOffice.XMLToExcel(outMemStream, TemporaryFileLocation);
inmsg.BodyPart.Data.Position = 0;
inmsg.BodyPart.Data = outMemStream;
pContext.ResourceTracker.AddResource(outMemStream);
}
return inmsg;
}
catch (Exception ex)
{
throw new ApplicationException(String.Format("Error converting XML to Excel:{0} - Stack Trace: {1}", ex.Message, ex.StackTrace));
}
}
这是最近收到的错误:
日志名称:应用程序 来源:BizTalk 服务器 日期:2012 年 2 月 14 日上午 9:29:00 事件编号:5754 任务类别:BizTalk Server 级别:错误 关键词:经典 用户:不适用 计算机:IASDev-PC 描述: 使用 URI“C:\SeleneFTPFile\Excel\%MessageID%.xml”在发送端口“ExcelSendPort”上发送到适配器“FILE”的消息被挂起。 错误详细信息:执行发送管道失败:“IAS.SeleneFTPFile.ExcelEncodePipeline,IAS.SeleneFTPFile,Version=1.0.0.0,Culture=neutral,PublicKeyToken=2add433e7764165f”来源:“Excel 文件编码器”发送端口:“ExcelSendPort” URI:“C:\SeleneFTPFile\Excel\%MessageID%.xml” 原因:将 XML 转换为 Excel 时出错:引发了“System.OutOfMemoryException”类型的异常。- 堆栈跟踪:在 System.IO.MemoryStream.set_Capacity(Int32 值) 在 System.IO.MemoryStream.EnsureCapacity(Int32 值) 在 System.IO.MemoryStream.Write(字节 [] 缓冲区,Int32 偏移量,Int32 计数) 在 IAS.SeleneFTPFile.Components.ExcelPipeline.EncodeExcel.Execute(IPipelineContext pContext,IBaseMessage inmsg) 消息 ID:{ED37CDD1-EF0C-46E7-9519-061AF3D4F8A4} 实例 ID:{B0E448B3-3DAD-4E52-8F87-07C5D5AA5224}