biztalk中使用.net class类型的消息
http://www.cnblogs.com/chnking/archive/2007/02/28/660280.html
首先感谢chnking ,从他的blogs里面学习到了很多的东西,在此感谢他
一. 本示例的用途
本示例演示如何在orchestration中使用.net class类型的消息。.net class类型消息进入到orchestration中始终保持同类型消息之间的转换,输出也是同一个消息类型。如何在.net class类型中定义序列化,定义升级属性、可分辨字段。
大致步骤如下:
         从file适配器读取一个.net class类型的消息到orchestration。
         在orchestration中把入站的.net class 赋给一个同类的消息,然后对新构造的消息就行一些处理,示例中仅做一个简单的修改属性的处理。
        最后把处理好的.net class消息输出到一个文件夹。
1  属性架构biztalk项目

 注意: 1 首先PropertyName必须生机属性
          2 然后Schema 架构类型:属性
          3 命名空间:http://myURL
2  net class消息项目
 using System;
using System; using System.Collections.Generic;
using System.Collections.Generic; using System.Text;
using System.Text; using Microsoft.XLANGs.BaseTypes;
using Microsoft.XLANGs.BaseTypes; //http://www.cnblogs.com/chnking/archive/2007/02/28/660280.html
//http://www.cnblogs.com/chnking/archive/2007/02/28/660280.html
 [assembly: CLSCompliant(true)]
[assembly: CLSCompliant(true)] namespace netClassMessage_netClass
namespace netClassMessage_netClass {
{ //表示此类是可以序列化的
    //表示此类是可以序列化的 [Serializable()]
    [Serializable()] //此属性设置目标名称空间Target Namespace
    //此属性设置目标名称空间Target Namespace [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://myURL")]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://myURL")] //类名称相当于XSD中的根元素,上面设定的名称空间加上类名称就组成了消息类型
    //类名称相当于XSD中的根元素,上面设定的名称空间加上类名称就组成了消息类型 public class netClass
    public class netClass {
    { private string _ID;
        private string _ID; private string _name;
        private string _name; private string _address;
        private string _address; private string _propertyName;
        private string _propertyName;
 public netClass()
        public netClass() {
        { _ID = System.Guid.NewGuid().ToString();
            _ID = System.Guid.NewGuid().ToString(); }
        }
 //DistinguishedField属性表示这个字段是可分辨字段
        //DistinguishedField属性表示这个字段是可分辨字段 [DistinguishedField]
        [DistinguishedField] public string ID
        public string ID {
        { get
            get {
            { return _ID;
                return _ID; }
            } set
            set {
            { _ID = value;
                _ID = value; }
            } }
        }
 [DistinguishedField]
        [DistinguishedField] public string Name
        public string Name {
        { get
            get {
            { return _name;
                return _name; }
            } set
            set {
            { _name = value;
                _name = value; }
            } }
        }
 [DistinguishedField]
        [DistinguishedField] public string Address
        public string Address {
        { get
            get {
            { return _address;
                return _address; }
            } set
            set {
            { _address = value;
                _address = value; }
            } }
        }
 [DistinguishedField]
        [DistinguishedField] //netClassMessage_PromoteXSD.PropertyName是在属性schema中定义的属性,此Property属性
        //netClassMessage_PromoteXSD.PropertyName是在属性schema中定义的属性,此Property属性 //指示这个字段为promote字段,对应netClassMessage_PromoteXSD.PropertyName
        //指示这个字段为promote字段,对应netClassMessage_PromoteXSD.PropertyName [Property(typeof(netClassMessage_PromoteXSD.PropertyName))]
        [Property(typeof(netClassMessage_PromoteXSD.PropertyName))] public string PropertyName
        public string PropertyName {
        { get
            get {
            { return _propertyName;
                return _propertyName; }
            } set
            set {
            { _propertyName = value;
                _propertyName = value; }
            } }
        }
 }
    } }
}
在左边选“生成事件”,右边“生成后事件命令行”中输入以下代码:
CALL "%VS80COMNTOOLS%"vsvars32.bat" > NUL
GACUTIL /if "$(TargetPath)"
        这样dll 就生成到windows\assembly里面了
3  Orchestration流程biztalk项目

注意: 1 MessageAssignment_1里面代码如下:
 new_netClassMsg = new netClassMessage_netClass.netClass();
new_netClassMsg = new netClassMessage_netClass.netClass(); new_netClassMsg.Name = netClassMsg.Name;
new_netClassMsg.Name = netClassMsg.Name; new_netClassMsg.Address = netClassMsg.Address;
new_netClassMsg.Address = netClassMsg.Address; new_netClassMsg.PropertyName = "new Property";
new_netClassMsg.PropertyName = "new Property";2 消息的定义
4  测试示例
   1.    net class类型消息的序列化示例
本示例使用.net class类型的消息放置在解决方案的in目录下通过file适配器读入到orchestration。需要一个本例中.net class消息类型netClassMessage_netClass.netClass序列化后的消息文件。
如何根据.net class类型生成一个消息实例的序列化后的文件呢?
Dotnet framework SDK中提供了一个实用工具xsd.exe,可以把.net class消息类型转换成xsd架构类型。
本示例.net class消息类型的assembly为netClassMessage_netClass.dll命令大致如下:
XSD netClassMessage_netClass.dll
在同一目录下就会产生一个叫schema0.xsd的文件,就是这个.net class类型消息对应的xsd的架构,本示例生成的架构是这样的:
 <?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
 <xs:schema xmlns:tns="http://myURL" elementFormDefault="qualified" targetNamespace="http://myURL" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:schema xmlns:tns="http://myURL" elementFormDefault="qualified" targetNamespace="http://myURL" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="netClass" nillable="true" type="tns:netClass" />
  <xs:element name="netClass" nillable="true" type="tns:netClass" />
 <xs:complexType name="netClass">
  <xs:complexType name="netClass">
 <xs:sequence>
    <xs:sequence>
 <xs:element minOccurs="0" maxOccurs="1" name="ID" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="ID" type="xs:string" />
 <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
 <xs:element minOccurs="0" maxOccurs="1" name="Address" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="Address" type="xs:string" />
 <xs:element minOccurs="0" maxOccurs="1" name="PropertyName" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="PropertyName" type="xs:string" />
 </xs:sequence>
    </xs:sequence>
 </xs:complexType>
  </xs:complexType>
 </xs:schema>
</xs:schema>
生成一个消息实例后,取名netClassMessage.xml,放到解决方案根目录备用。
消息文件如下:
<ns0:netClass xmlns:ns0="http://myURL">
<ns0:ID>ID_0</ns0:ID>
<ns0:Name>Name_0</ns0:Name>
<ns0:Address>Address_0</ns0:Address>
<ns0:PropertyName>PropertyName_0</ns0:PropertyName>
</ns0:netClass>
 
2. 测试
把上面生成的实例消息文件netClassMessage.xml拷贝到解决方案下的“in”目录,过一会看解决方案下的“out”目录,应该会多出一个类似“{FA0DCEA1-9C1B-43B6-A633-D36FEF5D0862}.xml”这样形式的文件,打开查看,内容如下:
<?xml version="1.0"?>
<netClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://myURL">
<ID>896afea7-e75c-445f-af9c-daac19535ef0</ID>
<Name>Name_0</Name>
<Address>Address_0</Address>
<PropertyName>new Property</PropertyName>
</netClass>
 
 
 
                    
                

 
     
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号