biztalk定制管道组件(pipeline component)的调试、部署

(2007-9-25日更新)

一、 定制Pipeline componentassembly的部署

定制Pipeline componentassembly不一定要放在GAC中,可以放在<biztalk install directory>/Pipeline Components目录下,但是这时定制Pipeline component所引用的其它assembly必须也放在此目录中。

如果把定制Pipeline componentassembly放到GAC中,那么定制Pipeline component所引用的其它assembly必须也放在GAC中,否则定制Pipeline component不知道去哪找到它所引用的其它assembly

当定制Pipeline componentassemblyGAC<biztalk install directory>/Pipeline Components目录下有存在,那么优先使用<biztalk install directory>/Pipeline Components目录下的assembly

二、 定制Pipeline component的调试

无论把定制Pipeline componentassembly放到GAC中还是放在<biztalk install directory>/Pipeline Components目录下,都可以对定制Pipeline componen进行源代码级别调试。

为了方便,一般把Pipeline component项目的输出路径指向<biztalk install directory>/Pipeline Components目录。

1、 调试已部署的Pipeline component

对于已经部署的biztalk项目,项目中使用到了定制的Pipeline component,可以在VS2005环境下对Pipeline component进行源代码级的调试。

l VS2005中打开Pipeline component项目

l Pipeline component项目输出路径指向<biztalk install directory>/Pipeline Components目录。

l VS2005debug菜单中选“Attach to Process”,如下图。在进程中选“BTSNTSvc.exe”,这是biztalk的服务进程,然后点击Attach按钮,把进程附加到VS2005

Figure1. 附加进程

l Pipeline component源代码中需要调试的地方设置断点。

l 在相应的输入位置提供输入消息,以便消息进入使用了定制Pipeline component的管道,在运行到设置了断点的代码处,进程暂停,即可进行断点调试。

2、 利用pipeline.exe调试未部署的Pipeline component

如果只定制了Pipeline component,并使用这个Pipeline component设计了一个管道,即有了使用这个定制Pipeline componentbtp文件,这时就可对Pipeline component进行源代码级的调试了。

这种情况需要使用pipeline.exe工具调试Pipeline component

l VS2005中打开Pipeline component项目

l Pipeline component项目输出路径指向<biztalk install directory>/Pipeline Components目录。

l 改变Pipeline component项目的启动动作,打开Pipeline component项目的属性页。选左边debug标签,在start action下选择“Start external program”,然后点击“…”按钮,在路径<biztalk Installation Folder>/SDK/Utilities/PipelineTools中选择 Pipeline.exe,表示使用pipeline来启动这个Pipeline component项目。在Start Options输入相应的命令行参数。参数设置:
首先指定btp文件,即在管道中使用了这个Pipeline component的管道文件。
其次指定输入文件
最后指定输出文件
一个参数看上去像这样:
C:/Samples/UnzipDisassembler/PipelineTest/UnzipTest.btp -d C:/Samples/UnzipDisassembler/test.zip -t -m C:/Samples/UnzipDisassembler/out/Part_%MessagePartID%.out

l Pipeline component源代码中需要调试的地方设置断点。

l 把输入文件放入到参数中指定的位置。

l F5开始运行

三、 定制Disassembler Pipeline component的注意事项

1、 不要在代码中关闭输入stream

输入消息的stream不仅在Pipeline component,别的组件功能可能也需要使用这个stream,比如HAT跟踪组件也要使用消息stream来跟踪消息。如果在定制Pipeline component代码中关闭了stream,将会影响到HAT对消息的跟踪。

2、 在代码中保证生成的stream的当前位置放置在stream的起点

使用类似下面的代码将stream的当前位置设置到stream的起点:

myDataStream.Seek(0,SeekOrigin.Begin);

因为如果不把stream的当前位置设置回起点,还处于stream的终点处,这个stream进入到下一个stage的组件中,组件代码直接读取stream,会读不出内容,导致意想不到的结果。

3、 在定制管道组件的任何字符串变量中都不要包含换行符

在使用biztalk 2006时,在在定制管道组件的任何字符串变量中都不要包含换行符,比如/n,否则,在编译这个组件是会得到一个“newline in constant”错误。

4、 使用命令行排除非组件代码错误

有时由于一些设置问题或者管道文件btp被手工修改又被改错了,这些问题不是定制管道本身的问题,会导致管道组件不被执行,表现现象一般是在VS2005中使用pipeline.exe进行源代码调式时,运行后始终运行不到断点就推出了,也没有任何提示。

这时可以进入命令行模式,直接运行pipeline.exe,命令后面跟上在VS2005环境中设置的pipeline.exe的调试参数,执行。如果是调试参数或者btp文件本身的设置问题,pipeline.exe命令会有出错提示,下面是两个比较常见的问题:

4.1. pipeline.exe调试时路径参数如有空格需要引号

使用pipeline.exe调试时参数管道文件、输入、输出文件路径如有空格,比如btp文件所在的路径是这样:C:/UnzipDisassembler/PipelineTest project/UnzipTest.btp

路径中包含有空格字符,就必须把路径用引号把路径包含起来,不然pipeline.exe会找不到文件,提示以下错误:

Source: Pipeline

Message: Pipeline file name is already specified

4.2. 管道btp文件设置错误

如果管道文件中的配置有错误,比如Stage标签的结束标签被改成了小写的stage,就会被提示以下错误:

Source: System.Xml

Message: 37 上的开始标记“Stage”与结束标记“stage”不匹配。

39,位置 7

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是设计模式一套被反复使用、多数人知晓的、经过分类编目的、代码 设计经验 的总结;使用设计模式是为了 可重用 代码、让代码 更容易 被他人理解、保证代码 可靠性;设计模式使代码编制  真正工程化;设计模式使软件工程的 基石脉络, 如同大厦的结构一样;并不直接用来完成代码的编写,而是 描述 在各种不同情况下,要怎么解决问题的一种方案;能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免引
单一职责原则定义(Single Responsibility Principle,SRP)一个对象应该只包含 单一的职责,并且该职责被完整地封装在一个类中。Every  Object should have  a single responsibility, and that responsibility should be entirely encapsulated by t
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强烈推荐。原文截图*************************************************************************************************************************原文文本************
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题,总结出来的一套通用的解决方案。
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容易使用。
单例模式(Singleton Design Pattern)保证一个类只能有一个实例,并提供一个全局访问点。
组合模式可以将对象组合成树形结构来表示“整体-部分”的层次结构,使得客户可以用一致的方式处理个别对象和对象组合。
装饰者模式能够更灵活的,动态的给对象添加其它功能,而不需要修改任何现有的底层代码。
观察者模式(Observer Design Pattern)定义了对象之间的一对多依赖,当对象状态改变的时候,所有依赖者都会自动收到通知。
代理模式为对象提供一个代理,来控制对该对象的访问。代理模式在不改变原始类代码的情况下,通过引入代理类来给原始类附加功能。
工厂模式(Factory Design Pattern)可细分为三种,分别是简单工厂,工厂方法和抽象工厂,它们都是为了更好的创建对象。
状态模式允许对象在内部状态改变时,改变它的行为,对象看起来好像改变了它的类。
命令模式将请求封装为对象,能够支持请求的排队执行、记录日志、撤销等功能。
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 基本介绍 **意图:**在不破坏封装性的前提下,捕获一个对象的内部状态,并在该
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为
享元模式(Flyweight Pattern)(轻量级)(共享元素)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结