在biztalk2006 进行设计的时候,经常需要调用.Net 生成的类库
本例实现如下功能:
输入xml:
<ns0:Root xmlns:ns0="http://test112.InputSchema">
  
<fld1>10</fld1>
  
<fld2>10</fld2>
  
<fld3>Add</fld3>
</ns0:Root>
输出xml:
<?xml version="1.0" encoding="utf-8"?>
<Root xmlns="http://test112.OutputSchema">
  
<Result xmlns="">20</Result>
</Root>
当fld3="Add"的时候Result=fld1+fld2,当fld3="Sub" 的时候 Result=fld1-fld2
使用的类库定义如下:
using System;
using System.Xml; 


namespace MathLibrary_test112
{
    
/// <summary>
    
/// Summary description for Class1.
    
/// </summary>
    
/// 

    [Serializable]
    
public class MathHelper
    
{
        
public MathHelper()
        
{
        }


        
public int Add(int a, int b)
        
{
            
return a + b;
        }


        
public int Subtract(int a, int b)
        
{
            
return a - b;
        }

    }


    
public class Helper
    
{
        
private Helper() { }
        
public static XmlDocument ConstructDoc(int iSum)
        
{
            XmlDocument doc 
= new System.Xml.XmlDocument();
            doc.LoadXml(
"<Root xmlns=\"http://test112.OutputSchema\"><Result xmlns=\"\">" + iSum.ToString() + "</Result></Root>");
            
//<ns0:Root xmlns:ns0="http://test112.OutputSchema">
            return doc;

        }

    }

}

其中有3个地方需要注意
(1) [Serializable] 这里是实例化MathHelper,便于biztalk 流程图变量对他的引用
(2)
doc.LoadXml("<Root xmlns=\"http://test112.OutputSchema\"><Result xmlns=\"\">" + iSum.ToString() + "</Result></Root>");
注意输出的命名空间
(3)AssemblyInfo.cs文件中增加
[assembly: AssemblyKeyFile(@"F:\shhai project\biztalk\Orchestrations\MethodCall\MethodCallSample\MethodCall.snk")]
对密钥的引用


下面这个例子就是对dll类库的调用事例
1 建立Test112 biztalk空项目
2 建立构架文件InputSchema.xsd和OutputSchema.xsd其中格式 如上面xml所示,其中InputSchema.fld1,InputSchema.fld2,InputSchema.fld3要升级为可分辨字段;
InputSchema.fld1,InputSchema.fld2是int类型,InputSchema.fld3 是string类型
OutputSchema.Result也要升级为可分辨字段,类型是int类型
3建立业务流程文件 MethodCallService.odx
4引用已经编译的dll文件 MathLibrary_test112.dll
5业务流程文件格式如下:


数据流图显示如下:

上图显示了消息的流程

建立消息:
mIncoming  消息类型test112.InputSchema
mOutgoing 消息类型test112.OutputSchema
建立变量:
iResult   类型int32 默认是0
iVar1     类型int32 默认是0
iVar2     类型int32 默认是0
iVar3     类型string 默认是"0"
mathVar 类型MathLibrary_test112.MathHelper(类库里面 [Serializable]的类)
各个结点(从上向下)定义如下:
(1)Receive_1接收形状:消息mIncoming
(2)Assign Variables表达式形状:
iVar1 =mIncoming.fld1;
iVar2 
=mIncoming.fld2; 
iVar3 
=mIncoming.fld3;
mathVar 
=new MathLibrary_test112.MathHelper();
(3)Decide_1判定表达式的3个定义:
Check if the operation is Add判定1:iVar3 == "Add"
Check if the Operation is Subtract判定2:iVar3 == "Sub"
Else:没有代码
(4)Check if the operation is Add判定1里面Call Add Method表达式形状代码
iResult = mathVar.Add(iVar1,iVar2);
(5)Check if the Operation is Subtract判定2里面Call Subtract Method表达式代码
iResult = mathVar.Subtract(iVar1,iVar2);
(6)中止形状Terminate_1里面"ERROR";
(7)Expression_2表达式代码:System.Diagnostics.Debug.WriteLine(iResult);
(8)构造消息形状ConstructMessage_1消息mOutgoing用来构造输出的消息
(9)消息赋值形状MessageAssignment_1编写代码mOutgoing=MathLibrary_test112.Helper.ConstructDoc(iResult);
(10)发送形状Send_1 消息mOutgoing
(11)激活Receive_1形状

(12)然后参考:
http://www.cnblogs.com/jhtchina/archive/2006/11/03/549302.html
或者把dll文件拷贝到
D:\Microsoft BizTalk Server 2006\Developer Tools
或者修改配置文件BTSNTSvc.exe.config,把dll拷贝到指定的目录下面
(13)建立发送,接收端口
(14)编译,发布
posted on 2007-04-02 18:50  失落  阅读(353)  评论(0编辑  收藏  举报