虽然Biztalk Server提供了众多的内置功能然而在一些情况下可能还需要调用程序集中的函数因为在Net程序集中可以非常方便地调用Web Service访问数据库另一方面有些函数是程序集中已经写好的为了增加软件的复用便于软件版本的管理使用现有的程序集也在情理之中
本文通过一个简单实例介绍Biztalk应用中调用程序集的方法这个实例完成的功能在调用Web Services一文中实现过只不过实现的方式用所差别一个是调用Web Service一个是调程序集
首先我们创建一个MyFunction的项目其中只包括一个的类文件class我们要在Biztalk中调用该类的CheckUserId静态方法class的源程序如下
using System;
namespace MyFunction
{
public class UserManager
{
public UserManager()
{
}
public static string CheckUserId(string strUserId)
{
if (strUserId == fengfangfang)
{
return Administrator;
}
else
{
return User;
}
}
}
}
为程序集设置强名称和发布Net程序集到全局程序集缓存可参见将程序集安装到全局程序集缓存(GAC)中一文
然后创建一个Biztalk Server工程CallFunction添加一个UserInfoxsd其结点结构如下
UserInfo
UserId
RoleName
快速升级UserId和RoleName两个子字段元素具体步骤可参见调用Web Services一文
下面创建一个业务流程MainOrchodx在业务流程视图中创建两个消息InMsg和OutMsg这两个消息均使用CallFunctionUserInfo消息类型在业务流程中创建一个接收操作ReceiveInMsg一个发送操作SendOutMsg在二者之间创建一个消息赋值操作AssignOutMsg同时会产生一个构造消息操作命名为ConstructOutMsg构造的消息为OutMsg设置ReceiveInMsg激活为True
为工程CallFunction添加Net引用找到MyFunctiondll添加到引用中编写AssignOutMsg的表达式如下
OutMsg = InMsg;
OutMsg(CallFunctionPropertySchemaRoleName)= MyFunctionUserManagerCheckUserId(InMsg(CallFunctionPropertySchemaUserId));
创建一个接收端口InPort用于连接接收操作一个发端端口OutPort用于连接发送操作两个端口均使用MicrosoftBizTalkDefaultPipelinesXMLTransmit管道接收地址为c:\in\*xml发送地址为c:\out\%SourceFileName%
编译并布署Biztalk Server工程CallFunction启动CallFunctionMainOrch业务流程进行测试
测试文件fengfangfangxml
<ns:UserInfo xmlns:ns=>
<UserId>fengfangfang</UserId>
<RoleName></RoleName>
</ns:UserInfo>
输出为
<ns:UserInfo xmlns:ns=>
<UserId>fengfangfang</UserId>
<RoleName>Administrator</RoleName>
</ns:UserInfo>
测试文件fengffxml
<ns:UserInfo xmlns:ns=>
<UserId>fengff</UserId>
<RoleName></RoleName>
</ns:UserInfo>
输出为
<ns:UserInfo xmlns:ns=>
<UserId>fengff</UserId>
<RoleName>User</RoleName>
</ns:UserInfo>
参考文章
文章 调用Web Services sp;
文章 将程序集安装到全局程序集缓存(GAC)中
文章 架构和实例的验证 sp;
文章 如何快速创建架构 sp;
文章 需要强名称程序集