BizTalk自定义管道组件值传递至编排的实现问询
BizTalk自定义管道组件属性传递至编排配置方案
一、当前配置正误判断
你目前的操作大部分正确,但有两处关键遗漏:
- 属性架构的字段未设置Property Type为
Promoted,这是导致无法在消息中选择属性架构的核心原因 - Execute方法仅做消息透传,未实现上下文属性的写入逻辑
二、完整配置步骤(解决属性架构无法选择问题)
1. 补全属性架构配置
打开你的PropertySchema.xsd,对UserName和Password字段分别做以下设置:
- 把Property Type改为
Promoted(只有Promoted属性会被提升到消息上下文,才能在编排中直接访问) - 确保属性架构的命名空间唯一,避免和现有架构冲突
- 字段数据类型设为
string,和管道组件的属性类型匹配
编译并部署属性架构项目到BizTalk。
2. 修改自定义管道组件的Execute方法
- 在管道组件项目中引用属性架构生成的dll
- 更新Execute方法,添加上下文属性写入逻辑:
public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg) { // 从管道组件自身属性获取账号密码 string userName = this.Username; string password = this.Password; // 将属性写入消息上下文,替换成你的属性架构静态类名 pInMsg.Context.Write(PropertySchema.UserName.Name, PropertySchema.UserName.Namespace, userName); pInMsg.Context.Write(PropertySchema.Password.Name, PropertySchema.Password.Namespace, password); // 消息正常透传 return pInMsg; }
编译管道组件,部署后添加到接收管道的对应阶段(一般是Decode或Validate阶段)。
3. 编排中访问属性
- 在编排项目中引用属性架构的dll
- 不需要将属性架构绑定到消息结构,直接通过消息上下文访问:
在表达式形状中写:
// 替换成你的消息名和属性架构类名 strUserName = ReceiveMsg(PropertySchema.UserName); strPassword = ReceiveMsg(PropertySchema.Password);
三、密码掩码实现
1. 管道组件属性掩码
在管道组件的Password属性定义上添加PasswordPropertyText特性,这样在BizTalk控制台输入密码时会显示为***:
[Browsable(true)] [Description("登录密码")] [PasswordPropertyText(true)] public string Password { get; set; }
2. 敏感信息安全处理
- 属性架构中,把Password字段的Tracking设为
None,防止密码被记录到BizTalk跟踪数据库 - 编排中使用完密码后,及时清空变量,减少敏感信息在内存中的留存时间
四、核心操作教程要点
- 属性架构区分:Promoted属性用于跨组件/编排的上下文传递,Distinguished属性仅适用于消息结构内的字段访问,这里必须用Promoted
- 部署顺序:先部署属性架构,再部署依赖它的管道组件,最后部署编排,避免依赖错误
- 调试方法:通过BizTalk管理控制台的消息跟踪功能,查看消息上下文是否包含你提升的属性;也可以在管道组件中加日志(比如写入Windows事件查看器)验证属性值是否正确
内容的提问来源于stack exchange,提问作者Emperor 2052
相关产品推荐
相关产品推荐

