导航

Orchestration Shape中Message Context Property的读取问题

Posted on 2008-12-06 16:09  鸡尾虾的壳  阅读(148)  评论(0编辑  收藏  举报

在Pipeline Message中,如果某属性不存在于消息流中,Message.Property会返回empty。但是在Orchestration Shape中,如果属性不存在,Engine会抛出异常。

在Message Assign Shape中,消息属性读取常常用到。但是这种Shape是不支持if语句的,因此无法用exists语句来判断。比较好的解决方法是把消息传到外部Class中进行处理。外部方法接收XLANGMessage类型,返回XmlDocument类型。XLANGMessage位于Microsoft.XLANGs.BaseTypes.dll中。然后通过XLANGMessage的GetPropertyValue方法读取属性值。一段实例代码如下:
           object objAckFailureDes=originalMessage.GetPropertyValue(typeof(BTS.AckDescription));
            if (objAckFailureDes != null)
            {
                strFailureDesp = (string)objAckFailureDes;
            }

BTS.AckDescription是系统自带的属性。当添加Microsoft.BizTalk.GlobalPropertySchemas.dll引用后,VS会认为它是一个类。同样,对于自定义Property Schema中的属性,需要添加对它的引用,否则无法编译。