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

龙卷风

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

问题提出 :

ActiveX 控件得到客户端的信息,如何传递到服务端 ???

一种方法就是得到值后 , 使用 Get,Post 方式提交 , 这可能也是最常用的 .

有没有更好一些的方法呢 ?

能不能在控件中直接向服务器发出请求而得到数据呢 ?

打开 vb6, 新建 ActiveX 控件工程。

工程名 :fOcx ,用户控件名 :UC3

添加 1 个按钮, 2 个文本框

代码如下:

Option Explicit

Private Sub Command1_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

End Sub

'AsyncReadComplete 事件用来从 asp 页面接受和分析。

' 当容器刚完成一个异步读取请求时 , 发生该事件 ?

'AsyncProp 中的数值指定了已完成的某个异步数据读取请求 ,

' 它与前一个 AsyncRead 方法调用中的数据匹配。

'AsyncReadComplete 事件过程中应包含错误处理代码,因为错误状态会终止下载。

' 如果发生了这种情况,当访问 AsyncProperty 对象的 Value 属性时将会发生错误。

Private Sub UserControl_AsyncReadComplete(AsyncProp As AsyncProperty)

On Error GoTo errhandle

Text2.Text = ByteArrayToString(AsyncProp.Value)

errhandle:

Err.Raise 601, " 异步读取发生了错误 ", Err.Description

End Sub

' 将字节数组转换成字符串

Public Function ByteArrayToString(bytArray() As Byte) As String

Dim sAns As String

sAns = StrConv(bytArray, vbUnicode)

ByteArrayToString = sAns

End Function

我们来看看 http://yang/xml/activex.asp 这个文件

 1 
 2
 3dim str 
 4
 5str=request("s1") 
 6
 7if str="name" then 
 8
 9response.write ("  龙卷风  ") 
10
11elseif str="age" then 
12
13response.write ("26") 
14
15else 
16
17response.write ("  没有可用信息返回  ") 
18
19end if 

很简单,使用 request 接受参数 ,response 返回。

这个例子可以进一步处理,将服务器名以属性的方式传递给控件。

比如:

1<param name="ServerName" value="192.168.0.1 "/>

然后在程序中得到,就可以使用了,如:

UserControl.AsyncRead "http://192.168.0.1/xml/activex.asp?s1=" & Text1.Text & "", vbAsyncTypeByteArray

然后在程序中得到就可以灵活处理了。

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