您的位置:首页 > 其它

解决WIN2003安全性问题的一点经验

2010-10-25 00:08 225 查看
本人开发一个采集程序,主要功能是收集终端的数据,然后再通过WEBSERVICE把数据写入到第三方公司的数据库中;程序写好后同终端及第三方公司的WEBSERVICE联调通过,布署到本公司的一台电脑上运行,以配合我司终端试用;日前,客户采购我司终端正式使用,需要把采集程序布署到第三方公司的一台服务器上;没想到联调通过,并且在本公司电脑上运行多日功能也正常的采集程序,在第三方公司的服务器上运行后却功能不正常,具体地说就是调用WEBSERVICE保存数据异常,经过反复对比测试,最后发现问题在操作系统上,采集程序如果部署在WINXP、WIN2003标准版上,都没有问题,但第三方公司的服务器是WIN2003,保存就出现异常;WINXP、WIN2003标准版和WIN2003企业版有什么不同呢?应该只是安全策略方面不同,WIN2003企业版安全性更高;本人对操作系统的安全设置不十分了解,所以虽然想到了问题之所在,却还是不知道解决办法;最后还是通过网上搜索找到了设置方法(这里要特别感谢互联网,每次碰到自己不能解决的问题时,都是通过网上搜索找到方法的)如下:
在我的电脑->属性窗体上,选择高级标签页,在性能一栏中点击设置按钮,在弹出窗体上选择数据执行保护标签页,这里有两种选择都可以解决问题:
一、选择第一个选项:仅为基本WINDOWS程序和服务启用DEP(T);
二、仍然还是选择第二个选项:为除下列选定程序之外的所有程序和服务启用DET(U);但要点击下面的添加按钮,把采集程序加到列表中;
需要说明的是:WINXP、WIN2003标准版默认是选择第一项的,而WIN2003企业版默认是选择第二项的;
我告诉客户选择第一项,重启电脑后,采集程序工作正常了;但问题到这里还没完,在数据量大的时候,采集程序有丢数据的情况,一查原来是接收数据的处理过程有问题,需要优法;于是就进行了优法,简单地测试了一下就发给客户更新到服务器上,但奇怪的是又出现了保存异常,这次情况是:采集程序有两个地方调用WEBSERVICE,一处地方出现异常,另一处就不会;难道还是安全性问题吗,应该不是;因为如果是安全性问题的话,应该两处调用都会异常,就象前面的那样;而且在公司同样操作系统的电脑上面测试就没有问题;经过仔细检查代码,迷惑没有彻底解开,但大体定位了问题之所在:
采集程序是用C++BUILDER开发的,在调用每个WEBSERVICE时都要定义一个THTTPRIO类型的变量,采集程序在两处地方,总共要调用三个WEBSERVICE,所以也就要在两处地方,定义三个THTTPRIO类型的变量;两处地方分属于两个类文件,按常规做法,应该把THTTPRIO类型变量定义为类中的变量,但当时遇到了这样一个问题,如果定义在类中,就要把相应的引用文件放到类的头文件中,而要命的是这样做的话,就引起了另一引用该类头文件的源程序文件中的TMESSAGE类型的冲突,THTTPRIO类型的相关引用文件中也有TMESSAGE类型的定义,和普通的MESSAGES.HPP中的TMESSAGE类型定义分不清了,编译就报错(其实这个问题有解决办法,后面会说到,当时没想到);没奈何,只好把THTTPRIO类型变量定义在类的源文件中,这样变量就不属于类中的,而是全局的了;当时还犯了一个致命错误:在随手定义变量时,把两处地方的两个变量命名得相同(采用简单命名法,都命名为了HTTPRIO1),这样就产生了冲突(因为都是全局的,调用时分不清);但为什么有的电脑有问题,有的就没有(即使操作系统的版本相同),接收数据过程优法之前没问题,优法之后就有问题(同一台电脑),这就是前面所谓的迷惑没有彻底解开的地方;总而言之,通过把THTTPRIO类型变量定义到类中,并通过在TMESSAGE类型前面加MESSAGES::修饰符解决类型定义的冲突后,就没有问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: