基于.NET Web Service的动态接口设计与实现 

2016-11-07 21:21丁易难
软件导刊 2016年9期

摘要:由于智能手机的普及和社会信息化的不断发展,人们希望能通过手机或者平板的APP对原有B/S架构的信息化系统进行操作,因此这些系统就需要为移动端的APP提供访问系统内部业务逻辑的接口,而如何为APP快速高效地提供这些接口一直是个难题。如果服务器只向外界暴露一个接口,而外部应用只需通过调用该接口就可以完成服务器中所有的业务逻辑,则会大大降低接口的开发时间和成本。该类接口被称为“动态接口”,设计并实现了基于Web Service的动态接口,以提高接口开发效率。

关键词:APP;Web Service;动态接口

DOIDOI:10.11907/rjdk.161484

中图分类号:TP319

文献标识码:A文章编号文

章编号:16727800(2016)009008203

基金项目基金项目:

作者简介作者简介:丁易难(1991-),男,安徽安庆人,西安工程大学计算机科学学院硕士研究生,研究方向为计算机应用开发。

0引言

目前,大部分企业都搭建有自己的信息化平台,B/S架构的跨平台性和易用性,使得B/S架构被广泛应用。然而,随着移动网络技术及移动设备性能的快速发展,“移动办公”越来越受到企业青睐。很多企业都纷纷希望能拥有一个手机APP版的企业信息化平台,该平台向外界提供一个访问系统内部的BLL层(Business Logic Layer)的接口,以便其它形式的用户终端调用。在.NET平台下,一般都是采用微软提供的Web Service技术,向外界暴露接口。一般情况下,系统开发者会在Web Service层里,将系统中BLL层的每个类中的每个方法写一个同样的Web Method为外界终端提供访问内部BLL层的接口。但是,一个系统的业务逻辑众多,会有大量的业务逻辑的对象和方法。使用上述方法,会导致开发人员的工作量巨大。如果能在Web Service里,只写一个Web Method,即在本系统的Web Service层中只向外界提供一个接口,通过外部终端向服务器调用此接口,并传递相关参数,进而“动态地”调用系统内部已实现的各种业务逻辑方法,就会节省开发人员为系统开发接口而耗费的大量的工作时间。鉴于此,本文主要阐述了如何在基于.NET平台的Web Service技术下,完成上述“动态接口”设计与实现。

1相关技术

1.1Web Service

Web Service是一种跨编程语言和跨操作系统平台的远程调用技术[1]。Web Service技术能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范的实施应用, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据[2]。Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费,为整个企业甚至多个组织之间业务流程的集成提供了一个通用机制。

1.2JSON

JSON是一个轻量级的数据交换负载格式[3]。它是基于JavaScript编程语言ECMA-262 3rd Edition-December 1999标准的一种轻量级数据交换格式,主要用于跟服务器进行数据交换。与XML相比,JSON更加简单和灵活[4]。JSON还具有可读性、可扩展性和编码解码难度低等特点。因此,本文设计的基于Web Service的动态接口所传递的参数中,或者返回的结果中若有系统的对象实体Model,则需要将其转成JSON格式的字符串,以方便客户端和服务端解析。

1.3.NET反射技术

反射是C#.Net中获取运行时类型信息的方式[5],它也是.NET中的重要机制,提供了封装程序集、模块和类型的对象(Type类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。

2基于Web Service的动态接口实现原理

如图1所示,“动态接口”的基本实现原理是,客户端在调用Web Service提供的接口时,客户端的代理类会把调用的相关数据封装成SOAP协议(简单对象访问协议)的XML格式,通过HTTP协议向服务器端传递相关参数(例如调用业务逻辑层的名称、方法以及方法参数),服务器端接收到这些参数并解析后,通过使用反射技术,动态地创建要调用业务逻辑的方法所在类的实例,再通过该类的实例调用其方法,最后通过网络将方法的执行结果返回给调用方,从而实现后台业务逻辑的“动态”调用。

3动态接口具体实现

(1)创建Web Service。首先在Visual Stdio中新建一个Web项目,然后新建一个Web Service类(后缀名为.asmx),取名为DyInterface.asmx。

(2)定义WebMethod。实现“动态接口”需要用到.NET的反射机制,而在使用反射技术时,程序需要知道反射调用的是哪个类的哪一个方法,并且调用的方法可能需要传递参数,因此需要在Web Service类中定义这个动态接口的WebMethod时需要定义3个形参:bllName(业务逻辑的类名称)、methodName(要动态调用的业务逻辑类中的方法名称)、param(方法的参数)。具体定义动态接口方法的C#代码如下:

[WebMethod]

public string InVoke(string bllName,string methodName,string param)

{

//ToDo...

}

(3)创建外部客户端需要调用的业务逻辑类的实例。要调用类中的方法,就要获得这个类的实例。传统实例的方法一般是通过关键字new来获得,然而通过new获得类的实例需在程序中事先写好,但是动态接口并不会提前知道客户端需要调用的是哪个业务逻辑类,所以通过传统new的方式获得类实例不能满足本次接口设计需求。因此只有通过形参bllName的值才能知道需要调用是哪一个业务逻辑的类,再利用反射技术,载入业务逻辑层的程序集(BLL),再通过CreateInstance的方法,动态地生成该业务逻辑类的实例。代码如下:

dynamic bll = Assembly.Load("BLL").CreateInstance("BLL" + bllName)

这里利用了C#的动态类型的关键字“dynamic”,来接受创建的业务层的实例。该动态类型是在程序运行期间,动态获取示实例的具体类型,从而避免了类型强制转换的步骤。

(4)解析所调用方法中的具体参数。由于是基于Web Service的动态接口设计,且面向的是不同平台的客户端,因此为了屏蔽不同平台差异性,本次动态接口的param参数定义为string类型。由于本次设计的动态接口只提供了一个调用方法参数的形参(param),这样,当调用业务逻辑层的方法时,需要传递的参数有多个,或者传递的是系统中的对象实体(Model)时,就需要预先约定好参数传递的格式,以便在Web Service中解析它们。因此,参数(param)格式可以这样约定:如果要调用的业务逻辑方法有N个参数,则依次按原方法参数的顺序参数排放好,并以“*”隔开;如果有些参数是系统中的对象实体,则将其转成JSON形式的字符串,并在JSON串前面加一个"@"符号,以区分普通参数与实体对象参数。若要调用的方法没有参数,则传空值。依照上述约定,就可以解析这些参数了,具体代码如下:

List list = new List();

if (!string.IsNullOrEmpty(param)){//判断参数是否为空

string[] pars = param.Split(*);//将参数分开

foreach (string s in pars){//遍历参数

if (s.StartsWith("@")){查询是否有Json格式的model字符串

switch (bllName){ //如果发现有json串,则把json串转成相对应的mode case"业务逻辑类1":

//把处理好的参数加入到list集合中

list.Add(JSONHelper.GetModelFromJSON<业务逻辑类名1.Model>(s.Remove(0, 1)));

case"业务逻辑类2":

//把处理好的参数加入到list集合中

list.Add(JSONHelper.GetModelFromJSON<业务逻辑类名2.Model>(s.Remove(0, 1))); break;

//....Todo(根据系统中具体业务逻辑类的数量自行调整)

default:

list.Add(JSONHelper.GetModelFromJSON(s.Remove(0, 1)));

break;

}

}

else{

list.Add(s);//把处理好的参数加入到list集合中,以便后面调用方法的时候用

}

}

}

这里需要说明的是,程序中在JSON转成实体类中需要传入实体类的泛型,由于泛型不确定,需要在程序中使用switch语句通过判断参数BllName来确定泛型,根据系统业务的具体情况,可添加多个case关键字来判断。上述代码case后面的业务逻辑类和JSON转Model的泛型可以根据不同的系统替换成不同业务逻辑层的名称及其对应的实体类型的泛型。

(5)调用客户端需要调用的业务逻辑方法。利用反射技术,将经过处理后的参数集合list转成Array型,再传入业务逻辑对象实例(bll)中,进而通过methodName的值,动态地反射调用外部客户端想要调用的业务逻辑方法,最后将执行结果以json串的形式返回给系统外部客户端。具体代码如下:

Return JSONHelper.ReturnStringToJSON(bll.GetType().GetMethod(methodName).Invoke(bll, list.ToArray()).ToString(), true, 200)

将上述代码放入第二步所定义的WebMethod的方法体中,最终将该Web Service发布到服务器上,供系统外部终端调用。由第一步命名可知,本次接口的地址为:http://(服务器地址)/DyInterface.asmx。由于各种移动平台都实现了对Web Service进行访问的功能,因而只要客户端拿到该接口的地址,即可按照文中描述的规则对该动态接口进行远程调用。

由以上实现过程可以看到,在本次创建的Web Service中只有一个WebMethod方法,而外部终端只需通过对该WebMethod进行远程调用,然后传递不同的业务逻辑层的类名称(bllName)和类中的方法名称(methodName)以及约定好的格式参数(param),即可完成系统中各种不同的业务逻辑,从而完成本文预期的动态接口设计。

4结语

随着智能手机与网络通信技术的普及,以及社会信息化建设进程的加快,越来越多的已经搭建完成的信息化系统,需要从单一的Web端扩展到各式各样的移动设备APP端,以便用户方便快捷地使用信息化系统的功能。因此,服务器基于Web Service技术向移动设备APP端提供的信息化系统业务接口,这项需求将会越来越多。例如,在已投入使用的西安市毕业生就业服务综合管理系统已经利用此项技术,向正在研发该系统对应的学生模块APP的研发方,提供了这种动态接口。基于Web Service的动态接口设计,系统研发方不再需要对每个业务逻辑提供单独的业务接口,节省了大量时间,极大提高了接口的开发效率。因此,本文设计的基于.NET Web Service技术的动态接口具有较高应用价值。

参考文献:

[1]魏小林,张铁军,曹晶,等.利用Web Service技术构建医院信息系统接口[J].中国数字医学,2014,9(6):2729.

[2]王向方,武伟,唐伟媛.WebService技术在企业中的应用[J].电脑编程技巧与维护,2015(2):9194.

[3]屈展,李婵.JSON在Ajax数据交换中的应用研究[J].西安石油大学学报:自然科学版,2011,26(1):9598.

[4]谷方舟,沈波.JSON数据交换格式在异构系统集成中的应用研究[J].铁路计算机应用,2012,21(2):14.

[5]郭庆华,朱战立.利用C#.Net反射技术实现软件界面动态存储[J].电脑知识与技术,2010(3):634635.

责任编辑(责任编辑:孙娟)

软件开发与应用
BP神经网络在软件质量评价中的应用研究 
基于句子多种特征的相似度计算模型
基于结构方程模型改进ARMA模型参数估计
基于改进遗传算法的软件测试用例自动生成
一种改进的风光互补发电系统MPPT控制方法
发动机内部EGR建模与仿真分析
无线传感器网络定位技术可靠性分析
应用于公司舆情分析的改进概念图算法 
算法与语言
基于兴趣预测和热点分析的联合推荐算法研究 
基于分块DWT和SVD的鲁棒性数字水印算法
基于喷泉码的机会多播调度算法研究
基于矩阵分解的兴趣点推荐算法研究
一种改进的基于位置的推荐算法
八数码问题解法效率比较及改进研究 
一种改进粒子群算法的测试数据自动生成方法
多数据库中的间接关联规则挖掘算法
基于Spark平台的热点话题发现算法并行化研究
LSort字符排序算法研究
软件设计与开发
基于增强现实技术的导航系统研究
风三地面应用系统运维辅助系统设计 
基于VMWARE的市县地震通云平台设计与实现
基于Android—x86的windows恢复系统研究与设计
基于GPS和iBeacon的智能校园信息发布平台设计与实现
Android手机主题设计 
基于ASP.NET的就业见习管理信息系统设计与实现
基于Android的一键智能报警系统设计与实现 
基于.NET Web Service的动态接口设计与实现 
基于社交可视化的高校民族预科学生管理评价系统研究
基于设计模板的锅筒参数化设计系统开发
基于工作流的水运应急信息管理平台设计 
基于无线安全的智能锁具及其软件控制系统 
基于物联网ZigBee技术的智能家居监控系统 
基于WebGIS的“多规合一”辅助决策支持系统设计与实现
基于ASP.NET标准的采购管理系统研究
基于Android的青少年监护系统设计与实现 
基于Android的招生报名系统设计与实现 
一种基于CRM理念的双向推荐就业平台设计
计算机辅助教学网站设计与实现
基于云服务的加密式门禁系统设计
铝材B2B电子商务系统设计与实现 
基于物联网的无线测温模块设计
应用技术与研究
CMMI在智慧校园人事系统开发中的应用 
水下机器人深度控制研究
基于UWB的自主跟随机器人定位方法 
软件项目管理中工期问题研究 
大数据时代网络信息资源开发利用策略研究
国外开放获取平台对我国科技期刊OA发展的启示
基于MapReduce的城市道路旅行时间短时预测 
数据库与信息处理
数据中心服务器运行状态监控系统研究 
语音情感识别综述
基于离散型Hopfield神经网络的联想记忆能力研究 
学生成绩管理系统数据查询优化方法研究 
信息安全
石化工控信息网络安全区域识别与防护
基于Hermite插值的多密钥共享协议 
基于色域差分与伽马校正的交通灯识别 
图像学与辅助设计
一种基于引导滤波和MNF的高光谱遥感图像分类方法
深度学习算法应用于岩石图像处理的可行性研究
一种基于局部直方图匹配的深度编码滤波算法
水下大坝裂缝图像分割方法研究 
计算机与网络教学
基于信息安全等级保护的信息安全综合实训教学研究
国际化高校联盟体系下结构化MOOC框架 
智能手机在大学生移动学习中的应用研究
高校计算机软件专业资格考试辅导教学探讨 
基于工程教育认证的《软件工程》课程教学质量建设研究 
数据库课程微课设计及应用
《Oracle数据库》课程教学模式探究 
Node.js与Express技术在计算机课程教学中的应用 
基于网络资源的《物联网工程导论》课程教学改革
混合学习模式及其实施要点 
Scratch教学研究综述 
《算法设计与分析》课程翻转课堂教学模式探究 
公司地址: 北京市西城区德外大街83号德胜国际中心B-11

客服热线:400-656-5456  客服专线:010-56265043  电子邮箱:longyuankf@126.com

电信与信息服务业务经营许可证:京icp证060024号

Dragonsource.com Inc. All Rights Reserved

icp