1. 功能描述
UCML之上ESB是一个轻量级的服务总线,它的内容包括服务注册、服务元数据管理、消息路由、ESB代理调用、本地直接调用、性能监控、日志插件、消息中间件、服务数据消费组件(BC)等功能。通过UCML企业服务总线UCML-ESB,完成底层业务服务整合,可以使企业内部多个系统之间交互需要的业务逻辑、数据等都是以服务的形式完成, UCML-ESB同时提供ESB代理调用服务机制和去中心(去ESB)调用两种模式,来满足现在流行的去中心分布式服务模式。

下面内容将介绍如何利用UCML如何注册服务、调用服务、如何把服务数据装配成BC数据、完成增删改查的过程
2. 准备工作
按照【UCML开发访问数据的WCF服务过程】章节准备一个wcf服务程序,并确保启动
3. 服务注册
服务注册过程在UCML开发平台IDE之上完成,目前UCML支持服务包括webservice、wcf和本地类库,服务注册过程包括服务地址uri输入、服务类型、负载平衡模式和代理类库等内容的填写。服务注册完之后要发布到运行环境中,才可以生效。下面就以前面章节开发出的读取人员数据服务http://localhost:8818/UCMLCommon.UCML_CONTACT?WSDL为例,讲解在UCML如何注册服务和试用服务做成增删改查的例子。
1) 新建企业服务总线管理器
在UCML左侧对象上项目包类的根节点上点击右键菜单,选择【企业服务总线管理器】菜单项,就可以建立注册服务总线用的目录,如下图:

2) 服务注册
如上图所示,在【企业服务总线管理器】上点击出右键菜单,选中【添加服务注册】菜单项,添加一个新的服务注册,服务注册内容填写可按下面步骤完成
填写服务地址
首先要填写服务地址:http://localhost:8818/UCMLCommon.UCML_CONTACT?WSDL,要确保服务宿主程序启动,服务是否启动成功可以点击【服务测试】按钮进行测试。
引入服务元数据模型
UCML可以引入服务元模型数据,同时形成函数列表和输入输出参数列表,这样后期UCML平台在使用服务函数时可以方便的做对象传值映射。
点击【执行引入】按钮,可以获取元模型数据,就自动填充函数列表、参数列表,同时也填【服务名称】、【代理类名称】等录入项,如图:

生成服务代理文件并编译成Dll文件
为了方便可以调用服务,UCML通常要把服务接口生成代理类,并编译成Dll,注册项的【部署名称】,就是必须要填写这个Dll文件名称(不包含Dll后缀),生成代理文件的过程可以在UCML解决方案下:
· 添加【.Net源码类项目】
· 添加一个【服务引用代理类】
· 在这类的里面添上【服务地址】http://localhost:8818/UCMLCommon.UCML_CONTACT?WSDL
再点击【生成代理文件按钮】:由于编码问题,可以手动清除头部标题乱码
· 在源码生成和编译这个工程,就可以得到这个Dll文件。
如下图描述操作过程:
· 添加【.Net源码类项目】

· 添加一个【服务引用代理类】

· 在源码生成和编译这个工程,就可以得到这个WSProxy.Dll文件。
在服务注册里填写代理类部署dll名称
把代理类名称“WSProxy”填入录入项【部署名称】
发布服务注册
在【企业服务总线管理器】上点击出右键菜单,执行【服务注册信息导出】菜单项

至此一个完整服务已被发布服务总线上,下面将介绍如何使用注册好的服务。
4. 去中心模式使用服务
去中心模式调用,就是不通过ESB总线服务远程代理调用,而是由UCML底层创建服务调用示例,本地程序直接调用远程服务,好处是服务既到了统一管理,又可以高效调用。
一个注册好的服务,在UCML里可以有3种用法,一是当作普通函数调用,二是可以装配在BC上使用,三是可以装配在BC列上使用,也是BC上的个别列可以直接读写服务总线函数
1) 直接调用服务的函数
我们演示在一个表单中,添加一个业务动作函数,这个函数接收Web端GRID的当前行主键和人员姓名,通过调用服务中的Load函数,并返回人员姓名到客户端,这个过程分为:
添加一个动作函数
定义这个函数的参数是key,代表当前人员的主键,通过点击下拉按钮【自动节点功能装配】的下拉菜单项【ESB服务编排】,弹出对话框,选取UCML.Service.UCML_CONTACT服务,和选择Load函数,

完整函数代码如下:
public string TestBusMethod(string key, string PersonName)
{
UCMLCommon.Auth auth = new UCMLCommon.Auth();
UCML.Service.UCML_CONTACTClient objService = (UCML.Service.UCML_CONTACTClient)UCMLCommon.ESB.Service.CreateESBService(auth, "UCML.Service.UCML_CONTACT");
UCML.Service.UCML_CONTACTInfo info = new UCML.Service.UCML_CONTACTInfo();
info.UCML_CONTACTOID = new Guid(key);
Int32 result = objService.Load(ref info);
objService = (UCML.Service.UCML_CONTACTClient)UCMLCommon.ESB.Service.CreateESBService(auth, "UCML.Service.UCML_CONTACT");
info.PersonName = PersonName;
objService.Update(info);
return info.PersonName;
}
其中UCMLCommon.ESB.Service.CreateESBService(auth, "UCML.Service.UCML_CONTACT")用来根据服务ID:"UCML.Service.UCML_CONTACT",来创建客户端服务实例,就可以象本地类一样使用服务接口函数了。
2) 服务数据装配成BC,完成服务数据对象(SDO)组装
接下介绍一个非常重要的功能,就是如何把服务函数提供的数据自动化装配成BC,不但能够完成翻页功能,还以接收前端的查询条件。操作步骤分为建立一个来源于虚表【virtualtable】的BC
然后通过选择函数返回的结构自动映射成BC 的列,同时也自动装配ReadData函数的实现,具体操作如下:
选择virtualtable形成一个BC
选择服务总线上的函数装配成BC列和读取函数

通过上图操作,产生下图结果:

在全局引用库引用WSProxy.dll

生成服务对象BC源码编译

根据BC建立列表VC,再装配成BPO
装配的ReadData代码可以自动完成翻页功能

服务对象BC如何接收前端查询条件
服务BC 也可以接收来自查询组件和查询列表的查询条件,通过解析ReadData的参数defaultSQLCondi和string defaultFieldList,string defaultValueList,string defaultCondiIndentList,
可以获取查询VC和GRID查询漏斗传过来的参数名称和参数值,再传给服务函数,就可以完成服务函数的条件查询功能了。
5. ESB中心模式使用服务
ESB中心模式就是指用UCML_ESB.EXE服务程序,代理调用服务,然后由UCML_ESB服务程序返回结果给客户端。UCML支持部署多个UCML_ESB服务程序,完成集群部署、负载平衡功能,解决单点部署压力集中的问题,由于由UCML_ESB统一调用服务,所以对服务效率和日志都有统一管理方案。下面从如何配置和启动UCML_ESB、客户端如何调用服务等几方面介绍中心模式的ESB使用。
1) ESB服务程序启动
UCML服务总线的程序名是UCML_ESB.EXE,缺省是在BPObject\bin目录下,也可以放在流程引擎bin下,都可以运行起来,可以安装成windows服务或者用命令行启动,命令行启动模式为:
UCML_ESB.EXE –t 0
2) UCML_ESB服务的发布地址
UCML_ESB服务程序可以多地址发布,用来完成UCML_ESB的集群部署
修改UCML_ESB服务器发布地址所在目录下的UCMLCONF.XML文件,添加服务器地址配置节点,如下:
<UCML_ESBSERVER_URL>
<uri>http://localhost:8808/UCMLCommon.ESB.ESBService</uri>
<weight>80</weight>
</UCML_ESBSERVER_URL>
<UCML_ESBSERVER_URL>
<uri>http://localhost:8809/UCMLCommon.ESB.ESBService</uri>
<weight>80</weight>
</UCML_ESBSERVER_URL>
缺省地址为:http://localhost:8808/UCMLCommon.ESB.ESBService
客户端调用服务函数原型为:
public static object InvokeDRWCF(Auth auth, string ServiceName, string MethodName, string binding, params object[] args) 函数调用UCML_ESB总线中配置的服务。该服务共五个参数:
Auth:权限认证信息。
ServiceName:服务名称
MethodName:请求服务函数名称
Binding:绑定通信协议方式
Args:所需请求服务函数参数
调用示例
UCMLCommon.Auth auth = new UCMLCommon.Auth();
UCMLCommon.ESB.Service.InvokeDRWCF(auth, "UCML.Service.HTServiceClient", "FinishContract", "nettcpbinding",new object[] { new Guid(param.TestContractKey)} );
另外UCML_ESB对外也发布成了Webservice接口:http://localhost:8808/UCMLCommon.ESB.ESBService?WSDL
public interface IESBService
{
[OperationContract]
RequestData Invoke(Auth auth, string ServiceName, string MethodName, RequestData[] args);
}
通过Webservice也可以直接调用上述接口
评论
暂无评论!