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.Collections.Generic;
using System.Text;
using Microsoft.XLANGs.BaseTypes;
//http://www.cnblogs.com/chnking/archive/2007/02/28/660280.html

[assembly: CLSCompliant(
true)]
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;
            }

        }


    }

}


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

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.Name 
= netClassMsg.Name;
new_netClassMsg.Address 
= netClassMsg.Address;
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"?>

<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:complexType name="netClass">

    
<xs:sequence>

      
<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="Address" type="xs:string" />

      
<xs:element minOccurs="0" maxOccurs="1" name="PropertyName" type="xs:string" />

    
</xs:sequence>

  
</xs:complexType>

</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>


 


 

posted @ 2008-07-08 10:52  jhtchina  阅读(403)  评论(0)    收藏  举报