ASP与ActiveX控件交互实战(一)

龙卷风

关键字 :ASP,ActiveX 控件 , 数字签名 , 安全

ActiveX 控件运行在客户端。我们可以获得客户端的一些信息,如 IC 卡的信息 , 客户端的验证等等。但是 ActiveX 控件也有许多缺点:客户端的部署很困难,如客户端不能正确下载,下载了以后不能正确执行,下载的时候需要设置 IE 的安全级别等等。

更多的时候,我都在使用 COM 组件来扩展 ASP 的功能。准确地说,是服务端运行的 Activex Dll 组件。使用 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 控件接口向导 …, 菜单 -> 外接程序 -> 外接程序管理器 ->VB 6 ActiveX 控件接口向导。确定即可。

打开 ActiveX 控件接口向导,下一步,对于可用名称和选定名称我们默认下一步,新建自定义成员, GetInfo 类型 : 属性,下一步,共有方法中选择我们刚才添加的 GetInfo, 映射到控件选择 TxtInfo, 成员选择 Text, 下一步直到完成。代码窗口中会生成一些我们不需要的,删除,剩下的代码如下:

Option Explicit

' 注意!不要删除或修改下列被注释的行!

'MappingInfo=txtinfo,txtinfo,-1,Text

Public Property Get GetInfo() As String

GetInfo = txtinfo.Text

End Property

Public Property Let GetInfo(ByVal New_GetInfo As String)

txtinfo.Text() = New_GetInfo

PropertyChanged "GetInfo"

End Property

' 从存贮器中加载属性值

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

txtinfo.Text = PropBag.ReadProperty("GetInfo", "Text1")

End Sub

' 将属性值写到存储器

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)

Call PropBag.WriteProperty("GetInfo", txtinfo.Text, "Text1")

End Sub

OK, 好了,我们编译成 fOcx.ocx 文件,然后 F5 直接运行 ,VB 会打开一个测试页。如下:

E:\Program Files\Microsoft Visual Studio\VB98\UC1.html

同时,打开你的 IE 浏览器 , 看到了吧,你做的控件出现在了这个测试页中。

你可以打开测试页,可以看到 ClsID, 比如: 890D1028-298B-45CF-9A64-6ED5A5BACBC9

因为 VB 编译的时候已经完成注册 . 所以无法模拟客户端没有安装该控件时出现的提示 .

我们继续

使用 regsvr32 F:\csdn_vb\com+_activeX\sample1\fOcx.ocx –u 卸载

或者

打开注册表 , 在 HKEY_CLASSES_ROOT\CLSID 下面找到

890D1028-298B-45CF-9A64-6ED5A5BACBC9 项 , 删除之 , 当然这种方式还有项存在而没有删除干净 .

此时浏览 http://yang/uc1.htm, 由于 IE 中 ActiveX 设置为启动 ,所以,控件会显示出来。

下载后的 ocx 到哪里去了 ???

打开该目录 ( 可能有所不同 )E:\WINDOWS.0\Downloaded Program Files, 看到了吧 ,fOcx.UC1 文件在这个目录下 .

原理 : 客户端下载该控件后 , 自动注册 , 然后放在上述这个目录下 . 这时我们可以打开注册表看看 CLSID, 呵呵 , 还是以前的那个 .

我们可以右键看看 fOcx.UC1 的属性 , 看看相关内容 , 这里显示了该 OCX 所依赖的所有文件 . 所以 , 你的 OCX 尽量减少使用高级控件或者第三方的控件 , 否则 , 下载就有些问题了 .

如果 IE 中关于 ActiveX 的选项设为禁用 , 那么浏览器就会出现对话框 ” 当前安全设置禁止运行该页中的 ActiveX 控件 . 因此可能无法正确显示该页 ” ,这个就需要其他的方式来处理了。

一般用户默认的都是禁用 ActiveX 选项 , 所以让用户自己设置不太合适。

未完待续

Published At
Categories with Web编程
Tagged with
comments powered by Disqus