分享
 
 
 

透视和调整你的企业和商务系统(Ⅲ:SOAP、WebService、Server)

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

透视和调整你的企业和商务系统(Ⅲ: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

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'

uses='AdoRstMap'

iid='{0C839C51-81E1-4DBC-AC69-3794E337B5F3}'/>

</types>

<port name='AuthorsSoapPort'>

<operation name='Version'>

<execute uses='AuthorsObject' method='Version' dispID='1610809347'>

<parameter callIndex='-1' name='retval' elementName='Result' />

</execute>

</operation>

<operation name='GetAuthors'>

<execute uses='AuthorsObject' method='GetAuthors' dispID='1610809349'>

<parameter callIndex='-1' name='retval' elementName='Result' />

</execute>

</operation>

</port>

</service>

</servicemapping>

蓝色字体是你要新增的。ADOSoapMap将被在下面的Authors.WSDL中。

Authors.WSDL 需要修改和新增的:

<types>

<schema targetNamespace='http://tempuri.org/type'

xmlns='http://www.w3.org/2001/XMLSchema'

xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'

xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'

elementFormDefault='qualified'>

<complexType name="ADOSoapMap">

<sequence>

<any/>

</sequence>

</complexType>

</schema>

</types>

将于原来的:

<message name='Authors.GetAuthorsResponse'>

<part name='Result' type='xsd:???????'/>

</message>

修改成下面这样:

<message name='Authors.GetAuthorsResponse'>

<part name='Result' type='typens:ADOSoapMap'/>

</message>

注意红色字体部分,我曾写成type='xsd:ADOSoapMap',结果测试时多花费了许多时间。

然后在IE中测试http://localhost/Authors/Authors.WSDL 看链接是否正常,如果显示正确那么我们开始进行下面的测试了。客户端的测试有两个,一个我在本机用VB EXE测试的,另外一个去另外一部机器使用一个dotNET的WinForm测试的。

目前我们的系统结构还没有变化,唯一有些变化的是Henrysvr这部机器上安装了IIS和MS SOAP Toolkit 2.0和我们刚刚生成的有关ADODB.Recordset的CTM组件,这个组件不要安装在COM+环境中。只用简单的注册就可以了。事实上,实际应用中可以再多一部机器专门放置IIS和WebService,另外这部机器上安装上前面准备的 Proxy包和CTM组件即可。这样原来应用中App Server还是App Server.新增的机器只放IIS和CTM来处理WebService的部分。拥有两个IIS的好处是原来的系统不用做任何改变,而对另一个IIS来说,由于它是基于SOAP协议的,也就是说和它的通讯是可以穿透防火墙的。对我来说,已经没有可以再使用的机器了。具体的结构图可能是这样的。

Client端的代码看来也不少,我再专门写一篇吧。

特别:

以上文字和图片涉及其他人的隐私和个人权利,如非被授权或经本人同意,任何网站或期刊请不要刊登、转载、改编、转贴或已其他形式进行传播。以上所有文字和图片只用于内部交流,不作任何新闻发表和商业用途。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有