|
小气的神 2001-10-12
好了,终于可以开始使用Microsoft SOAP Toolkit将上面的建立的Bus_Authors转换成一个WebService了,我使用的是Microsoft SOAP Toolkit 2.0 SP2,简单的Version()的我就跳过了,不再废话,MS的随机帮助有这方面的说明。因为我更感兴趣ADODB.Recordset的问题,不过失望的是,使用WSDL Generator产生的WSDL不能支持ADODB.Recordset的类型

产生的WSDL文件中,产生这样的XML:
<message name='Authors.GetAuthors'>
</message>
<message name='Authors.GetAuthorsResponse'>
<part name='Result' type='xsd:???????'/>
</message>
根据随机文档特别是Handling Complex Types一节中的描述,我们需要使用一个Custom Type Mapper(CTM)来处理ADODB.Recordset的格式。先讲一下下面需要做的步骤吧:
1. 生成一个自定义的类型转换类处理ADODB.Reocrdset类型
2. 修改由WSDL Generator产生的WSDL文件。
3. 设置IIS,配置好Authors的WebService
4. 产生客户端测试这个WebService
先来生成ADODB.Recordset 的CTM,主要是实现SOAP Toolkit库中的MSSOAPLib.ISoapTypeMapper接口,这一点上我认为是MS SOAP Toolkit 2.0 的一个重大提高,比起上一个SOAP Toolkit版本更组件化和易于使用,现在你用VB就可以完成这个CTM了,建立一个VB ActiveX DLL项目,拷入下面的代码,(我产生的组件叫AdoTypeMapper.AdoRstTypeMapper)如果另外安装了MS SOAP Toolkit 2.0里面好像有一个这样的ADODB.Recorset的例子。
Option Explicit
Implements MSSOAPLib.ISoapTypeMapper
Private Function ISoapTypeMapper_read( _
ByVal pNode As MSXML2.IXMLDOMNode, _
ByVal bstrEncoding As String, _
ByVal encodingMode As MSSOAPLib.enEncodingStyle, _
ByVal lFlags As Long) As Variant
Dim RecordSet As New ADODB.RecordSet
Dim domdoc As MSXML2.DOMDocument
Set domdoc = CreateObject("Msxml2.DOMDocument")
domdoc.loadXML (pNode.xml)
RecordSet.Open domdoc
Set ISoapTypeMapper_read = RecordSet
Set domdoc = Nothing
End Function
Private Function ISoapTypeMapper_varType() As Long
ISoapTypeMapper_varType = vbObject
End Function
Private Sub ISoapTypeMapper_write( _
ByVal pSoapSerializer As MSSOAPLib.ISoapSerializer, _
ByVal bstrEncoding As String, _
ByVal encodingMode As MSSOAPLib.enEncodingStyle, _
ByVal lFlags As Long, _
pvar As Variant)
Dim xDOM As New MSXML2.DOMDocument
Dim RecordSet As ADODB.RecordSet
Set RecordSet = pvar
RecordSet.Save xDOM, adPersistXML
pSoapSerializer.writeXML (xDOM.xml)
End Sub
你需要引用Microsoft SOAP Type Library(SOAP Toolkit安装目录的\Binaries\MSSOAP1.dll)和Microsoft XML V3.0的引用,然后编译成DLL(比如:AdoRstTypeMapper.dll)。
然后开始配置Server端的WebService。
1. 注册这个DLL . Regsvr32 AdoRstTypeMapper.dll
2. 获得这个组件的PROGID和CLSID,你可以使用OLE/COM Object Viewer工具
PROGID: AdoTypeMapper.AdoRstTypeMapper
CLSID: {0C839C51-81E1-4DBC-AC69-3794E337B5F3}
3. 在C:\Inetpub\wwwroot\Authors目录(上一篇中特别提及的那个目录)Copy由WSDL Generator产生的WSDL和WSML文件到这个目录。
4. 修改Authros.WSDL和Authors.WSML内容。
先改Authros.WSML :
<?xml version='1.0' encoding='UTF-8' ?>
<!-- Generated 10/12/01 by Microsoft SOAP Toolkit WSDL File Generator, Version 1.02.813.0 -->
<servicemapping name='AuthorsDoc'>
<service name='AuthorsDoc'>
<using PROGID='bus_Authors.Authors' cachable='0' ID='AuthorsObject' />
<using PROGID='AdoTypeMapper.AdoRstTypeMapper'
cachable='0'
ID='AdoRstMap' />
<types>
<type name='ADOSoapMap'
targetNamespace='http://tempuri.org/type'
[1] [2] 下一页
|