如何通过编程实现BizTalk平面文件映射的单元测试?
解决方案
问题1:程序化让映射直接接受平面文件输入
你当前用XslCompiledTransform直接执行映射的XSL,绕开了BizTalk原生的映射执行流程,这就是没法自动处理平面文件转XML的原因。正确做法是使用BizTalk提供的映射执行API,而非直接操作XSL:
- 引用
Microsoft.BizTalk.Map.dll和Microsoft.BizTalk.Streaming.dll两个程序集 - 直接实例化你的映射类(继承自
TransformBase的类)来执行转换,它会自动关联平面文件架构完成原生文件到XML的转换,和VS里“测试映射”的逻辑完全一致
示例代码:
using Microsoft.BizTalk.Map; using System.IO; using System.Text; // 加载目标平面文件 var flatFilePath = @"C:\test\input.txt"; var inputStream = new FileStream(flatFilePath, FileMode.Open); // 初始化自定义映射 var mapInstance = new YourCustomMap(); var transformArgs = new TransformArgs(); // 指定输入对应的平面文件架构 transformArgs.InputSchemas = new[] { typeof(YourFlatFileSchema) }; // 执行映射并输出结果 using var outputStream = new MemoryStream(); mapInstance.Transform(inputStream, outputStream, transformArgs); // 读取转换后的XML结果 outputStream.Position = 0; var resultXml = new StreamReader(outputStream).ReadToEnd();
问题2:单独将平面文件转换为符合架构的XML
如果只需要完成平面文件到XML的转换,直接用BizTalk的FlatFileReader类即可,这就是VS“测试映射”功能底层依赖的解析器:
using Microsoft.BizTalk.Parser; using System.IO; using System.Xml; // 初始化平面文件阅读器,关联对应的架构 var flatFileReader = new FlatFileReader(typeof(YourFlatFileSchema)); // 加载平面文件流 using var inputStream = new FileStream(@"C:\test\input.txt", FileMode.Open); flatFileReader.Initialize(inputStream); // 解析并生成XML文档 var xmlReader = flatFileReader.XmlReader; var xmlDoc = new XmlDocument(); xmlDoc.Load(xmlReader); // 保存或进一步处理转换后的XML xmlDoc.Save(@"C:\temp\transformed.xml");
转换完成后,你可以用之前熟悉的方式(XDocument关联架构)验证生成的XML是否符合要求。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

