雖然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;
文章 需要強名稱程序集
From:http://tw.wingwit.com/Article/program/ASP/201311/21716.html