项目需求:读取阿里云数据库数据,通过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. 【SHELL】:定时任务删除指定目录

    现有一个需求,需要定时删除积累过久的目录,并且部分目录不可删除.在此,我们分析了一下该父目录的命名结构:非连续性数字命名,部分目录中包含a.txt文件.如下图所示: 在此,我们对此可作如下操作,获取该 ...

  2. postgresql,封装数据库语句时,查询报错。

    sql = "select password from admin where username = " + "\'" + username + "\ ...

  3. 测试计划的编写6要素(5W1H)

    Why --为什么要进行这些测试 WHat--测试哪些内容 When--测试不同阶段的起止时间 WHere--相应文档,缺陷的存放位置,测试环境 Who--项目有关人员组成 How--如何去做,使用哪 ...

  4. 小程序——如何引入外部js

    当写小程序需要引入一些额外的js文件时,可以这样: 一.先把外部js用一个函数封闭起来: test.js function myfunc() { console.log("myfunc... ...

  5. 什么是混合app?

    APP混合模式和原生模式的优劣 ECSHOP模板/ecshop开发中心(www.68ecshop.com) / 2014-06-27 每当你打算开发移动应用程序时,都要考虑你的应用如何创建以及如何部署 ...

  6. javascript最全最好的判断数组的方法

    var arr = [1,2,3,1]; var arr2 = [{ abac : 1, abc : 2 }]; function isArrayFn(value){ if (typeof Array ...

  7. 查看那些进程使用了swap

    https://blog.csdn.net/xiangliangyu/article/details/8213127$ sudo pacman -S iotop https://blog.longwi ...

  8. Beff的学习

    Beff介绍 BeEF,全称The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具. 首先打开kali,直接点击beef图标打开beef 浏览器会默认弹出 ...

  9. 理解java容器:iterator与collection,容器的起源

    关于容器 iterator与collection:容器的起源 iterator的简要介绍 iterable<T> iterator<T> 关于remove方法 Collecti ...

  10. 树莓派中transmission的blocklist

    /var/lib/transmission-daemon/.config/transmission-daemon/blocklists 使用root账户进入这个目录,新建文件ip ipv4:0.0.0 ...