【发布时间】:2016-09-22 04:02:35
【问题描述】:
首先,让我解释一下为什么我需要这样做。
我有一个带有 EDIReceive Pipeline 配置的入站端口。它接收 EDI X12 837I 文件并将这些文件反汇编为 837I 消息。
有一个文件失败,错误描述如下:
以下元素未关闭:ns0:X12_00501_837_I。第 1 行,位置 829925。
看起来传入的文件有一些结构问题。使反汇编程序无法正确生成消息。但错误本身无助于定位问题。此外,没有生成 TA1 和 999 来帮助我们定位问题。
所以我使用Pipeline Component Test Library 创建了一个小控制台应用程序,尝试通过 edidisassembler 管道组件运行此文件,看看是否能找到导致错误的原因。
代码非常简单:
namespace TestEDIDasm
{
using System;
using System.IO;
using Microsoft.BizTalk.Edi.Pipelines;
using Microsoft.BizTalk.Message.Interop;
using Winterdom.BizTalk.PipelineTesting;
using Microsoft.BizTalk.Edi.BatchMarker;
class Program
{
static void Main(string[] args)
{
var ediDasmComp = new EdiDisassembler();
ediDasmComp.UseIsa11AsRepetitionSeparator = true;
ediDasmComp.XmlSchemaValidation = true;
var batchMaker = new PartyBatchMarker();
IBaseMessage testingMessage = MessageHelper.LoadMessage(@"c:\temp\{1C9420EB-5C54-43E5-9D9D-7297DE65B36C}_context.xml");
ReceivePipelineWrapper testPipelineWrapper = PipelineFactory.CreateEmptyReceivePipeline();
testPipelineWrapper.AddComponent(ediDasmComp, PipelineStage.Disassemble);
testPipelineWrapper.AddComponent(batchMaker, PipelineStage.ResolveParty);
var outputMessages = testPipelineWrapper.Execute(testingMessage);
if (outputMessages.Count <= 0)
{
Console.WriteLine("No output message");
Console.ReadKey();
return;
}
var msg = outputMessages[0];
StreamReader sr = new StreamReader(msg.BodyPart.Data);
Console.WriteLine(sr.ReadToEnd());
Console.ReadKey();
}
}
}
我添加了一些断点,但最终在消息上下文中出现以下错误:
“未找到 X12 服务架构”
显然,EDIDisassembler 组件依赖于其他一些东西来完成它的工作。
现在进入我的问题:
有没有办法让 EdiDisassembler 在测试中工作 环境?
如果有任何其他方法可以调试/跟踪反汇编程序组件 处理流水线组件测试库以外的文件?
【问题讨论】:
标签: biztalk edi biztalk-2013