阿里云服务器开发总结(2014-08-25)

阿里云服务器开发总结(这2周工作总结)

1、阿里云暂时只提供C#和Java的sdk,所以需要编写C++代码去调用Dll,以前学习过DLL的显式链接和隐式链接使用两种方式,在工作中加强了对DLL的灵活使用,DLL还分为32位和64位,因为DLL导出的函数指针有32位和64位之分。所以要编译32位和64位下不同版本的DLL来供客户来使用。

2、学习了用C#编写COM组件,网上教程不少,几点注意事项,

2.1 所要导出的类必须为公有

2.2 要导出的属性、方法必须使用接口方式,如果没有在接口中声明,即使 该方法为公有,也不能正常导出到COM中,导致外部调用出错。

2.3 要导出的类必须继承于接口,常识。

2.4 大家都知道COM是需要注册的。注册时要加密钥文件.SNK。进入VS2008 命令提示符。用命令:sn –k MyCom.snk 回车。在vs2008的命令行目 录里面就生成snk文件,将文件拷贝到自己工程目录下。

2.5 打开AssemblyInfo.cs 在里面加入[assembly:AssemblyKeyFile("MyCom.snk")]

2.6 修改项目属性 (1)项目属性->应用程序->程序集信息->选中“使程序 集COM可见”。(2)项目属性->生成->选中“为COM互操作注册”。

2.7 生成。如果在Debug下有一个MyCom.tlb,那你就成功了,如果没有生成,可以使用.Net FrameWork 下的RegAsm.exe这个工具来注册一下。

3、在C++中使用COM组件出现了不少问题。

3.1 使用Import将tlb导入到工程中

3.2 alioos_com::IMyOosInterfacePtr m_pAliOss;声明接口类型指针,使 用m_pAliOss.CreateInstance()函数对指针进行初始化,切记在此之前一定调用CoInitialize(NULL);来初始化COM组件,接下来判断
m_pAliOss是否为NULL,如果为空,接下来调用自然会失败。

3.3 正常调用COM组件中的自己编写的函数即可。

4、文件的上传下载,分块上传和分块下载以及获取文件大小函数的问题。

分块下载开始的时候,使用Stream的Read函数将文件数据从Stream读取到自定义数据缓冲区中。

分块上传的流程和思想:

1) Initiate Multipart Upload: 初始化一个Multipart Upload事件        客户端通知OSS要上传一个大文件,OSS返回给客户端一个唯一标识这次Multipart上传事件的Upload ID。

2) Upload Part:上传数据块

3) Complete Multipart Upload:完成一个Multipart Upload事件,在上传完所有的数据块到OSS上之后,我们就可以要求OSS在服务器端将指定的某个Upload ID所属的数据块组合成最终的文件。

在获取文件大小函数上出现了点问题,开始写的GetFileSize的代码没有什么问题,但是在循环调用2次以上的时候,获取文件大小的函数失败了,一直在找原因在哪里,错误可能发生在C++调用COM组件的时候,也可能是COM组件中获取文件大小的函数失败了,后来把COM组件相关函数代码注释只返回一个数值函数调用成功了,问题指出阿里云提供的api有问题,无语啊。开始的时候,根本就没怀疑过阿里的api会出现问题。质疑可能出现问题的原因,分析相关代码搞懂相关内容,然后去验证心里的想法。

文件读写类中的Read函数,使用安全数组m_pAliOss->Read(m_BucketName,m_Key,fileoffset,&psa,nNumberOfBytesToRead);

HRESULT SafeArrayResult = SafeArrayAccessData(psa, (void **)&pbuf);

memcpy(lpBuffer,(void*)pbuf,nNumberOfBytesToRead);

SafeArrayUnaccessData(psa);

在使用安全数组的时候,加强了指针和缓冲区的理解。SafeArrayAccessData这个函数是将缓冲区的指针返回给第二个参数,如果需要考虑安全数组中的数据,还需要使用memcpy函数将pbuf所指向的缓冲区中的数据拷贝到我们自己的缓冲区中。

在项目开发前期,会制定一个函数接口规范,先按照函数接口去实现函数功能,保持接口参数和返回值的统一性,后期有其他项目需求的时候,再对接口进行完善,对函数内部代码进行优化。

自己编写的代码自己要学会做单元测试,测试下功能模块是否实现了指定功能,不要想当然,自己动手测测就知道了。单元测试很重要。

5、在解决问题的过程中要大胆的质疑,认真的分析,在了解清楚每行代码的基础上,不放过可能有问题的代码。

6、以后写代码的时候要多加点错误处理和日志输出,方便以后有问题的时候进行调试排除错误。

7、最后在读取数据的时候还出现了点问题,首先我要读1M的数据,就一定要确认是否读取到了1M的数据,开始时我想当然以为读取到了1M的数据,其实只读取到了5000b左右而已,最后采用的循环读取流中制定长度的数据才解决。

(C++)CComBSTR ->wchar* ->(C#)String,当调用DLL时使用的是不同的语言,那么就涉及到不同语言数据类型之间的转换,这点需要注意下。

8、当文件下载成功以后,为了确保下载到的数据是否正确,将文件下载到本地与源文件进行比对,看看有什么不同的地方。从网络上读取的数据写入本地文件中,居然和源文件内容有差别,猜测如果前面有一个字符错位了,那么后面的字符都会错位导致错误。

在将音频或者视频数据写入文件中,最好使用二进制方式来进行写入。

代码在我的空间资源里,QQ:1078285863

如果有志同道合的朋友,欢迎一起交流技术,呵呵

时间: 2024-08-10 16:11:43

阿里云服务器开发总结(2014-08-25)的相关文章

阿里云服务器不能发邮件,禁用25端口的解决办法

前阵子刚刚买了个阿里云服务器,在做发送邮件功能时,发现本来在本地测试没问题的功能,在服务器上连接超时. 后来发现是阿里云将25端口禁用了("坑!当然也有其道理"),大概2016年9月后买的服务器都被禁用.25禁用了,我们就不用它.以163邮箱为例: 网易163免费邮箱相关服务器信息: 我这里用的就是SSL协议端口465,代码如下 <?phpheader("content-type:text/html;charset=utf-8");include("

Linux学习之阿里云服务器java开发环境的搭建(一)

在公司实习期间一直是在windows上面进行java开发,然后打成war包部署在linux服务器上面,linux服务器上面的正式环境和测试环境都是别人搭建好的,svn服务器也是别人搭建好的,抱着一种学习的心态的就去买了个阿里云服务器于是开始搭建java开发环境. 1.jdk的安装 我先是在官网下载了最新的jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 因为我的系统的ce

linux 下 VNC Server安装配置及 eclipse CDT C/C++ 开发环境搭建(我用的是阿里云服务器 ubuntu 12.04 64-bit,无图形化界面)

linux 下 VNC Server安装配置及 eclipse CDT C/C++ 开发环境搭建(我用的是阿里云服务器 ubuntu 12.04 64-bit,无图形化界面): 既然要用 eclipse 可视环境下开发,那首先要安装图形界面喽!!! 对开发者来说,个人认为 linux 选择界面优先选择顺序:Awesome(性能最好) > Xfce4 > gnome > unity-2d //////////////////////////////////////////////// 首先

阿里云服务器25端口禁用之如何使用Java发邮件(解决25端口禁用问题)

通常我们在本地使用Java发送邮件,通常是没有问题的,但是部署到服务器的话,就可能遇到问题.当然了,这与运营商也有关系.比如我之前在咖啡主机上购买虚拟机,然后将个人网站部署上去,通常是没有问题的,没有那么多限制. 但是在阿里云上限制就比较多,比如如果端口的入口方向不开的话,可能导致你在服务器上安装的某款软件,例如常用的Tomcat,会无法使用. 一来端口没有开放,二来白名单设置问题. 今天说说阿里云服务器25端口禁用之如何解决它并成功发送邮件,首先贴完整代码,如下所示: package com.

阿里云服务器 发送邮箱 STMP 25端口 465端口问题 Javamail 25被禁用

我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JDK1.8换到了JDK1.7 还是不行,所以这里排除了JDK的原因. 那么问题来了,是否25端口不能连接适用喃? 然后在终端输入命令行 ,可测试25端口是否可连接. telnet smtp.163.com 25 返回成功 说明你的服务器 是没有封掉25端口的.上面的图是我自己的电脑,当然能连通. 当换到服务器测试的

使用阿里云服务器写shell脚本发送qq邮件的三个形式

[准备工作] IPtables的使用如下命令:(执行以下以下命令把25和465端口打开) iptables -A INPUT -p tcp --dport 25 -j ACCEPT iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT iptables -A INPUT -p tcp --dport 465 -j ACCEPT iptables -A OUTPUT -p tcp --sport 465 -j ACCEPT 要先开启 经过以上的三步我们就可以

阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7)

1.效果图 1 2. 部署步骤 1 1. mysql安装附加(centos7) 7 3.错误注意****** 10 1.效果图 2.部署步骤 链接 http://jingyan.baidu.com/article/870c6fc31218e8b03fe4be16.html 首先安装apachecentos可以直接yum安装apache ?. 命令:yum install httpd ? //根据提示,输入Y安装即可成功安装? 然后启动apache,并且设置系统让?Apache 开机自动启动. 命

阿里云服务器,数据库热备、暖备、冷备实战-镜像篇(域环境下配置)

阿里云服务器 值得信赖 概述 “数据库镜像”是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中.建议使用不同位置的两台服务器来承载.在同一时刻,其中一台上的数据库用于客户端访问,充当“主体服务器”角色:而另一台则根据镜像会话的配置和状态,充当热备份服务器,即“镜像服务器角色”,这两种角色不是绝对的. 优点 l 增强了数据保护功能 l 提高了数据库的可用性 l 提高了生产数据库在升级期间的可用性 工作方式 在

阿里云服务器云数据库免费体验(Java Web详细实例)

一.效果展示 博主部署了两个war包到阿里云服务器上,一个是没有连接数据库的,另外一个是连接了数据库的. (由于阿里云服务器免费使用15天,下面链接约2016年3月9日后无效) (1)无数据库版访问地址:http://120.25.235.171:8080/web_exception_project-0.0.1-SNAPSHOT/login.jhtml 只能用luoguohui,123456登录,在controller写死了. (2)有连接数据库版访问地址:http://120.25.235.1