项目需求:读取阿里云数据库数据,通过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. CentOS6.5 安装vncserver实现图形化访问

    一. 安装gnome图形化桌面 #yum groupinstall -y "X Window System" #yum groupinstall -y "Desktop& ...

  2. vue添加页面键盘事件

    我司开发项目,用的是vue+elementUI,做登陆页面的时候,点击enter键的时候要实现和点击登陆按钮一样的功能,所以就百度了一下,于是一通百度之后,就在点击按钮上面直接添加了@keyup.en ...

  3. Python字符串练习

    1. 确定一个字符串中有多少个元音字母 def getCount(inputStr): return len([a for a in inputStr if a in "aeiou" ...

  4. int 和 Integer

    现状1+1=?,不加思索2.有一个数字要存储在程序里,不加思索int.那为什么java要弄一个Integer类型出来?有什么用?怎么用?差别在哪儿?度娘说java提供了两种数据类型,一种是值类型,一种 ...

  5. 《HTTP权威指南》读书笔记(一)

    1.因特网上有数千种不同的数据类型,HTTP仔细地给每种要通过Web传输的对象都搭上了名为MIME类型的数据格式标签.WEB服务器会为所有HTTP对象数据附加一个MIME类型.当Web浏览器从服务器中 ...

  6. 三、后门的编写和 ShellCode 的提取

    第三章.后门的编写和 ShellCode 的提取 (一)IP 和 Socket 编程初步 NOTES: 1.Windows 下网络通信编程的几种方式 第一种是基于 NetBIOS 的网络编程,这种方法 ...

  7. Queue 队列的使用

    队列一个先进先出的对象集合 public class PlayChickTopicData : MonoBehaviour { Queue<TopicData> topicDatas = ...

  8. 微信小程序上传后发布或者体验版测试无数据解决办法

    在做微信小程序开发的过程中,发现小程序在本地调用接口的数据都显示,但是上传之后,发现手机体验没有数据.以下为解决办法: 1.先清除缓存试试. 2.打开微信小程序工具右上角的详情——项目设置,将“不校验 ...

  9. 通用Mapper的各个方法描述,参考官方

    下面是通用Mapper的各个方法描述,主要还是看官方的描述https://mapperhelper.github.io/all/. 基础接口 Select 接口:SelectMapper<T&g ...

  10. 文件IO 相关的包:java.io文件——API

    文件IO 相关的包:java.io文件——API 1.Java.io.File类的使用(1)两种路径绝对路径:相对于当前路径:当前为 “工程名”(2)File类创建,对象为一个文件/目录,可能存在或不 ...