E3Upload项目总结
项目需求:读取阿里云数据库数据,通过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项目总结的更多相关文章
- Fis3前端工程化之项目实战
Fis3项目 项目目录结构: E:. │ .gitignore │ fis-conf.js │ index.html │ package.json │ README.md │ ├─material │ ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目
最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...
- Hangfire项目实践分享
Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...
- Travis CI用来持续集成你的项目
这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- Angular企业级开发(5)-项目框架搭建
1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
随机推荐
- 面向对象text 01 盖伦vs瑞文vs提莫
''' Text For Class: League of Legends Garen vs Riven vs Teemo ''' import random # 全局随机 import time c ...
- IDEA常用快捷键总结
Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论.每个人都有自己的最爱,想排出个理想的榜单还真是困难.以前也整理过Intellij的快捷键,这次就按 ...
- 添加PROPAGATION_REQUIRES_NEW 事务没有产生作用
最近在做事务添加时 发现自己的事务没有新建,上网查到 仅用作收藏. 其二 注意 事务的注解 应该在 内层的事务上面 一.描述Spring遇到嵌套事务时,当被嵌套的事务被定义为“PROPAG ...
- ubuntu编译安装opencv
简易安装opencv2: conda install --channel https://conda.anaconda.org/menpo opencv 或: sudo apt-get install ...
- 使用sed在匹配行之后增加一行数据
需求:在原来大量的shell文件中,给出了错误信息打印,现在要求打印错误后直接退出脚本. if [ $? -eq 0 ];then echo_green "done!" else ...
- 【EMV L2】终端风险管理(Terminal Risk Management)
终端风险管理使大额交易联机授权,并确保芯片交易能够周期性地进行联机以防止在脱机环境中也许无法察觉的风险. 虽然发卡行被强制要求在应用交互特征(AIP)中将终端风险管理位设置成1以触发终端风险管理,但终 ...
- java中next()和nextLine()的区别
首先,next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键.Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后 ...
- m个小朋友手拉手站成一个圈,从第k个小朋友开始报数,报到n的那个小朋友退到圈外,然后他的下一位重新报“1”。这样继续下去,直到只剩下一个小朋友,求解这个小朋友原来站什么地方。
约瑟夫环问题. package pack; import java.util.*; public class demo_2 { static int a[]; public static void m ...
- Oracle深入学习
一.甲骨文公司介绍 甲骨文公司,是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩.1989年正式进入中国市场. 2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大 ...
- 私有IP
私有IP地址段为10.0.0.0-10.255.255.255,172.16.0.0-172.31.255.255,192.168.0.0-192.168.255.255.