第二步:建立服务器端计算器组件
下一步,建立服务器端的用来完成计算操作的组件。打开Visual Basic 6,建立一个新的ActiveX DLL工程。
这个组件和SOAP Toolkit中的“Using a Low Level API for SOAP Messages”这个例子程序是相同的,但是我们把工程的名字改成了SOAPCalc。如果你没有安装Visual Basic,也可以直接下载编译过的CalcServ安装程序(见参考)。安装程序将复制并注册所有需要的文件。本文后面的zip包中有这个例子的VB代码,以及编译好的DLL文件。
这个演示程序通过SOAP reader对象读取进入的请求。然后,它将检查请求中的SOAP封装是否包含叫做<Add><Subtract>, <Multiply> 或 <Divide>的节点,以及两个子节点<A>和<B>。如果找到了,它将处理请求,并且通过serializer返回SOAP消息和ASP的Response对象。
因为Flash的XML解析器不能处理XML标记的名称空间,所以,需要使用单一的结构。
一般的SOAP主体是这样的:
<SOAPSDK1:AddResponse xmlns:SOAPSDK1="uri:Calc"> <SOAPSDK1:Answer>12</SOAPSDK1:Answer> </SOAPSDK1:Response> |
但是,由于前述的理由,我们不能直接使用这样的结构。而应该用下面这样Flash支持的语法形式。这种形式包容了同样的数据,只是没有SOAPSDK的名字空间和标记前缀而已。
<AddResponse> <Answer>12</Answer> </AddResponse> |
做这些改变,首先应该从这个模块的代码前端的声明部分去掉下面这行:
Const CALC_NS = "uri:Calc" |
然后,要告诉SOAP Serializer不使用特定的名字空间。把这段代码:
... Serializer.startBody Serializer.startElement MethodName & "Response", CALC_NS Serializer.startElement "Answer", CALC_NS ... |
修改成这样:
... Serializer.startBody Serializer.startElement MethodName & "Response" Serializer.startElement "Answer" ... |
好了,现在可以编译DLL了。然后IIS服务器上注册它。(在控制台或是run对话框中使用regsvr32.exe命令,形式是:regsvr32 DLL所在路径\DLL文件名)