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

前言

  这是这个系列的终结篇,前面3个博客介绍了一下内容:

  1、使用Http Post方式调用Web Service

  2、客户端框架之数据转换层

  3、客户端框架之代理层

框架结构

  框架是基于C#的,在VS2010中搭建出来的,解决方案搭建完毕之后的框架结构如下图:

  

  如上图,框架主要分数据层Data,数据转换成FCL,代理层Proxy,功能分发层Dispatcher以及界面层UI。

  1、数据转换层FCL

    数据格式转换层,位于在Proxy服务代理层和UI界面层之间。在UI层使用的都是明确的实例对象(比如User对象、Project对象),通过FCL层的  转换变成Json数据格式的字符串,然后代理层得到字符串,作为服务接口的参数。代理层通过服务接口方法得到Json数据之后,同样通过DFC层转换  成相应的实力对象,然后绑定到UI上。

    IDFC是数据转换接口,DFC_Project和DFC_User类是接口IDFC的实现类。

    

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 }

IDFC

    

 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 }

DFC_User

    

 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 }

DFC_Project

  2、代理层Proxy

    代理层,主要工作是调用服务接口,为UI层服务,同时还要处理Web Service的权限认证以及数据传输安全(SSL)。

    主要包括Http工具类HttpHelper,类的实现可以参考【客户端框架之代理层】。ProjectProxy中就是代理函数的实现。

    

 1 namespace ProjectmsMGT_Proxy
 2 {
 3     public class ProjectmsProxy
 4     {
 5         private readonly string Url = "http://59.68.29.106:8087/IFT_Project.asmx";//通过配置文件获取Web Service地址
 6         private readonly string requestParaKey = "paramaters";//服务端所有接口函数统一的参数名
 7         private HttpHelper httpHelper;
 8
 9         public ProjectmsProxy()
10         {
11             //初始化
12             Initialize();
13         }
14
15         private void Initialize()
16         {
17             httpHelper = new HttpHelper(this.Url, this.requestParaKey);
18         }
19
20         /// <summary>
21         /// 使用Get方式调用WebService,不带参数
22         /// </summary>
23         /// <param name="methodName"></param>
24         /// <param name="parasJsonStr"></param>
25         /// <param name="requestType"></param>
26         /// <returns></returns>
27         public string Excute(string methodName, string parasJsonStr, string requestType)
28         {
29             return httpHelper.CreateHttpGet(methodName, false);
30         }
31
32         /// <summary>
33         /// 默认使用Post方式调用WebService,带参数
34         /// </summary>
35         /// <param name="methodName"></param>
36         /// <param name="parasJsonStr"></param>
37         /// <returns></returns>
38         public string Excute(string methodName, string parasJsonStr)
39         {
40             return httpHelper.CreateHttpPost(methodName, parasJsonStr, false);
41         }
42
43         /// <summary>
44         /// 默认使用Post方式调用WebService,不带参数
45         /// </summary>
46         /// <param name="methodName"></param>
47         /// <returns></returns>
48         public string Excute(string methodName)
49         {
50             return httpHelper.CreateHttpPost(methodName, null, false);
51         }
52     }
53 }

ProjectmsProxy

  3、功能转发层Dispatcher

    主要任务是调用Proxy为UI层服务。函数分发层只有一个方法Excute,参数字符串methodName、IDFC数据格式转换接口实例对象以及List<Object>对象。主要工作是使用IDFC将参数List<Object>序列化成Json字符串,然后将methodName和Json传给Proxy中的Post方法。

    其中有个RemoteMethodName类,这个类中记录着所有需要远程调用的接口函数的名字。FunctionDispatcher就是功能转发类的Excute方法的实现,这个类在整个项目中只需要一个。

    

1 namespace ProjectmsMGT_Dispatcher
2 {
3     public class RemoteMethodName
4     {
5         public readonly static string GetProjectInfoById = "GetProjectInfoById";
6         public readonly static string Project = "Project";
7         public readonly static string Project_no = "Project_no";
8     }
9 }

RemoteMethodName

    

 1 namespace ProjectmsMGT_Dispatcher
 2 {
 3     public class FunctionDispatcher
 4     {
 5         private ProjectmsMGT_Proxy.ProjectmsProxy proxy = new ProjectmsMGT_Proxy.ProjectmsProxy();
 6
 7         public List<Object> Excute(string methodName, IDFC idfc, List<Object> paras)
 8         {
 9             string jsonParas = idfc.Object2Json(paras);
10             string jsonResult = proxy.Excute(methodName, jsonParas);//默认使用Post方式
11
12             return idfc.Json2Object(jsonResult);
13         }
14
15         public List<Object> Excute(string methodName, IDFC idfc)
16         {
17             string jsonResult = proxy.Excute(methodName);
18
19             return idfc.Json2Object(jsonResult);
20         }
21     }
22 }

FunctionDispatcher

  4、界面层

    界面层主要就是在界面调用的实例了,

 1 FunctionDispatcher dispatcher = new FunctionDispatcher();
 2 IDFC dfc = new DFC_User();
 3
 4 List<Object> filterList = new List<Object>();
 5 filterList.Add(new UserFilter
 6 {
 7      UserID = "0206001",
 8      UserName = "ceshi"
 9 });
10
11 filterList.Add(new UserFilter
12 {
13      UserID = "0206002",
14      UserName = "ceshi2"
15 });
16
17 List<Object> resultProjects = dispatcher.Excute(RemoteMethodName.Project, dfc, filterList);
18
19 foreach (var item in resultProjects)
20 {
21     User user = item as User;
22     this.richTextBox1.Text += user.UserID + ":" + user.UserName + "\n";
23 }

总结

  设计完了代理层,数据转换层,Dispatcher层之后,如果有了新的模块,我们需要做的就是设计UI层,数据层Data,对数据对象实现一个IDFC实现类,在RemoteMethodName类中添加接口函数名常量,这样代码人员的工作就很轻松,需要添加的代码很少。这个框架的主要好处就是模块扩展性好,开发效率高。

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

时间: 2024-08-09 15:38:30

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

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

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

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

引言 要使用WebService来分离客户端与服务端,必定要使用约定好两者之间的数据契约.Json数据以其完全独立于语言的优势,成为开发者的首选.C# JavaScriptSerializer为Json与Object对象之间的序列化与反序列化提供了良好的方法. 接口设计 数据转换包含Json反序列化成Object对象和Object序列化成Json数据.在项目中,会有很多实例对象,都需要使用Serialize和Deserialize方法来实现数据转换,我们可以抽象出一个接口IDFC(数据格式转换接

基于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,新

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

android自定义view-打造圆形ImageView(四)终结篇

前言: 说实话,这段时间忙着修改毕业论文,好长时间没有碰代码了,真是罪过呀.今天我们就来奉上我们打造圆形ImageView的终结篇,以后如果还有新的创意再说啦.本文是在前面三篇的基础上得来的,详细请戳android自定义view-打造圆形ImageView(一).android自定义view-打造圆形ImageView(二).android自定义view-打造圆形ImageView(三). 效果图: 正文: 其实看了上面的效果图,大家应该都一目了然了,就是很多应用经常见到的带有白色边缘的渐变头像