无论如何使用管道测试工具测试运行EDIDisassembler组件?

时间:2016-05-24 19:17:22

标签: biztalk edi biztalk-2013

首先,让我解释为什么我需要这样做。

我有一个带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组件依赖其他一些东西来完成它的工作。

现在回答我的问题:

  1. 有没有让EdiDisassembler在测试中工作 环境?

  2. 如果有其他方法来调试/跟踪反汇编程序组件     处理管道组件测试库以外的文件?

1 个答案:

答案 0 :(得分:0)

理论上,当然,但您必须复制管道执行期间存在的大量引擎上下文。 EDI组件在业务流程中运行时遇到问题,因此它可能是一个非常高的订单。

您是否尝试过使用后备设置保留交换管道?这与EDI反汇编程序一样简单。