您的位置:首页 > 技术频道 > 正文

biztalk中使用.net class类型的消息(三) -- net class类型消息转换为xml消息的示例

【IT168知识库】
 

.    本示例的用途... 1

.    新建解决方案... 2

.    属性架构biztalk项目... 2

1.  新建属性架构的biztalk项目... 2

1.1.       指定密钥文件... 2

1.2.       设置部署属性... 2

2.  新建属性架构... 2

.    .net class消息项目... 2

1.  新建类库项目... 2

1.1.       指定密钥文件... 3

1.2.       设置生成事件... 3

1.3.       引用netClassMessage_PromoteXSD项目... 3

2.  新建.net class类型消息的类... 3

.    Orchestration流程biztalk项目... 5

1.  新建Orchestration流程biztalk项目... 5

1.1.       指定密钥文件... 5

1.2.       设置部署属性... 5

2.  新建xml消息的架构... 5

3.  .netclass类型消息项目中新建xml消息实例和读取xml实例的方法... 5

3.1.       新建xml实例... 6

3.2.       新建读取xml实例方法... 6

4.  建立rchestration流程... 6

4.1.       新建两条消息... 7

4.2.       设计流程... 7

5.  编译部署项目... 8

6.  设置物理端口... 8

.    测试示例... 8

1.  net class类型消息的序列化示例... 8

2.  测试... 9

 

一.   本示例的用途

本示例演示如何在orchestration中使用.net class类型的消息。.net class类型消息进入到orchestration中后,从零开始新建一个xml类型的消息,然后把.netclass类型的消息的相关属性赋给新建的xml类型的消息。重点在如何从零开始新建xml类型的消息。

大致步骤如下:

l         file适配器读取一个.net class类型的消息到orchestration

l         orchestration中接受一个的.net class 类型的消息

l         从零开始新建一个xml类型的消息。

l         然后把.netclass类型的消息的相关属性赋给新建的xml类型的消息。

l         最后把处理好的xml类型的消息输出到一个文件夹。

 

本示例的完整代码下载(netClassMessageToXSDMessage.rar

 

二.   新建解决方案

新建一个空解决方案,名字为netClassMessage,解决方案作为下面所有项目的容器,其后建的各个项目都放在这个解决方案中。

在解决方案根目录下新建一个强名称密钥文件,biztalk项目生成的assembly需要部署到GAC,需要密钥文件。这里生成密钥文件netClassMessage.snk

如何生成密钥文件见biztalk随机文档:Getting Started > BizTalk Server 2006 Tutorials > Before You Begin the Tutorials >Step 4: Create a Strong Name Key File

三.   属性架构biztalk项目

本示例中使用的.net class类型消息包含了升级属性和可分辨字段,在xml消息中定义升级属性需要有一个属性架构,同样,.net class类型中升级属性也需要同样的属性架构。.net class类型消息是一个.net类,在.net类库项目中定义,而属性架构是biztalk中才有的概念,需要在biztalk项目定义,这样消息类和属性架构不可能在同一个项目中。.net class类型消息要使用到属性架构,所以.net class类型消息所在的.net class类库项目要引用属性架构所在的biztalk项目。

这一步建立属性架构所在的biztalk项目。

1.    新建属性架构的biztalk项目

netClassMessage解决方案中新建一个biztalk项目,名称为netClassMessage_PromoteXSD

设置项目属性,打开netClassMessage_PromoteXSD项目属性窗口

1.1.     指定密钥文件

在左边选“通用属性 assembly”,然后在右边的“strong name Assembly key file”中指定密钥文件,指向上面生成的那个密钥文件netClassMessage.snk的路径。

1.2.     设置部署属性

在左边选“配置属性 deployment”,“server”设为开发用的本机机器名,“Application name”设为netClassMessageToXSDMessage,“Redeploy”、“Install to Global Assembly Cache”、“Restart Host Instance”都设为true,为什么这么设置,请见“开发环境中biztalk项目设置注意事项”。

2.    新建属性架构

netClassMessage_PromoteXSD项目中添加一个新项,在打开的“添加新项”窗口中,左边选“schema files”,在右边选“Property Schema”,架构名称设为PromotedProperties.xsd,确定。

在新建的PromotedProperties.xsd中把默认的“property1”名称改为PropertyName,保存。本示例就使用一个升级属性PropertyName

四.   .net class消息项目

这是个C#的类库项目,这个项目里将要定义.net class类型消息的类。

1.    新建类库项目

netClassMessage解决方案中新建一个C#类库项目,名称为netClassMessage_netClass

把前面生成的密钥文件netClassMessage.snk拷贝到这个项目的根目录下。因为这个.net class类型的消息要被biztalk使用,所以消息类所在的assembly也要被部署到GAC,这个类库dll也必须要有强名称密钥。

设置项目属性,打开netClassMessage_netClass项目属性窗口。

1.1.     指定密钥文件

在左边选“签名”,在右边“为程序集签名”前打勾,然后在下面选择密钥文件,指向项目根目录的那个netClassMessage.snk文件的路径。

1.2.     设置生成事件

在左边选“生成事件”,右边“生成后事件命令行”中输入以下代码:

 

CALL "%VS80COMNTOOLS%\vsvars32.bat" > NUL

GACUTIL /if "$(TargetPath)"

 

这两行代码是告诉编译器,把每次这个项目编译完后生成的dll加载到GAC中,如果GAC中已经有了同样的dll,则直接覆盖。这样保证每次编后后都能自动将最新版的dll加载到GAC,省去手工把dll加入到GAC的麻烦。

1.3.     引用netClassMessage_PromoteXSD项目

消息类中有升级属性,需要用到属性架构,所以在项目中要引用前面建立的属性架构的项目。

2.    新建.net class类型消息的类

netClassMessage_netClass项目中添加一个新项,在打开的“添加新项”窗口中,选“类”,类名称设为netClass.cs,确定。

此类的代码如下:

using System;

using Microsoft.XLANGs.BaseTypes;

namespace netClassMessage_netClass

{

    //表示此类是可以序列化的

    [Serializable()]

    //此属性设置目标名称空间Target Namespace

    [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://myURL")]

    //类名称相当于XSD中的根元素,上面设定的名称空间加上类名称就组成了消息类型

    public class netClass

    {

        private string _ID;

        private string _name;

        private string _address;

        private string _propertyName;

        public netClass()

        {

            _ID = System.Guid.NewGuid().ToString();

        }

        //DistinguishedField属性表示这个字段是可分辨字段

        [DistinguishedField]

        public string ID

        {

            get

            {

                return _ID;

            }

            set

            {

                _ID = value;

            }

        }

        [DistinguishedField]

        public string Name

        {

            get

            {

                return _name;

            }

            set

            {

                _name = value;

            }

        }

        [DistinguishedField]

        public string Address

        {

            get

            {

                return _address;

            }

            set

            {

                _address = value;

            }

        }

        [DistinguishedField]

        //netClassMessage_PromoteXSD.PropertyName是在属性schema中定义的属性,Property属性

        //指示这个字段为promote字段,对应netClassMessage_PromoteXSD.PropertyName

        [Property(typeof(netClassMessage_PromoteXSD.PropertyName))]

        public string PropertyName

        {

            get

            {

                return _propertyName;

            }

            set

            {

                _propertyName = value;

            }

        }

    }

}

 

这个消息类的详细说明见“biztalk中使用.net class类型的消息(一) -- 相关知识介绍”。

 

五.   Orchestration流程biztalk项目

上面定义了属性架构和.net class消息类,现在要开始设计业务流程,使用这个.net class消息。

1.    新建Orchestration流程biztalk项目

步骤跟属性架构项目一样,在netClassMessage解决方案中新建一个biztalk项目,名称为netClassMessageProcessProject

设置项目属性,打开netClassMessageProcessProject项目属性窗口

1.1.     指定密钥文件

在左边选“通用属性 assembly”,然后在右边的“strong name Assembly key file”中指定密钥文件,指向上面生成的那个密钥文件netClassMessage.snk的路径。

1.2.     设置部署属性

在左边选“配置属性 deployment”,“server”设为开发用的本机机器名,“Application name”设为netClassMessageToXSDMessage,“Redeploy”、“Install to Global Assembly Cache”、“Restart Host Instance”都设为true,为什么这么设置,请见“开发环境中biztalk项目设置注意事项”。

2.    新建xml消息的架构

要在orchestration中把.netclass类型消息转换成xml,这个xml的架构就是用来构造xml消息的。

建一个简单的xsd的架构ClassSchema.xsd,跟.netclass类型相对应,包含如下几个字段:

l         ID

l         Name

l         Address

l         PropertyName

字段数据类型都是string,并且把所有四个字段都设置为可分辨字段,同时把PropertyName字段设置为升级属性。

3.    .netclass类型消息项目中新建xml消息实例和读取xml实例的方法

由于在orchestration中从零构造一个xml消息,只能通过XmlDocument赋值给xml消息来实现,关于从零开始构造xml消息的详细说明见“biztalk中使用.net class类型的消息(一) -- 相关知识介绍”。

3.1.     新建xml实例

从上节中ClassSchema.xsd生成个xml实例,如何从xsd生成xml实例请见“biztalk中架构验证、实例生成和验证”,把生成的xml文件改名为“ClassSchema.xml”,拷贝到.netclass类型消息项目netClassMessage_netClass的根目录下。

修改ClassSchema.xml属性“生成操作”为“嵌入的资源”。

3.2.     新建读取xml实例方法

写一个读取嵌入到dll中的ClassSchema.xml的方法。

在跟这个xml文件同一个项目中,新建一个类EmbeddedResourseProcessor.cs,这个类只有一个静态方法GetXmlDocResource,这个方法根据提供的xml文件名,在assembly中找到嵌入的xml文件,返回这个xml文件对应的XmlDocument的对象。

这个方法的完整代码如下:

using System;

using System.Collections;

using System.IO;