用Visual Basic来创建服务器端组件

Visual Basic是用来开发一个组件最容易和最快的途径,其缺点在于自由线程对象不能用VB来编写,这意味着在这个环境下不适合开发应用范围组件。VB4或VB5都适用,我们的例子使用VB5。

以下步骤是创建一个组件所必须的,它比用Java 少一些步骤,这是因为VB不用类库。

1. 编写源代码。

2. 创建项目。

3. 注册你的组件。

4. 在ASP页中引用组件。

 

编写源代码

启动一个新的VB5 ActiveX DLL项目,因为我们需要创建一个DLL,不存在用户界面。VB显示一个缺省的代码窗口名叫Class1,按F4并将属性表按下面设置:

(Name)VBSoaringSites。

Instancing 5 MultiUse

如果你使用VB4,将Public设置成True,选择Project|Project 1 Properties将项目名改为SoaringSites并选中Unattended Execution 选项。最后单击对话框的Make表栏并选择Auto Increment,按OK键保存设置。

你可能添加一个ASP.DLL作为引用到你项目中去。选择Projects|References并选择Microsoft Activc Pages 1.0 Library,如图28.4所示。我们的VB组件不同于Java组件的一点在于我们不使用OnStartPage和 OnEndPage事件,所以我们可以跳过这个引用。它之所以保存作为例子的一部分是因为你会发现对于其他组件来说,它可能是有用的。

 

 

 

 

 

例表28.4中的代码同Java例子不一样,Java 例子是直接在客户端输出,而这个例子将返回一个字符串给ASP页,然后ASP页显示结果。

在SoaringSites Code窗口中输入源代码,如表28.4所示。请注意Option Explicit。

 

表28.4 VbSoaringSites 源代码


Option Explicit

Public Function ListSoaringSites(sState As String) As String Dim sOutput As String

sOutput = "Requested State: " & sState sOutput = sOutput & "<P>"

If UCase(sState) = "WA" Then sOutput = sOutput _ & "Arlington, WA<BR>" _ & "Burlington, WA<BR>" _ & "Pullman, WA<BR>" _ & "Richland, WA<BR>" _ & "Wenatchee, WA<BR>" _ & "Yakima, WA<BR>" ElseIf UCase(sState) = "WI" Then sOutput = sOutput _ & "<BR>West Bend, WI<BR>" Else sOutput = sOutput & "No sites found for " & sState End If

ListSoaringSites = sOutput


End Function

 

在所有步骤都完成之后,你的工程项目看起来应象图28.5所示。注意你的项目和module名称,因为操作系统使用你输入的这些名称来注册组件。

 

 

构建Dll(动态连接库)

保存你的工作。本CD中的例子使用AspUnleashed\Chapter28\VbSoaringSites作为保存目录。

选择File|Make VbSoaringSites DLL来创建DLL。这个组件将保存在同你保存源代码相同路径下。将此DLL拷贝到SSA站点的Components目录,使用Microsoft Management Console确保这个目录的属性包括Run in Separate Memory space使得你可以在以后安装不同版本的DLL时不需要重起你的计算机(详细情况请见第二章)。

在命令行中通过以下两条命令注册DLL。

cd \ssa\Components

RegSvr32 VbSoaringSites.dll

 

警告

如果这不是你首次注册这个VbSoaringSite DLL,在将新的版本的组件复制到Components目录前首先注销老的DLL,如果不这样做的结果将会导致注册表中加入多重注册信息,从而需要用乏味的RegEdit来清除其他错误的引用。

以下是注销旧的DLL的命令。

cd \ssa\Components

RegSvr32 /unregister VbSoaringSites.dll

 

在页面中使用组件

列表28.5中所显示的代码与Java 组件代码的唯一区别在于它调用了另一个不同的ASP页。列表28.6中显示了更多的代码不同,我们在里面首先提取一个字符串,然后再使用它,因为VB的DLL并不直接向客户端作输出。

 

表28.5 VBSoaringSites.asp


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD> <TITLE>Soaring Sites Results</TITLE></HEAD>

<BODY BGCOLOR="#FFFFFF"><FONT SIZE="2" FACE="Verdana, Arial, Helvetica">

<CENTER><H1>Soaring Sites</H1></CENTER><HR Color="Red">

<FORM ACTION="VBSoaringSitesAction.asp"> Enter a state abbreviation to search for a site: &nbsp; <INPUT NAME="State" SIZE="2"><BR> <INPUT TYPE="SUBMIT"></FORM>


</BODY></HTML>

 

表28.6 VBSoaringSitesAction.asp


<% Option Explicit %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD> <TITLE>Soaring Sites Results</TITLE></HEAD>

<BODY BGCOLOR="#FFFFFF"><FONT SIZE="2" FACE="Verdana, Arial, Helvetica">

<%

Dim oSoaringSites

Dim sSiteList

 

Set oSoaringSites=Server.CreateObject(SoaringSites.vbSoaringSites)

 

Set the string to return value of function

sSiteList=oSoaringSites.ListSoaringSites(Request(State))

 

Response.Write sSiteList Display the result

 

Set oSoaringSites=Nothing De-reference the object

%>

 


</BODY></HTML>