.NET中的Web service的开发

web

.NET平台内建了对Web service的支持,包括Web service的构建和使用。 与其它开发平台不同,使用.NET平台,你不需要其他的工具或者SDK就可以完成Web service的开发了。.NET Framework本身就全面支持Web service,包括服务器端的请求处理器和对客户端发送和接受SOAP消息的支持。本节将带你用.NET创建和使用一个简单的Web service。
要在.NET中创建Web service,你只需建立一个.asmx文件。这个文件中有一个WebService标签,包含Language和class两个属性,分别用于指定编程语言和Web service中暴露出的类。然后你就可以像平常一样编写你的类了。最后,在每个你想要暴露出的方法前面加一个System.Web.Services.WebMethodAttribute属性就可以了。最终代码类似于下面的程序清单。
'a WebService in VB.NET (calc_vb.asmx)
<%@WebService Language="VB"class="Calc" %>
Imports System.Web.Services
Public Class Calc
<WebMethod()> _
Public Function Add(ByVal a As Double, _
ByVal b As Double) As Double
Return a + b
End Function
End Class

用浏览器来浏览这个.asmx文件,你可以得到一张测试这个Web service的页面。例如,你把calc_vb.asmx 文件放到了Web服务器的myService目录下,那么相应的URL就是:
http://localhost/myService/calc_vb.asmx
测试页如下图所示。这一页是自动生成的。它显示了Web service 的名字并列出了可以调用的方法。列表后面有一段文字,意思是你正在使用缺省的命名空间http://tempuri.org/,如果你想要发布这个Web service的话,最好换一个你自己的命名空间,以避免名字上的冲突。本书后面的部分将会讨论Web service 命名空间的问题。在第六章中,我还会介绍怎样使用.NET的属性来指定命名空间和其他一些东西。

自动生成的Web service测试页

在测试页里点击Add方法,你会得到一个HTML表单,用来测试这个方法(见下图)。在这个表单里,Add方法所接受的所有参数都有一个相应的文本框。填好所有的参数,点击"Invoke"按钮,这个表单就会被提交到Web服务器。实际上,这就是通过HTTP GET的形式在调用Web service。得到的结果是一个如下的简单XML文档:
<double xmlns="http://tempuri.org/">158</double>
浏览下面这个URL,可以直接调用Add方法:
http://localhost/myService/calc_vb.asmx/Add?a=123&b=35
如你所见,方法的名字是你所请求的资源(注意,这里是区分大小写的),而函数中的每个参数都映射为查询字符串中的一个参数。这种形式对快速测试一个Web service 是非常方便的。不过,因为这种方式使用的是HTTP GET,所以它在数据类型和参数传递方向等方面都有一些局限。我们将在第六章中详细讨论这些局限。

自动生成的Add方法测试页

回到前面的Web service测试页,我们还可以看到页面的顶部有一个Service Description链接。点击过去你就可以得到描述这个Web service的WSDL文档,如下图。在Web service的URL后面加上一个"WSDL"查询字符串,你也可以直接浏览到这一页:
http://localhost/myService/calc_vb.asmx?wsdl

Calc Web service的WSDL文档。注意,为了显示更多内容,所有的XML元素都已折叠起来。
Calc Web service的WSDL文档。注意,为了显示更多内容,所有的XML元素都已折叠起来。
要在.NET中调用一个Web service ,你需要先运行wsdl.exe工具。这个工具会从Web service中读出它的WSDL描述文档,生成一个可以调用这个Web service的代理类。例如,在命令行中执行下面的命令,可以生成Calc Web service的代理类:
wsdl.exe /language:VB http://localhost/myService/calc_vb.asmx?wsdl
程序清单1-2截取自生成的VB代理类源码。这个代理类继承自System.Web.Services.Protocols.SoapHttpClientProtocol类,并且暴露出一个Add方法,这个方法接收两个double型浮点数,返回一个double型浮点数。
程序清单1 2 截取自wsdl.exe 生成的Web service代理类源代码
Imports System.Web.Services.Protocols
'省略其他代码
Public Class Calc
Inherits SoapHttpClientProtocol
'省略其他代码
<System.Diagnostics.DebuggerStepThroughAttribute(),_
SoapDocumentMethodAttribute( _
"http://tempuri.org/Add", _
Use:=System.Web.Services.Description.SoapBindingUse.Literal,_
ParameterStyle:= SoapParameterStyle.Wrapped)>_
Public Function Add(ByVal a As Double, ByValb As Double) As Double
Dim results() As Object = Me.Invoke("Add",_
New Object() {a, b})
Return CType(results(0), Double)
End Function
'省略其他代码
End Class
此后的工作就非常简单了。要调用CalculatorWeb service,只需实例化一个Calc的代理对象,再调用它的Add方法:
Dim ws As New Calc()
Dim result As Double = ws.Add(20.5, 10.9)
MessageBox.Show("结果是:" &result.ToString)

实际上,代理类中的Add方法仅仅是通过.NET Framework的SoapHttpClientProtocol类来调用Web service,然后再把Web service 的返回值返回给调用者。  

当然,除了上面的这些演示之外,.NET Web service的创建和调用还有很多的内容。不过,在深入这些细节之前,我们需要先理解Webservice里面的几个关键技术:XSD、SOAP和WSDL。

时间: 2024-11-08 17:22:08

.NET中的Web service的开发的相关文章

在ASP.NET Atlas中调用Web Service—处理错误

asp.net|web|错误 在本系列的上一篇(在ASP.NET Atlas中调用Web Service--介绍及简单应用)中,我们熟悉了Atlas中调用Web Service的最基础方法,但是在实际开发中,仅仅发出请求并等待返回结果是不够的,我们大都需要考虑对错误超时等的处理,也要允许用户取消操作.幸运的是,Atlas对Web Service中的Web Method的封装也充分考虑到了这些需求.让我们举一个Web Method的例子来说明,例如,对于如下的Web Method: public

在Pocket PC中使用Web Service连接数据库

web|连接数据库 在Pocket PC中使用Web Service连接数据库前言微软的移动开发者大会在六月的北京举行了,国内的移动应用软件虽然是刚刚起步,但是这个前景宽广的领域已经受到越来越多软件厂商的关注了.移动设备上的商业应用尽管刚刚起步,但已经显示出巨大的发展潜力. 在微软移动开发挑战赛中,我的作品<饕餮元年无线餐饮管理系统>获得了商业应用的三等奖.为了实现Pocket PC与后台数据库服务器的连接,我的作品中使用了.Net CompactFramework和Web Service技术

SSIS:在 SSIS 中使用 Web Service 以及 XML 解析

Web Service 的用途非常广几乎无处不在,像各大门户网站上的天气预报使用到的第三方 Web Service API,像手机客户端和服务器端的交互等都可以通过事先设计好的 Web Service 接口来实现两 个不同平台的信息沟通. 记得第一次做 IPhone 手机客户端与服务器端交互的 Web Service 接口的时候,由于我们在客户端 开发和服务器端开发都没有 IOS 平台开发经验,白天有其它的项目,只能利用晚上的时间不断尝试.最 终在第三个通宵的时候,尝试搭建的第3套不同版本的 W

在WebSphere Portlet Factory中调用Web Service

通过 WebSphere Portlet Factory(WPF),开发者非常方便实现 Web Service 和 Portlets 的通信.开发者无需花费大量的时间去学习 SOAP,WSDL,XML schema(xsd) 等 Web Service 技术,使用 WPF 即可开发出健壮.功能强大的 Web Service 和实现对各种风格的 Web Service 的调用.WPF 隐藏了 Web Service 的内部实现细节,通过 WPF 的丰富的构建器自动生成 Web Service 和实

使用Integrated Web Services Client for ILE在ILE程序中调用Web Service 一

IBM Integrated Web Services for i是IBM最新发布的在IBM i上的SOA解决方案,包括Integrated Web Services Server for i和Integrated Web Services Client for ILE两部分.Integrated Web Services Server for i使用户能够将ILE RPG 和 COBOL程序快速部署成Web Services,而Integrated Web Services Client fo

如何在C#的类库中添加web service引用

本文并不是什么高深的文章,只是VS2008应用中的一小部分,但小部分你不一定会,要不你试试: 本人对于分布式开发应用的并不多,这次正好有一个项目要应用web service,我的开发环境是vs2008,之所以没有选择现在热门的WCF,本人有如下原因: 1:负责开发Web Service的小组对于vs2008应用不多,更不能奢望令人垂涎的WCF. 2:项目开发时间有限,根本不许你去拿项目做实验. 3:项目改动不大,web service足够对付需求. 由于我们的项目是从1.1直接升级到3.5,升级

你会在C#的类库中添加web service引用吗?

本文并不是什么高深的文章,只是VS2008应用中的一小部分,但小部分你不一定会,要不你试试:       本人对于分布式开发应用的并不多,这次正好有一个项目要应用web service,我的开发环境是vs2008,之所以没有选择现在热门的WCF,本人有如下原因:       1:负责开发Web Service的小组对于vs2008应用不多,更不能奢望令人垂涎的WCF.     2:项目开发时间有限,根本不许你去拿项目做实验.     3:项目改动不大,web service足够对付需求.    

在ASP.NET Atlas中调用Web Service—批量调用以提高效率

asp.net|web 对于Atlas程序,在某些情况下,我们需要在短时间内调用大量的Web Service,例如某个列表中用户快速的点击删除.这时网络带宽,稳定程度等等往往会造成较长时间的延迟.如果可以将这些调用包装成一个单一的请求,那么用户只需忍受一次网络延迟,即可得到处理的结果,也间接的提高了效率.似乎这并不是一个很容易实现的功能,但幸运的是,Atlas中内建了对批量调用Web Service的支持,您所需要的只是在程序中简单设置一下. Atlas中每个Web Service的调用请求都有

在ASP.NET Atlas中调用Web Service

asp.net|web 在前一篇文章(在ASP.NET Atlas中调用Web Service--创建Mashup调用远端Web Service(基础知识以及简单示例))中,我介绍了一些Atlas中对远程Web Service进行Mashup的基础知识,并给出了一个最基础的没有丝毫用处例子.今天再回到这个话题上,我将给出一个更复杂点的,但有一些用处的例子--Yahoo! Weather. 废话到此为止,让我们先熟悉一下Yahoo! Weather服务:Yahoo!在其网站上提供了天气预报服务(h