仓酷云
标题:
ASP网页编程之ASP与ActiveX控件交互实战
[打印本页]
作者:
逍遥一派
时间:
2015-1-16 22:13
标题:
ASP网页编程之ASP与ActiveX控件交互实战
当然了,现在国内CRM厂商的产品与其说是CRM,但从至少从我的角度分析上来看,充其量只是一个大型的进销存而已了,了解尚浅,不够胆详评,这里只提技术问题active|activex|交互|控件
关头字:ASP,ActiveX控件,数字署名,平安
ActiveX控件运转在客户端。我们能够取得客户真个一些信息,如IC卡的信息,客户真个考证等等。可是ActiveX控件也有很多弱点:客户真个部署很坚苦,如客户端不克不及准确下载,下载了今后不克不及准确实行,下载的时分必要设置IE的平安级别等等。
更多的时分,我都在利用COM组件来扩大ASP的功效。正确地说,是服务端运转的ActivexDll组件。利用Server.CreateObject(“工程名.类名”)便可完成对组件的挪用。这类体例成绩很少,只需组件中以PUBLIC对外表露办法既可。可是,偶然候我们必需利用ACTIVEX控件(*.OCX)嵌进到网页中实行来猎取客户真个信息。这就有了许很多多的一些成绩。
这是我们必要办理的N个成绩(从复杂到难)
1.怎样从服务端猎取数据,传送到ActiveX控件中。
1)初始化时利用参数绑定
2)运转时失掉数据
2.ActiveX控件失掉客户真个信息,怎样传送到服务端。
3.平安性
1)数字署名
2)利用IOBJSAFE接口
好了,我们入手下手实例进修。
这个功效演示了怎样制造一个复杂的控件,并嵌进网页中实行。
事情情况:WINXP+VB6+IE6
我的IE平安设置为平安级别-中。一切的Activex选项设为启用。
翻开vb6,新建ActiveX控件工程。
工程名:fOcx,用户控件名:UC1
为了便利,我们利用ActiveX控件接口导游…,菜单->外接程序->外接程序办理器->VB6ActiveX控件接口导游。断定便可。
翻开ActiveX控件接口导游,下一步,关于可用称号和选命名称我们默许下一步,新建自界说成员,GetInfo范例:属性,下一步,共无方法当选择我们方才增加的GetInfo,映照到控件选择TxtInfo,成员选择Text,下一步直到完成。代码窗口中会天生一些我们不必要的,删除,剩下的代码以下:
OptionExplicit
注重!不要删除或修正以下被正文的行!
MappingInfo=txtinfo,txtinfo,-1,Text
PublicPropertyGetGetInfo()AsString
GetInfo=txtinfo.Text
EndProperty
PublicPropertyLetGetInfo(ByValNew_GetInfoAsString)
txtinfo.Text()=New_GetInfo
PropertyChanged"GetInfo"
EndProperty
从存贮器中加载属性值
PrivateSubUserControl_ReadProperties(PropBagAsPropertyBag)
txtinfo.Text=PropBag.ReadProperty("GetInfo","Text1")
EndSub
将属性值写到存储器
PrivateSubUserControl_WriteProperties(PropBagAsPropertyBag)
CallPropBag.WriteProperty("GetInfo",txtinfo.Text,"Text1")
EndSub
OK,好了,我们编译成fOcx.ocx文件,然后F5间接运转,VB会翻开一个测试页。以下:
E:ProgramFilesMicrosoftVisualStudioVB98UC1.html
同时,翻开你的IE扫瞄器,看到了吧,你做的控件呈现在了这个测试页中。
你能够翻开测试页,能够看到ClsID,好比:890D1028-298B-45CF-9A64-6ED5A5BACBC9
由于VB编译的时分已完成注册.以是没法摹拟客户端没有安装该控件时呈现的提醒.
我们持续
利用regsvr32F:csdn_vbcom+_activeXsample1fOcx.ocxCu卸载
大概
翻开注册表,在HKEY_CLASSES_ROOTCLSID上面找到
890D1028-298B-45CF-9A64-6ED5A5BACBC9项,删除之,固然这类体例另有项存在而没有删除洁净.
此时扫瞄http://yang/uc1.htm,因为IE中ActiveX设置为启动,以是,控件会显现出来。
下载后的ocx到那里往了???
翻开该目次(大概有所分歧)E:WINDOWS.0DownloadedProgramFiles,看到了吧,fOcx.UC1文件在这个目次下.
道理:客户端下载该控件后,主动注册,然后放在上述这个目次下.这时候我们能够翻开注册表看看CLSID,呵呵,仍是之前的谁人.
我们能够右键看看fOcx.UC1的属性,看看相干内容,这里显现了该OCX所依附的一切文件.以是,你的OCX只管削减利用初级控件大概第三方的控件,不然,下载就有些成绩了.
假如IE中关于ActiveX的选项设为禁用,那末扫瞄器就会呈现对话框”以后平安设置克制运转该页中的ActiveX控件.因而大概没法准确显现该页”,这个就必要其他的体例来处置了。
一样平常用户默许的都是禁用ActiveX选项,以是让用户本人设置不太符合。
我们来看看怎样从服务端猎取数据,传送到ActiveX控件中。
1)初始化时利用参数绑定
2)运转时失掉数据
翻开vb6,新建ActiveX控件工程。
工程名:fOcx,用户控件名:UC2
为了便利,我们利用ActiveX控件接口导游…,菜单->外接程序->外接程序办理器->VB6ActiveX控件接口导游。断定便可。
翻开ActiveX控件接口导游,下一步,关于可用称号和选命名称我们默许下一步,新建自界说成员,GetInfo范例:属性,下一步,共无方法当选择我们方才增加的GetInfo,映照到控件选择TxtInfo,成员选择Text,下一步直到完成。代码窗口中会天生一些我们不必要的,删除,
注重!不要删除或修正以下被正文的行!
MappingInfo=txtinfo,txtinfo,-1,Text
PublicPropertyGetGetInfo()AsString
GetInfo=txtinfo.Text
EndProperty
PublicPropertyLetGetInfo(ByValNew_GetInfoAsString)
txtinfo.Text()=New_GetInfo
PropertyChanged"GetInfo"
EndProperty
PrivateSubCommand1_Click()
Label2.Caption=GetInfo()
EndSub
从存贮器中加载属性值
PrivateSubUserControl_ReadProperties(PropBagAsPropertyBag)
txtinfo.Text=PropBag.ReadProperty("GetInfo","Text1")
EndSub
将属性值写到存储器
PrivateSubUserControl_WriteProperties(PropBagAsPropertyBag)
CallPropBag.WriteProperty("GetInfo",txtinfo.Text,"Text1")
EndSub
编译成OCX控件.运转天生的测试页.Text中默许的是Text1
怎样将服务器真个数据传送给OCX呢?
利用MicrosoftActiveXControlPad这个工具,能够很简单找到.
间接用这个工具把测试页翻开.
菜单->Edit->EditActivexControl,呵呵,翻开了一个可视化的界面.
看到了吧,有一个属性框,我们能够举行设置,设置完成今后的代码以下:
<HTML>
<HEAD>
<TITLE>NewPage</TITLE>
</HEAD>
<BODY>
<OBJECTID="GetClient"WIDTH=507HEIGHT=440
CLASSID="CLSID:890D1028-298B-45CF-9A64-6ED5A5BACBC9"
CODEBASE="http://localhost/xml/fOcx.ocx">
<PARAMNAME="_ExtentX"VALUE="13414">
<PARAMNAME="_ExtentY"VALUE="11642">
<PARAMNAME="GetInfo"VALUE="这是ocx失掉的客户端读卡器的信息">
</OBJECT>
</BODY>
</HTML>
增添了ID,ID就是我们用来会见的标记.另有我们的属性GetInfo,我们也设定初始值了
好了,运转.
Text中就呈现了我们设定的值”这是ocx失掉的客户端读卡器的信息”
我们把上边的页面改成asp的,看代码:
<HTML>
<HEAD>
<TITLE>龙卷风测试页</TITLE>
</HEAD>
<BODY>
<%
dimsValue
sValue="这是ocx失掉的客户端读卡器的信息"
%>
<OBJECTID="GetClient"WIDTH=507HEIGHT=440
CLASSID="CLSID:56DFCA88-F5B8-4879-853B-97FE504423FD"
CODEBASE="http://localhost/xml/fOcx.ocx">
<PARAMNAME="_ExtentX"VALUE="13414">
<PARAMNAME="_ExtentY"VALUE="11642">
<PARAMNAME="GetInfo"VALUE="<%=sValue%>">
</OBJECT>
</BODY>
</HTML>
OK,运转便可
我们看看第二种情形
运转时失掉数据
<HTML>
<HEAD>
<TITLE>龙卷风测试页</TITLE>
<%
dimsValue
sValue="这是ocx失掉的客户端读卡器的信息"
%>
<SCRIPTID=clientEventHandlersJSLANGUAGE=javascript>
<!--
functionbutton1_onclick()
{
GetClient.GetInfo=<%=sValue%>;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<OBJECTID="GetClient"WIDTH=507HEIGHT=440
CLASSID="CLSID:56DFCA88-F5B8-4879-853B-97FE504423FD"
CODEBASE="http://localhost/xml/fOcx.ocx">
<PARAMNAME="_ExtentX"VALUE="13414">
<PARAMNAME="_ExtentY"VALUE="11642">
</OBJECT>
<INPUTid=button1type=buttonvalue=Buttonname=button1LANGUAGE=javascript>
</BODY>
</HTML>
运转后,点击按钮便可看到效果.
成绩提出:
ActiveX控件失掉客户真个信息,怎样传送到服务端???
一种办法就是失掉值后,利用Get,Post体例提交,这大概也是最经常使用的.
有无更好一些的办法呢?
能不克不及在控件中间接向服务器收回哀求而失掉数据呢?
翻开vb6,新建ActiveX控件工程。
工程名:fOcx,用户控件名:UC3
增加1个按钮,2个文本框
代码以下:
OptionExplicit
PrivateSubCommand1_Click()
注重字符串和数字的写法有些区分
利用AsyncRead经由过程HTTP发送你的哀求
UserControl.AsyncRead"http://yang/xml/activex.asp?s1="&Text1.Text&"",vbAsyncTypeByteArray
UserControl.AsyncRead"http://yang/xml/activex.asp?s1="&Text1.Text,vbAsyncTypeByteArray
EndSub
AsyncReadComplete事务用来从asp页面承受和剖析。
当容器刚完成一个异步读取哀求时,产生该事务?
AsyncProp中的数值指定了已完成的某个异步数据读取哀求,
它与前一个AsyncRead办法挪用中的数据婚配。
AsyncReadComplete事务过程当中应包括毛病处置代码,由于毛病形态会停止下载。
假如产生了这类情形,当会见AsyncProperty工具的Value属性时将会产生毛病。
PrivateSubUserControl_AsyncReadComplete(AsyncPropAsAsyncProperty)
OnErrorGoToerrhandle
Text2.Text=ByteArrayToString(AsyncProp.Value)
errhandle:
Err.Raise601,"异步读取产生了毛病",Err.Description
EndSub
将字节数组转换成字符串
PublicFunctionByteArrayToString(bytArray()AsByte)AsString
DimsAnsAsString
sAns=StrConv(bytArray,vbUnicode)
ByteArrayToString=sAns
EndFunction
我们来看看http://yang/xml/activex.asp这个文件
<%
dimstr
str=request("s1")
ifstr="name"then
response.write("龙卷风")
elseifstr="age"then
response.write("26")
else
response.write("没有可用信息前往")
endif
%>
很复杂,利用request承受参数,response前往。
这个例子能够进一步处置,将服务器名以属性的体例传送给控件。
好比:<PARAMNAME="ServerName"VALUE="192.168.0.1">
然后在程序中失掉,就能够利用了,如:
UserControl.AsyncRead"http://192.168.0.1/xml/activex.asp?s1="&Text1.Text&"",vbAsyncTypeByteArray
然后在程序中失掉就能够天真处置了。asp可以使用微软的activeX使得网页功能无比强大,不过安全性也较差,而且是基于的windows服务器,所以性能稳定性也一般
作者:
简单生活
时间:
2015-1-18 23:18
我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
作者:
若天明
时间:
2015-1-24 12:21
ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
作者:
若相依
时间:
2015-2-1 11:52
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
作者:
爱飞
时间:
2015-2-7 04:45
在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。
作者:
冷月葬花魂
时间:
2015-2-20 14:20
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
作者:
老尸
时间:
2015-3-6 18:17
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
作者:
小魔女
时间:
2015-3-13 05:10
还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。
作者:
乐观
时间:
2015-3-20 13:51
学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2