基于Web Service的客户端框架搭建二:数据转换层(FCL)

引言

  要使用WebService来分离客户端与服务端,必定要使用约定好两者之间的数据契约。Json数据以其完全独立于语言的优势,成为开发者的首选。C# JavaScriptSerializer为Json与Object对象之间的序列化与反序列化提供了良好的方法。

接口设计

  数据转换包含Json反序列化成Object对象和Object序列化成Json数据。在项目中,会有很多实例对象,都需要使用Serialize和Deserialize方法来实现数据转换,我们可以抽象出一个接口IDFC(数据格式转换接口)。因为我们不确定每次从服务端获取的数据对象是单个Object还是List<Object>,因此约定WebService返回的Json字符串中被序列化的对象是List<Object>,客户端Post到WebService的参数也是将List<Object>序列化成Json字符串之后值。

  接口设计如下:

1 namespace ProjectmsMGT_FCL
2 {
3     public interface IDFC
4     {
5         string Object2Json(List<Object> models);
6
7         List<Object> Json2Object(string json);
8     }
9 }

接口实现

  在项目中,我们会设计很多的Model类,User、Order、Product、Project、Stock等等,那么针对项目的实际需求,我们可以针对不同对象实现接口IDFC。

  如下是两个对象的实现类:

 1 namespace ProjectmsMGT_FCL
 2 {
 3     public class DFC_Project : IDFC
 4     {
 5         public static JavaScriptSerializer js = new JavaScriptSerializer();
 6
 7         #region IDFC 成员
 8
 9         public string Object2Json(List<Object> models)
10         {
11             return js.Serialize(models);
12         }
13
14         public List<Object> Json2Object(string json)
15         {
16             List<Project> objs = js.Deserialize<List<Project>>(json);
17
18             List<Object> list = new List<object>();
19             foreach (var item in objs)
20             {
21                 list.Add(item);
22             }
23             return list;
24         }
25
26         #endregion
27     }
28 }
 1 namespace ProjectmsMGT_FCL
 2 {
 3     public class DFC_User : IDFC
 4     {
 5         public static JavaScriptSerializer js = new JavaScriptSerializer();
 6
 7         #region IDFC 成员
 8
 9         public string Object2Json(List<object> models)
10         {
11             return js.Serialize(models);
12         }
13
14         public List<object> Json2Object(string json)
15         {
16             List<User> objs = js.Deserialize<List<User>>(json);
17
18             List<Object> list = new List<object>();
19             foreach (var item in objs)
20             {
21                 list.Add(item);
22             }
23             return list;
24         }
25
26         #endregion
27     }
28 }

总结

  数据转换层的设计相对简单,数据转换层的主要工作是实现Json与数据对象之间的序列化与反序列化。为代理层Proxy提供辅助服务,在调用Web Service代理方法之前,将数据对象参数序列化成Json字符串,在调用之后,将Web Service返回的Json字符串反序列化成数据对象,这整个流程在功能分发层Dispatcher完成。

基于Web Service的客户端框架搭建二:数据转换层(FCL)

时间: 2024-08-07 20:52:20

基于Web Service的客户端框架搭建二:数据转换层(FCL)的相关文章

基于Web Service的客户端框架搭建一:C#使用Http Post方式传递Json数据字符串调用Web Service

引言 前段时间一直在做一个ERP系统,随着系统功能的完善,客户端(CS模式)变得越来越臃肿.现在想将业务逻辑层以下部分和界面层分离,使用Web Service来做.由于C#中通过直接添加引用的方来调用Web Service的方式不够灵活,故采取手动发送Http请求的方式来调用Web Service.最后选择使用Post方式来调用Web Service,至于安全性和效率暂不考虑.在学习使用的过程,遇到了很多问题,也花了很长时间来解决,网上相关的帖子很少,如果各位在使用的过程中有一些问题难以解决,可

基于Web Service的客户端框架搭建四:终结篇

前言 这是这个系列的终结篇,前面3个博客介绍了一下内容: 1.使用Http Post方式调用Web Service 2.客户端框架之数据转换层 3.客户端框架之代理层 框架结构 框架是基于C#的,在VS2010中搭建出来的,解决方案搭建完毕之后的框架结构如下图: 如上图,框架主要分数据层Data,数据转换成FCL,代理层Proxy,功能分发层Dispatcher以及界面层UI. 1.数据转换层FCL 数据格式转换层,位于在Proxy服务代理层和UI界面层之间.在UI层使用的都是明确的实例对象(比

基于Docker的TensorFlow机器学习框架搭建和实例源码解读

概述:基于Docker的TensorFlow机器学习框架搭建和实例源码解读,TensorFlow作为最火热的机器学习框架之一,Docker是的容器,可以很好的结合起来,为机器学习或者科研人员提供便捷的机器学习开发环境,探索人工智能的奥秘,容器随开随用方便快捷.源码解析TensorFlow容器创建和示例程序运行,为热爱机器学者降低学习难度. 默认机器已经装好了Docker(Docker安装和使用可以看我另一篇博文:Ubuntu16.04安装Docker1.12+开发实例+hello world+w

Web Service(1):用Web Service实现客户端图片上传到网站

由于项目需要,通过本地客户端,把图片上传到网站.通过webservice. 这是客户端代码: 1 private void btnimg_Click(object sender, EventArgs e) 2 { 3 this.yanzheng(); 4 mylocalhost.MySoapHeader myheader = new mylocalhost.MySoapHeader();///这是soapheader 5 mylocalhost.MyWebService myService =

JAVA开发Web Service几种框架介绍

在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,这是Java6发布所提供的对Web Service服务的一种实现.)前面几项都为开源项目,而其中又以axis2与cxf所最为常用,Axis与XFire已随着技术不断的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis与XFire都已不再更新. 下面就分别介绍下这几个框架之间的区别,以便大家进行更好的选择:

Web Service学习之一:Web Service几种框架

在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,这是Java6发布所提供的对Web Service服务的一种实现.)前面几项都为开源项目,而其中又以axis2与cxf所最为常用,Axis与XFire已随着技术不断的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis与XFire都已不再更新. 下面就分别介绍下这几个框架之间的区别,以便大家进行更好的选择:

简述Web Service通讯技术的搭建流程

Web Service 基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术. 是通过SOAP在 Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册. ---------------------------------------------------------分割线-----直接演示好了------ 一.打开MyEclipse,新

Web Service学习-CXF开发Web Service的权限控制(二)

Web Service如何进行权限控制? 解决思路:服务器端要求input消息总是携带有用户名,密码信息,如果没有用户名和密码信息,直接拒绝调用 解决方案:拦截器 为了让程序员能访问,并修改CXF框架所生成的SOAP消息,CXF提供了拦截器 CXF(Celtix +XFire)说明: 如果不用CXF等框架,SOAP消息的生成,解析都是由程序员负责.无论是添加用户名,密码信息还是提取用户名,密码信息,都可由程序员代码完成. 如果使用CXF等框架,SOAP消息的生成,解析都是由CXF等框架来完成.

WSDL自动生成Web Service java 客户端

引用: 最近做系统间数据导入导出时需要用到web service,所以需要通过wsdl生成java客户端来读取数据. 方法一: 使用xfire eclipse plugin生成java客户端 1 安装xfire eclipse plugin,update site: Java代码   http://dist.codehaus.org/xfire/update/ 2 新建java project: WSTest. 我们用一个免费的web service服务做测试. 这是个手机号码归属地查询的wsd