处理管道组件中的传入数据流

为 BizTalk Server 中的管道组件编写自定义反汇编程序代码时,应考虑以下事项。

不要在自定义反序列化代码中关闭传入数据流

在 BizTalk Server 中为管道组件编写自定义反汇编程序代码时,请确保不要关闭反汇编程序代码中的传入数据流。 来自输入消息的传入流是共享资源。 BizTalk Server 消息引擎中的消息正文跟踪组件也使用传入流。

如果隐式或显式关闭传入流,跟踪数据可能会丢失,并且无法在 BizTalk Server 中使用消息事件和服务实例跟踪检查流数据。

使用 Stream 类的 Seek 方法将数据流指针设置为流的开头

确保从传入的数据流中读取,直到到达流的末尾。 例如,如果自定义代码对 300 KB 的数据发出读取请求,并且代码仅接收 34 KB 的数据,则不要假定已到达流的末尾。 自定义代码应始终从传入流中读取,直到返回 0 个字节。

在自定义组件逻辑中返回数据流之前,请将数据流指针设置回流的开头。 例如,此代码演示了在返回流之前使用 seek 方法指向流的开头的逻辑:

myDataStream.Seek(0, SeekOrigin.Begin);  
return myDataStream;  

如果不执行此操作,流将在当前组件中被读取到末尾,导致下一个组件接收到似乎是空流,因为数据流指针未被设置为流的开头。 这可能会导致后续管道组件出现意外分析和验证错误。