分享
 
 
 

从SOAP Toolkit移植到Web 服务

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

从SOAP Toolkit移植到Web 服务

升级到微软 .NET

Peter Vogel

PH&V信息服务公司

2002年1月

概述: 本文讨论如如何从Microsoft Visual Basic 6.0 和 Visual Basic .NET中访问Web服务,如何将现有SOAP应用程序转换到微软.NET平台。

目标

 学习Microsoft® Visual Studio® .NET中的SOAP工具

 回顾利用SOAP 和 Microsoft Visual Basic® 6.0访问COM/COM+组件

 从Microsoft Visual Basic .NET中访问Web服务

 将SOAP工具包应用程序移植到Web服务

要求

为了充分利用本文,读者必须具备以下基础:

 理解何为Web服务

 使用过Visual Basic 6.0 及 SOAP,知道如何创建Microsoft ActiveX® DLL工程

 熟悉Visual Studio .NET基本知识

目录

Web服务、SOAP及你自己的工具

Web 服务描述工具

SOAP Toolkit 2.0 简介

Visual Basic .NET纵观

创建客户端

从 SOAP Toolkit 转换到Visual Studio .NET

小结

Web 服务 SOAP及用户自己的工具

Web服务提供了函数,通过互联网可以访问这些函数——调用Web服务,然后得到返回结果。Web服务中的新内容是通过全球最大的网络——Internet可以链接到这些服务。然而,作为Visual Basic程序员Web服务将为你处理所有利用互联网的烦琐细节。

本文将讨论如何利用Visual Studio .NET 访问Web服务,并将回顾利用Visual Basic 6.0和 SOAP Toolkit 2.0版创建Web服务的过程。另外还要讨论如何转换SOAP Toolkit应用程序以在.NET框架中使用Web服务。

本文中使用的Web服务中有一个很简单的函数createCustomer。此函数接收客户的姓名,返回客户身份。Web服务中的函数对于此处的讨论并不是必需的,而应当注意如何利用Visual Basic 6.0 或 Visual Basic .NET创建并访问Web服务。

Visual Basic 和SOAP

通过发送和接收SOAP文档就可以与Web服务通讯。在Visual Basic 6.0中,有两种方法可以创建SOAP文档:

1. 通过串联字符串来装配文档

2. 利用SOAP Toolkit 2.0版中的SoapClient

SoapClient不仅能创建与Web服务通讯的SOAP文档,还能将文档发送到Web服务进行处理。

在传递中的Web服务端,需要利用SOAP接收器捕获并处理由客户端发送的文档。SOAP Toolkit 2.0版中包含了SoapServer,利用此程序接收器应用程序就能处理SOAP文档。接收器是一个独立的应用程序,它独立于实现了Web服务的组件。

利用Visual Studio .NET,创建和访问Web服务就变得简单了。在Visual Studio .NET中,创建Web服务并不需要构建独立的接收器应用程序。当访问Web服务时,代码将自动创建,这样使用Web服务就象访问其它对象一样。

Web 服务描述工具

Web服务描述语言(WSDL)是专门为描述Web服务而设计的XML语言。WSDL已经同SOAP一同提交给了W3C,这只是使Web服务成为开放标准的一部分。服务的WSDL描述包含wsdlSpec tModel,它提供了所有必要信息,利用这些信息就可以为服务创建和发送SOAP文档。下面是一个支持createCustomer函数的wsdlSpec tModel文件示例:

<?xml version='1.0' encoding='UTF-8' ?>

<!-- Generated 06/25/01 by Microsoft SOAP Toolkit WSDL

File Generator, Version 1.00.623.1 -->

<definitions name ='cust'

targetNamespace = 'http://tempuri.org/wsdl/'

xmlns:wsdlns='http://tempuri.org/wsdl/'

xmlns:typens='http://tempuri.org/type'

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

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

xmlns:stk=

'http://schemas.microsoft.com/soap-toolkit/wsdl-extension'

xmlns='http://schemas.xmlsoap.org/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'>

</schema>

</types>

<message name='Custservices.createCustomer'>

<part name='First' type='xsd:string'/>

<part name='Last' type='xsd:string'/>

</message>

<message name='Custservices.createCustomerResponse'>

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

</message>

<portType name='CustservicesSoapPort'>

<operation name='createCustomer'

parameterOrder='First Last'>

<input message=

'wsdlns:Custservices.createCustomer' />

<output

message='wsdlns:Custservices.createCustomerResponse' />

</operation>

</portType>

<binding name='CustservicesSoapBinding'

type='wsdlns:CustservicesSoapPort' >

<stk:binding preferredEncoding='UTF-8'/>

<soap:binding style='rpc'

transport='http://schemas.xmlsoap.org/soap/http' />

<operation name='Add' >

<soap:operation soapAction=

'http://tempuri.org/action/Custservices.Add' />

<input>

<soap:body use='encoded'

namespace='http://tempuri.org/message/'

encodingStyle=

'http://schemas.xmlsoap.org/soap/encoding/' />

</input>

<output>

<soap:body use='encoded'

namespace='http://tempuri.org/message/'

encodingStyle=

'http://schemas.xmlsoap.org/soap/encoding/' />

</output>

</operation>

</binding>

<service name='cust' >

<port name='CustservicesSoapPort'

binding='wsdlns:CustservicesSoapBinding' >

<soap:address

location='http://localhost/customer/cust.ASP' />

</port>

</service>

</definitions>

wsdlSpec tModel文件末尾的<service>标记指定将请求发送到哪个SOAP接收器,在本例中是网页http://localhost/cust/cust.asp。文件的前部描述了可以同服务一起使用的消息。

注意 用在SOAP文档中的tempuri.org名称空间只是在开发过程中临时作用的名称空间("temporary uri")。在将此服务发行为产品时,应当修改WSDL文件以便使用唯一的URI(如,公司站点的URI)。

SOAP Toolkit对象和Visual Studio .NET IDE都读取WSDL文件。SoapClient利用WSDL文件中的信息使它自己成为Web服务的代码。Visual Studio .NET也利用这些信息为Web服务创建代理类。结果,可以:

 调用Web服务的方法,就象这些方法是代理的方法一样。

 在发送消息前,按照Web服务的WSDL描述对调用进行验证。

 与代理交互,而不必熟悉WSDL文件的内容或正在生成的SOAP文档

图1显示了不同组件间的关系,包括Web服务元语言(WSML),只有Visual Basic 6.0需要WSML,并在Visual Basic 6.0中进行了描述。

图 1. Web 服务及客户结构

在SOAP中,SOAP Toolkit 和Visual Studio .NET IDE执行类似的功能。然而,SOAP Toolkit对象并没有提供Visual Basic开发人员所期望的完整支持。在图2中可以看到Visual Basic程序员认为理所当然的IntelliSense®支持。IntelliSense下拉列表自动显示Customerservices COM对象的createCustomer方法。

图 2. COM/DCOM/COM+对象的IntelliSense支持

在图3中可以看到为SoapClient Web服务提供的IntelliSense支持。所有SoapClient的方法都列出来了,但SoapClient作为代理运行的服务的方法没有出现(即createCustomer)。

图 3. SoapClient 的 IntelliSense支持

在Visual Studio .NET中,由IDE创建的代理类与SOAPClient相比,能更好地代理Web 服务。从图4中可以看到对访问Web服务的IntelliSense支持。CreateCustomer方法显示为与Web服务交互的对象的方法。

图 4.在 Visual Studio .NET 中对 Web服务的支IntelliSense持

SOAP Toolkit 2.0 简介

本节快速创建了在Web 服务、SOAP及你自己的工具节中描述过的Web服务。

利用SOAP Toolkit创建并访问Web服务

1. 在Visual Basic 6.0中,创建一个新Visual Basic ActiveX DLL工程,取名为CustCP,Web服务代码中的类模块取名为Customerservices。

Public Function createCustomer(ByVal First As String, _

ByVal Last As String) As String

createCustomer = "A" & CStr(Len(First)) & _

CStr(Len(Last))

End Function

2. 利用SOAP Toolkit中的 WSDL向导创建WSDL及WSDM文件(WSML文件中包含了SOAPServer用于将Web服务映射为ActiveX COM对象的信息)。

3. 创建SOAP接收器——一个使用SOAPServer的ASP页。

<%@ LANGUAGE=VBScript %>

<%Option Explicit

Dim ss

Dim WSDL

Dim WSML

Response.ContentType = "text/xml"

WSDL = Server.MapPath("cust.wsdl")

WSML = Server.MapPath("cust.wsml")

Set ss = Server.CreateObject("MSSOAP.SoapServer")

ss.Init WSDL, WSML

ss.SOAPInvoke Request, Response, ""%>

4. 创建调用Web服务的客户,它将使用SOAPClient。

Private Sub cmdCreate_Click()

Dim sc As MSSOAPLib.SoapClient

Set sc = New SoapClient

sc.mssoapinit "http://vogel2/cust/cust.wsdl"

Me.txtCustId.text = _

sc.createCustomer(Me.txtFirstName.text, _

Me.txtLastName.text)

End Sub

Visual Basic .NET 纵观

在本节中将学习如何:

 在 Visual Studio .NET中创建Web服务。

 从Visual Studio .NET应用程序中访问Web服务。

在Visual Studio .NET中创建Web服务时,将自动为Web服务生成一个discovery文件。此文件用于添加Web服务对其它Visual Studio .NET应用程序的引用,包括WSDL描述。

注意 discovery文件的文件类型,对于Visual Basic 及 C#工程是.vsdisco,对于C工程则是.disco。

在 Visual Studio .NET中创建Web服务

1. 从File菜单中选择New,显示New Project对话框,如图5所示。

图 5. Visual Studio .NET New Project 对话框

2. 在Visual Basic Projects部分中选择ASP.NET Web服务。

3. 在Name框中为工程指定名称(MigratetoDotNetService)。

4. 输入Web服务网站的URL (localhost/customer)。

5. 单击OK创建工程。默认地,工程将包含一个名为的模块Service1.asmx。

6. 右击Service1.asmx模块,并从菜单中选择View Code。

7. 将下面的代码添加到模块上部的Public Class Service1语句之后:

<WebService(Namespace:="http://phvis.com/customer/", _

Description:="Customer management") _

Public Class Service1

就象在从SOAP Toolkit转换到Visual Studio .NET节所讨论过的,利用Wsdl.exe实用程序可以从现有WSDL文件中生成Web服务程序的结构。从Visual Basic 6.0示例中拷贝createCustomer函数,但在函数声明中添加<WebMethod>属性,如下:

<WebMethod(Description:= _

"Passed first name and last name, return an id")> _

Public Function createCustomer( _

ByVal First As String, _

ByVal Last As String) As String

8. 从Visual Basic 6.0代码转换为Visual Basic .NET只需修改一处。将函数中的createCustomer =用Return代替,如下所示:

9. Return "A" & CStr(Len(First)) & _

10. CStr(Len(Last))

11. End Function

12. 从Build菜单中选择Build创建Web服务。查看Output窗口,检查建立中的错误。Discovery文件被创建为此构建的一部分。

创建客户

不必创建.NET客户——利用SOAP Toolkit创建的Visual Basic 6.0应用程序能够访问XML Web服务。下面这些步骤演示了如何为Web服务创建.NET客户,而不必考虑Web服务是在Visual Basic 6.0 还是在 Visual Basic .NET中编写的:

1. 从File菜单中,选择New,然后选择Project,显示Add Project对话框。

2. 从Visual Basic Projects部分中,选择Windows Application。

3. 在Name框中指定工程名(MigratetoWebClient),单击OK创建工程。

4. 在方案管理器中右击工程,然后选择Add Web Reference。Add Web Reference对话框出现,如图6所示。

图 6. Add Web Reference 对话框

5. 在Address框中输入Web服务工程中.vsdisco文件的URL——例如http://localserver/customers/MigratetoNetService.vsdisco。单击Address框尾部的下拉箭头,选择引用。

注意 通过将.vsdisco文件从方案管理器拖放到代码模块中,也可以得到Web服务工程中.vsdisco文件的URL。然后在模块中剪切URL,然后将它粘贴到Add Web Reference对话框中的Address框。

6. 单击Add Reference按钮返回工程。对Web服务的引用就出现在方案管理器中,如图7所示。

图 7. 引用了 Web 服务之后的Visual Basic Windows应用程序

7. 在窗体上,文本框txtFirstName 和 txtLastName用于保存客户姓名,按钮代码调用Web服务。

8. 添加代码,声明变量,用此变量引用处理Web服务的代理类(默认类名由服务器名和Web服务名组件):

Private Sub cmdCreate_Click()

Dim cc As localhost.service1

9. 添加代码初始化代理类,调用Web服务的方法:

Set cc = New localhost.service1

Me.txtCustId.text = _

cc.createCustomer(Me.txtFirstName.Text, _

Me.txtLastName.Text)

End Sub

10. 按F5运行客户端应用程序,访问Web服务。

从 SOAP Toolkit 转换到 Visual Studio .NET

利用SOAP Toolkit 或 XML Web服务构建的应用程序符合SOAP准则。对于基于SOAP的应用程序,客户与Web服务间的链接专门由WSDL文件定义。用SOAP Toolkit构建的Web服务可以被用.NET构建的Web服务调用,反之亦然。这样保留服务常量的WSDL定义,就可以分批将SOAP Toolkit应用程序移植到.NET中。例如,访问Web服务的客户仍可以使用SOAP Toolkit中的 SOAPClient客户端,同时将Web服务转换为.NET中。

保留Web服务常量WSDL文件最简单的方法是从SOAP Toolkit创建的WSDL文件中生成Web服务的结构。如果向此应用程序传递如下参数,.NET Wsdl.exe实用程序将为Web服务生成Visual Basic .NET结构:

 /l 参数。控制生成代码的语言。默认是C#。传递/l:VB参数会生成Visual Basic代码。

 /server 参数。指示程序生成Web服务的服务器端代码(原文有残)。默认是生成客户端代理。

 WSDL文件名。

要从Cust.wsdl文件中为示例Web服务创建代码,使用:

wsdl.exe /l:VB /server cust.wsdl

生成的结构代码将保存在Cust.vb文件中。可以将代码从此文件中拷贝ASMX模块中,然后将Visual Basic 6.0代码拷贝到ASMX模块中的同一程序中。如果要创建完整的.NET版本的Web服务,由SOAP Toolkit生成的WSDL文件可用于为Web服务生成结构代码。

在客户端,访问Web服务的不同客户应用程序可以分别从SOAP Toolkit 转换到.NET中。甚至单个客户端向.NET的转换也可以分期进行,因为SOAP准则提供了交互操作性。在客户端要将应用程序SOAP Toolkit转换到Visual Studio .NET中,必须用对Web服务代理的引用代替对SOAPClient的引用。

小结

本文中学习了如何从Visual Basic 6.0 和 Visual Basic .NET访问Web服务,也讨论了如何将现有SOAP应用程序转换到.NET平台中。

需要记住的要点为:

 WSDL文件是用于描述发送到Web服务的SOAP文档的。在Visual Basic 6.0中,可以使用SOAP Toolkit中的WSDL Generator创建此文件。在Visual Studio .NET中,此文件将自动创建。

 在Visual Basic 6.0中创建Web服务时,需要微软WSML文件和独立的ASP接收器网页。而在Visual Studio .NET中创建Web服务时,两个文件都不需要。

 客户和服务可以自由混合而不管平台如何。利用SoapClient可以从Visual Basic 6.0 客户端或ASP页中调用Visual Basic .NET服务。Visual Basic 6.0 Web服务也可以利用SoapServer处理来自Visual Studio .NET 客户的请求。

 Wsdl.exe实用程序用于从被SOAP应用程序使用的WSDL文件中为.NET版本的Web服务创建结构。

关于作者

Peter Vogel (MBA, MCSD)是PH&V信息服务公司的主要负责人。PH&V专门设计和开发基于COM/COM+的系统。Peter已经为Bayer AG、Exxon、Christie Digital以及Canadian Imperial Bank of Commerce设计、构建和安装了基于企业内部网和组件的系统。他还是Smart Access and XML Developer时事通讯的编辑,著有The Visual Basic Object and Component Handbook (Prentice Hall)一书,目前正在编写User Interface Design (APress)一书。Peter还在Learning Tree International授课。他的文章已经在致力于基于Visual Basic开发的主要杂志上发表,并存入了Microsoft Developer Network® (MSDN)库。Peter还经常出席在北美、澳大利亚及欧洲的会议。

关于 Informant 通讯集团

Informant通讯集团公司(www.informant.com)是以信息技术领域为核心的多样化媒体公司。它成立于1990年,并专注于软件开发出版物,讨论会,目录发行和网站。在美国和英国设有办事机构,ICG成为一家受欢迎的媒体公司,并销售目录集成器,满足了IT专业人员对于高质量技术信息不断增长的需求。

版权所有 © 2002 Informant通讯集团公司和微软公司

技术编辑:PDSA公司及 KNG Consulting公司

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有