biztalk 调用dll类库(参考SDK MethodCallSample)

在biztalk2006 进行设计的时候,经常需要调用.Net 生成的类库
本例实现如下功能:
输入xml:
None.gif < ns0:Root  xmlns:ns0 ="http://test112.InputSchema" >
None.gif  
< fld1 > 10 </ fld1 >
None.gif  
< fld2 > 10 </ fld2 >
None.gif  
< fld3 > Add </ fld3 >
None.gif
</ ns0:Root >
输出xml:
None.gif <? xml version="1.0" encoding="utf-8" ?>
None.gif
< Root  xmlns ="http://test112.OutputSchema" >
None.gif  
< Result  xmlns ="" > 20 </ Result >
None.gif
</ Root >
当fld3="Add"的时候Result=fld1+fld2,当fld3="Sub" 的时候 Result=fld1-fld2
使用的类库定义如下:
None.gif using  System;
None.gif
using  System.Xml; 
None.gif
None.gif
None.gif
namespace  MathLibrary_test112
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// Summary description for Class1.
InBlock.gif    
/// </summary>
ExpandedSubBlockEnd.gif    
/// 

InBlock.gif    [Serializable]
InBlock.gif    
public class MathHelper
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
public MathHelper()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public int Add(int a, int b)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return a + b;
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public int Subtract(int a, int b)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return a - b;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

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

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif
其中有3个地方需要注意
(1) [Serializable] 这里是实例化MathHelper,便于biztalk 流程图变量对他的引用
(2)
None.gif doc.LoadXml( " <Root xmlns=\ " http: // test112.OutputSchema\"><Result xmlns=\"\">" + iSum.ToString() + "</Result></Root>");
注意输出的命名空间
(3)AssemblyInfo.cs文件中增加
None.gif [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表达式形状:
None.gif iVar1  = mIncoming.fld1;
None.gifiVar2 
= mIncoming.fld2; 
None.gifiVar3 
= mIncoming.fld3;
None.gifmathVar 
= new  MathLibrary_test112.MathHelper();
None.gif
(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)编译,发布

转载于:https://www.cnblogs.com/lianyonglove/archive/2007/04/02/697350.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值