项目需求:读取阿里云数据库数据,通过webservice接口上传给第三方。

概要设计,项目满足以下几点:

1、动态接口调用

2、给多平台上传

3、数据保持(减轻数据库压力)

4、上传任务管理

5、扩展成实时数据服务器

实现方案:

设计1:对于第一个需要我们上传数据的平台给出的借口是webservice接口(不能get/post表单访问的那种),考虑到以后可能会有类似于restful/webapi之类的接口,

所以此处必须采用动态接口调用。目前实现了webservice动态接口访问。关于动态访问,有2中实现思路,第一种:预读取WSDL,动态编译,反射方法,调用。

由于我在项目中实现第一种方法失败了(动态编译时死活不能加载程序集,未解决的问题),因此我用了另外一种思路,通过字符串构造满足soap协议的xml发送给接口。

此处采用了开源的      https://github.com/LiveXY/Pub.Class/blob/master/Pub.Class/Class/WebService.cs

设计2:以后有类似于此项目结构的需求,为了避免重复开发,因此这里定义了上传平台,平台包括接口(全部构建在XML中),动态读取。

但是目前所有的接口都未知,不知道将会是什么结构或者需求,因此这里实现的比较粗糙。但是比较大尺度的隔离了各个平台的操作,因此扩展性也是比较强。

设计3:当需要上传的项目较多,重复索引同一个项目的数据的时候,势必会给数据库服务器造成很大的压力,因此,这里做了数据保持,通过项目的结构形式,将数据保存在内存中,

满足一定的条件才去从数据库读取数据。(为做成实时数据服务器做准备)。但是由于时间 原因,没有继续朝设计5去设计实现。

设计4:系统采用Quartz.net组件实现定时上传作业,使用过程中碰到的坑有关于时区问题和单次触发(triggerJob)无效。在实践中发现时区问题不存在,即时存在也可以通过cronExpress           的合理设置而避免。单词触发无效,我找来了源码,一步步执行下去,发现又没有问题了(amazing!怀疑跟载入的符号系统相关跟动态编译不能载入程序集一样没解决)

关于任务管理,作为第二版的功能实现,此处暂时不实现。

设计5:预计将来扩展成实时数据服务器,开放webservice给外界调用数据,目的为了减轻数据库服务器压力,由于时间原因,暂未实现!

补充:该项目同时使用了log4net组件和Newtonsoft.Json。采用DevExpress实现的简单界面。

log4net使用步骤总结,引用组件、编写log4net配置文件、启动log4net,通过assembly或者log4net.Config.XmlConfigurator.Configure()载入启动、getlogger、写入。

总用时11天。(框架设计4天,业务逻辑代码实现2天,关于任务以及学习Quartz.net2天,webservice动态调用2天,测试和补充log4net写日志1天)

E3Upload项目总结的更多相关文章

  1. Fis3前端工程化之项目实战

    Fis3项目 项目目录结构: E:. │ .gitignore │ fis-conf.js │ index.html │ package.json │ README.md │ ├─material │ ...

  2. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  3. 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目

    最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...

  4. Hangfire项目实践分享

    Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...

  5. Travis CI用来持续集成你的项目

    这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  7. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  8. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  9. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

随机推荐

  1. 360技术笔试编程题 - 无意间看到这么个东西,闲来无事用JS写了一下

    题目描述 为考验各自的数学能力,小B和小A经常在一起玩各种数值游戏,这一次他们又有了一种新玩法.每人从指定的数值范围中各自选择一个整数,记小A选择的数值为a,小B选择的数值为b.他们用一个均匀分布的随 ...

  2. php $_FILES错误说明 以及图片前端图片上传失败。

    我的另一个原文:https://blog.csdn.net/qq_36570464/article/details/80692241 今天被一个问题弄了好久, 先看代码: 前端: <form m ...

  3. JavaScript构造函数原理

    1.var obj={} plainObject 对象字面量/对象直接量2.构造函数创建 1).系统自带的构造函数 Object() var obj=new Object(); 和 var obj = ...

  4. 开发H5页面遇到的问题以及解决

    1.第一个问题就是规范问题,现在边注释边编程以及语义化命名的问题已经基本的改善,页面的层级结构设计也条理了许多,现在的问题就是我对于页面的更深的应用还不够,比如我知道文档流自上而下从左至右,写在下面的 ...

  5. C#字符串的CompareTo比较,让我疑惑的地方

    在学习选择排序算法的时候,用到CopareTo方法.由于比较的数字,是自己随意输入的. 当我输入字符串“8”,它和字符串“16”比较时候. string str1 = "8"; s ...

  6. redis客户端(三)

    redis客户端 一.>redis自带的客户端 启动 启动客户端命令:[root@ming bin]# ./redis-cli -h xxx.xxx.xx.xxx-p 6379 注意: -h:指 ...

  7. 配置DTP

    拓扑一  结果:NO 默认auto(被动)模式 Switch>show interfaces fastEthernet / switchPort Name: Fa0/ Switchport: E ...

  8. yii2 rules 验证规则

    yii2  框架定义的约束 public $builtInValidators = [ 'boolean' => 'yii\validators\BooleanValidator', 'capt ...

  9. for语句,range() 函式

    for 语句在任意序列 (列表或者字符串) 中迭代时, 总是按照元素在序列中的出现顺序依次迭代. 2 ... a = ['cat', 'window', 'defenestrate']3 >&g ...

  10. 一种hyperscan API使用(1)

    hyperscan: 编译和安装:http://www.cnblogs.com/zzqcn/p/4900643.html 简单介绍:http://www.cnblogs.com/zzqcn/p/489 ...