主程序怎样调用子程序 调用.net程序集中的方法
调用.net程序集中的方法
虽然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 添加一个UserInfo xsd 其结点结构如下
UserInfo UserId RoleName
快速升级UserId和RoleName两个子字段元素 具体步骤可参见调用Web Services一文
下面创建一个业务流程MainOrch odx 在业务流程视图中创建两个消息InMsg和OutMsg 这两个消息均使用CallFunction UserInfo消息类型 在业务流程中创建一个接收操作ReceiveInMsg 一个发送操作SendOutMsg 在二者之间创建一个消息赋值操作AssignOutMsg 同时会产生一个构造消息操作 命名为ConstructOutMsg 构造的消息为OutMsg 设置ReceiveInMsg激活为True
为工程CallFunction添加 Net引用 找到MyFunction dll 添加到引用中 编写AssignOutMsg的表达式如下
OutMsg = InMsg;OutMsg(CallFunction PropertySchema RoleName)= MyFunction UserManager CheckUserId(InMsg(CallFunction PropertySchema UserId));
创建一个接收端口InPort用于连接接收操作 一个发端端口OutPort用于连接发送操作 两个端口均使用Microsoft BizTalk DefaultPipelines XMLTransmit管道 接收地址为c:in* xml 发送地址为c:out%SourceFileName%
编译并布署Biztalk Server工程CallFunction 启动CallFunction MainOrch业务流程 进行测试
测试文件fengfangfang xml

<ns :UserInfo xmlns:ns = > <UserId>fengfangfang</UserId> <RoleName></RoleName></ns :UserInfo>
输出为
<ns :UserInfo xmlns:ns = > <UserId>fengfangfang</UserId> <RoleName>Administrator</RoleName></ns :UserInfo>
测试文件fengff xml
<ns :UserInfo xmlns:ns = > <UserId>fengff</UserId> <RoleName></RoleName></ns :UserInfo>
输出为
<ns :UserInfo xmlns:ns = > <UserId>fengff</UserId> <RoleName>User</RoleName></ns :UserInfo>
参考文章
lishixinzhi/Article/program/ASP/201311/21716