和調整你的企業和商務系統(Ⅲ:SOAP、WebService、Server)
小氣的神 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