首先,让我解释为什么我需要这样做。
我有一个带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();
}
}
}
我添加了一些断点但最终在消息上下文中出现以下错误:
&#34;找不到X12服务架构&#34;
显然,EDIDisassembler组件依赖其他一些东西来完成它的工作。
现在回答我的问题:
有没有让EdiDisassembler在测试中工作 环境?
如果有其他方法来调试/跟踪反汇编程序组件 处理管道组件测试库以外的文件?
答案 0 :(得分:0)
理论上,当然,但您必须复制管道执行期间存在的大量引擎上下文。 EDI组件在业务流程中运行时遇到问题,因此它可能是一个非常高的订单。
您是否尝试过使用后备设置保留交换管道?这与EDI反汇编程序一样简单。