WebService接口技术在项目中应用

  • 格式:pdf
  • 大小:2.29 MB
  • 文档页数:4

文章编号:1007-1423(2019)15-0083-04 DOI: 10. 3969/j. issn. 1007-1423. 2019. 15. 017WebService接口技术在项目中应用王惠媛(中国电建集团北京勘测设计研究院有限公司,北京100024)摘要:随着业务需求、信息化技术的发展,各类应用系统间的数据交互、高效部署等需求日益突出。

采用W e b S e r v i c e平台,通过接口调用方式,跨J a v a、.N E T两类不同框架平台,实现本单位管理系统与外部订票系统的单点登录、数据集成工 作,完成本单位人员订票信息与内部报销、差旅审批流程的无缝对接。

关键词:数据交互;接口调用;单点登录;We b S e r v i c e0引言W e b S e r v i c e平台是一套标准,它定义了应用程序 如何在W e b上实现互操作性。

W e b S e r v i c e是基于网络 的、分布式的模块化组件,它执行特定的任务,遵守具 体的技术规范,这些规范使得W e b S e r v i c e能与其他兼 容的组件进行互操作'它可以使用标准的互联网协议,像超文本传输协议H T T P和X M L,将功能体现在互 联网和企业内部网上。

在实际工作中,各类系统间的数据交互、高效部署 的需求日益突出,本文采用W e b S e r v i c e平台,通过接口 调用的方式,很好地解决了本单位与外部订票系统间 的订票、数据交互应用需求。

1应用描述本次应用基于W e b S e r v i c e技术,米用S O A P标准,双方约定统一 J S O N数据格式。

外部订票系统作为服 务器端将订票人身份信息、票证信息组织成约定数据 格式,本单位管理系统作为客户端通过S O A P进行远 程过程调用(R P C),实现了本单位人员账号与外部订 票系统的单点登录集成、订票信息进人本单位管理系 统数据库,完成了基于不同技术平台的数据对接交互。

员工通过本单位管理系统账号,登录本单位管理 系统,并通过管理系统集成的订票链接进行订票。

员工进人汀票系统链接过程中,客户端发出一条S O A P 消息,此消息包括加密的员工账号信息,服务器接收此 S O A P消息,根据规则解析此S O A P消息,并进行身份 信息认证,认证通过后,进人外部订票系统,实现员工 凭本单位系统账号即可单点登录外部订票系统。

本单位管理系统,通过J a v a定时服务的方式,定时 向外部订票系统发送请求,外部订票系统响应请求,验 证请求通过后,返回汀票结果消息,本单位根据约定规 则解析执行结果,将解析出的订票数据进行数据对比,依据对比结果完成订票数据的人库。

本单位报销、差旅审批流程启动时,管理系统根据 报销、差旅人员身份信息匹配数据库中订票数据,将数 据自动加载至报销、差旅审批单中,实现了本单位内部 审批流程与外部订票系统的数据对接、与数据再利用,免去了订票信息的重复填报,大大提升了本单位报销、差旅数据的及时、准确性,缩短了流程审批时间,提升 了工作效率。

2核心代码2.1单点登录本单位管理系统作为订票人口,员工通过单点登 录方式进人外部订票系统。

由于本单位管理系统底层 系采用.N E T框架,为满足性能稳定的需求,故单点登 录功能采用C#语言进行开发。

员工点击本单位管理系统的订票链接,即向外部现代计算机2019.05下 ®订票系统发送S O A P请求。

员工的姓名、公司I D、员工 编号、登录名等信息被封装为J S O N数据对象,此数据 对象通过H T T P进行传输。

外部订票系统接收请求,即根据双方约定格式对接收的J S O N数据对象内容进 行解析。

外部订票系统根据解析出内容,进行身份认 证,身份认证通过后,返回J S O N格式数据对象。

本单 位管理系统依据双方约定格式再次进行解析,解析出 外部订票系统的目标地址,从而实现本单位管理系统 与外部订票系统的单点登录功能。

核心源代码如下:string url = “http://IP:端口/api.svc/Login”;//Webservice 月艮务器地址HttpWebRequest req = (HttpWebRequest) HttpWebRequest. Create(url);//创建 SOAP 请求req.Method = “POST”; //POST 请求方式req.ContentType = “application/json;charset=UTF-8”: //Json 标准var data = new {imestam = imestam,companyld = companyld, staffCode = MstaffCode, realName = MrealName, password = password, imestamp = imestamp,passwordType = “0” };//圭士装人员信息为Json对象string request = JsonConvert.SerializeObject(data); "Json 对象准为请求字符串byte[] bytes = Encoding.UTF8.GetBytes(request);//请求字符串 转为字节req.ContentLength = bytes.Length; //计算字节长度Stream requestStream = req.GetRequestStream();"调用请求数据流方法requestStream.Write(bytes,0, bytes.Length); //数据流写人字节 requestStream.Flush ();//推送数据流requestStream.Close(); //数据流关闭HttpWebResponse resp = ( HttpWebResponse) req.GetResponse ();//获取服务器响应StreamReader reader = new StreamReader (resp.GetResponse- Stream (),System.Text.Encoding.UTF8); // 调用读取数据流方法var result = reader.ReadToEnd();//读取数据流reader.Close(); //读取数据流关闭resp.Close( ); //请求关闭req.Abort( ); //释放请求var t = JsonConvert.DeserializeAnonymousTypei result, new{c-ode = string.Empty,description = string.Empty,url = string.Empty,sessionld = string.Empty |); // Json 字符串匿名转换为 Json对象Jobject obj = Jobject.Parse (result);var backurl = Newtonsoft J son. Li n q.Jobject. P arse (result);//获取Json对象中链接地址obj_re = backurl[“url”]; //返回 json 中的 url 地址2.2数据入库外部订票系统作为服务器端,采用的是J a v a框架,而本单位管理系统作为客户请求端,为了更好的稳定 性、兼容性,数据读取人库采用了 j a v a语言编程,并将 编写好程序部署于T o m c a t,采用定时运行的方式,向外 部订票系统发送数据读取请求,对返回的请求消息按 约定规则进行解析,并将解析出的订票数据进行人库。

T o m c a t定时运行,解析包含认证信息的配置文件,向外部订票系统发送请求。

请求成功后,将包含:目标 地址、公司I D、员工姓名、员工编号等身份认证信息的 数据流,推送至外部订票系统。

外部订票系统,接收所 推送数据流,按双方约定格式解析数据流,并进行身份 认证,认证成功后,按约定〗S O N格式返回数据对象。

本单位管理系统按双方约定格式解析此数据对象,并 按照本单位管理系统数据存储规范进行数据人库,从 而完成了本单位员工订票信息自动人本单位管理系统 功能。

核心源代码如下:ResourceBundle resource = ResourceBundle.getBundle ( 4<〇〇11- fig”); //读取认证信息配置文件String TextMYLogin = resource.getStringf 4*MYLogin_URLM); String companyId=resource.getString( “companyld”);String imestam二resource.getString( “imestam”);String staffdode=resource.getString( “staffCode” );String realName=resource.getString( “realName”);String key=resource.getString( “key”);if (requestcount<=5 ) {try {//发送POST请求URL url = new URL(TextMYLogin);HttpURLConnection connection = (HttpURLConnec- tion) url.openConnection();connection.setDoOutput (tm e);connection.setDoInput( true);connection.setRequestMethocK ''POST' );现代计算机2019.05下connection.setUseCaches( false);connection.setlnstanceFollowRedirects (true);connection.setRequestProperty ( “Content- Type’’,“text/json: charset=l)TF-8”);//对方为 json 接收参数格式connection.setDoInput( true);connection.setConnectTinieout( 20000);connection.connect ();//组织POST请求内容DataOutputStream out = new DataOutputStream (con­nection.getOutputStream( ));SimpleDateFormat df = new SimpleDateFomiat (“yyyyMMddHHmmssSSS”);//设置日期格式String imestamp=df.format(new Date());System.out.println( **imestamp:,+imestamp);String[] infos = new String[] j companyld, imestam, imestamp, key);Arrays.sort (infos, String.CASE—INSENSn’IVE_0R-DER);Guid util=new G uid();String imestam=util.getShal (String.fomiat (*4%s%s% s%s \ infos));otnng json = |\ + companyld + \ :\ +company-1(1+ \,+\ + imestam + \ :\ +imestam+ \ , +“\”’’+’’staffCocle”+”\+s ta f fC(>d e+’’\”,”+“\”’+”password”+”\”:\””+imestam+”\”,”+\ + imestamp + \ :\ +imestamp+ \ , +real N ame +r e a l N a m e++out. w riteBytes (json);out.flu.sh();out.close();//读取返回请求消息Buffered Reader reader = new Buffered Reader (new InputStreamReader(connection.getlnputStreaml )));String lines;StringBuffer sb = new StringBuffer( );while ((lines = reader, r ead L i n e()) != null) {lines = new String! lines.getBytes( ), **utf-8 ');sh.ap|)end( lines);}reader.close();connection.disconnect();//获取返回的结果code 10000成功JSON Array jsonArrav = JSONArray.fromObject (**[4+ S b+T);JSONObject code = json A rray.getJSONObject(O);String Logincode = code.getString( ^code");sessionld = code.getStriiig(“sessionI(l’);//如果获取到了sessionid并且值为成功则给对方 发送数据否则计算请求次数,重新发送请求大于6次程序 停止if( Logincode.equals(4t 10000 ) && null!=sessionId){logger.infb( “登录请求成功,调用接口返回方 法准备处理数据,并返回对方”);requestcount=0;//可能请求失败之后,全局变 量 requestcount 为5 重置( “登录请求次数:”+requestcount);DataToMy (companyld);//将解析出的订票信 息进行入库处理)else(requestcount=requestcount+1; ( “调用接口失败请求次数:” + re-(juestcount);Myl〇gin();))catc h (MalformedURLException e) {( “登录异常信息为:”+e);e.printStackTrace();)catch (UnsupportedEncodingException e) {logger, i nfo (“登录异常信息为:” +e);e.printStackTrace();)catch (IOException e)(( “登录异常信息为:”+e);e.printStackTrace();))2.3数据利用通过与外部订票系统的数据集成,实现了本单位 票务数据定时入本单位管理系统数据库的功能。