在biztalk2006 进行设计的时候,经常需要调用.Net 生成的类库
本例实现如下功能:
输入xml:
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化<ns0:Root xmlns:ns0="http://test112.InputSchema">
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化  <fld1>10</fld1>
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化  <fld2>10</fld2>
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化  <fld3>Add</fld3>
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化</ns0:Root>
输出xml:
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化<?xml version="1.0" encoding="utf-8"?>
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化<Root xmlns="http://test112.OutputSchema">
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化  <Result xmlns="">20</Result>
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化</Root>
当fld3="Add"的时候Result=fld1+fld2,当fld3="Sub" 的时候 Result=fld1-fld2
使用的类库定义如下:
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化using System;
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化using System.Xml; 
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化namespace MathLibrary_test112
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_15biztalk 调用dll类库(参考SDK MethodCallSample)_xml_16biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_17{
biztalk 调用dll类库(参考SDK MethodCallSample)_字段_18biztalk 调用dll类库(参考SDK MethodCallSample)_业务流程_19    /**//// <summary>
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20    /// Summary description for Class1.
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20    /// </summary>
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_22    /// 
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20    [Serializable]
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20    public class MathHelper
biztalk 调用dll类库(参考SDK MethodCallSample)_字段_18biztalk 调用dll类库(参考SDK MethodCallSample)_业务流程_19    biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_17{
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20        public MathHelper()
biztalk 调用dll类库(参考SDK MethodCallSample)_字段_18biztalk 调用dll类库(参考SDK MethodCallSample)_业务流程_19        biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_17{
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_22        }
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20        public int Add(int a, int b)
biztalk 调用dll类库(参考SDK MethodCallSample)_字段_18biztalk 调用dll类库(参考SDK MethodCallSample)_业务流程_19        biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_17{
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20            return a + b;
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_22        }
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20        public int Subtract(int a, int b)
biztalk 调用dll类库(参考SDK MethodCallSample)_字段_18biztalk 调用dll类库(参考SDK MethodCallSample)_业务流程_19        biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_17{
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20            return a - b;
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_22        }
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_22    }
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20    public class Helper
biztalk 调用dll类库(参考SDK MethodCallSample)_字段_18biztalk 调用dll类库(参考SDK MethodCallSample)_业务流程_19    biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_17{
biztalk 调用dll类库(参考SDK MethodCallSample)_字段_18biztalk 调用dll类库(参考SDK MethodCallSample)_业务流程_19        private Helper() biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_17{ }
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20        public static XmlDocument ConstructDoc(int iSum)
biztalk 调用dll类库(参考SDK MethodCallSample)_字段_18biztalk 调用dll类库(参考SDK MethodCallSample)_业务流程_19        biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_17{
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20            XmlDocument doc = new System.Xml.XmlDocument();
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20            doc.LoadXml("<Root xmlns=\"http://test112.OutputSchema\"><Result xmlns=\"\">" + iSum.ToString() + "</Result></Root>");
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20            //<ns0:Root xmlns:ns0="http://test112.OutputSchema">
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20            return doc;
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_20
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_22        }
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化_22    }
biztalk 调用dll类库(参考SDK MethodCallSample)_xml_67}
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化
其中有3个地方需要注意
(1) [Serializable] 这里是实例化MathHelper,便于biztalk 流程图变量对他的引用
(2)
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化doc.LoadXml("<Root xmlns=\"http://test112.OutputSchema\"><Result xmlns=\"\">" + iSum.ToString() + "</Result></Root>");
注意输出的命名空间
(3)AssemblyInfo.cs文件中增加
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化[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业务流程文件格式如下:
biztalk 调用dll类库(参考SDK MethodCallSample)_d3_71

数据流图显示如下:
biztalk 调用dll类库(参考SDK MethodCallSample)_d3_72
上图显示了消息的流程

建立消息:
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表达式形状:
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化iVar1 =mIncoming.fld1;
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化iVar2 =mIncoming.fld2; 
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化iVar3 =mIncoming.fld3;
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化mathVar =new MathLibrary_test112.MathHelper();
biztalk 调用dll类库(参考SDK MethodCallSample)_实例化
(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)然后参考:
或者把dll文件拷贝到
D:\Microsoft BizTalk Server 2006\Developer Tools
或者修改配置文件BTSNTSvc.exe.config,把dll拷贝到指定的目录下面
(13)建立发送,接收端口
(14)编译,发布