论文部分内容阅读
摘 要: Web服务基于标准的数据格式和协议,如XML、SOAP和HTTP,不同平台和操作系统的客户和服务端可以基于同样的协议,没有障碍地通信,Web服务客户端只需标识Web服务的位置及其可以调用的方法,就可以简单地使用Web服务。微软公司的.NET框架针对Web服务提供了广泛的支持。因此研究了.NET环境下Web Services的构建、处理流程,举例说明了Web服务的典型应用。
关键词: .NET框架; Web服务; 服务构建; 应用
中图分类号:TP311.11 文献标志码:A 文章编号:1006-8228(2014)11-22-02
Construction and application research of Web Services
Luo Haitao
(School of Informatics, Guangdong University of Foreign Studies, Guangzhou, Guangdong 510420, China)
Abstract: Web Service is based on standard protocols such as XML, SOAP and HTTP. Client and server with different OS can communicate freely based on the same protocols. The client simply identifies the location and method of Web Service when it uses the services. The .NET Framework of Microsoft Company provides wide support to Web Services. The construction and processing of Web Services under .NET Framework are analyzed. Typical examples of Web Services are proposed.
Key words: .NET framework; Web Services; service construction; application
0 引言
随着Internet的发展和深入普及,基于Internet的Web应用得到了快速发展。从早期使用HTML标记语言设计的静态网页,到使用CGI、ASP、JSP、PHP、ASP.NET开发设计的动态网站,实现的功能越来越复杂[5]。2002年微软开发出了.NET框架(.NET Framework),提供了一种开发Web应用程序,包括Web服务的全新模式,其底层用类实现,是一种面向对象的实现方法。十几年来.NET框架几经发展,已可以在这个框架下利用VB.NET、C#、C++或JScript.NET等程序语言,进行WEB应用程序设计(即通常说的动态网页/网站)、Web服务应用、Windows应用程序设计、控制台应用程序设计等。
Web服务又叫XML Web Service,Web服务基于“简单对象访问协议”(Simple Object Access Protocol,简称SOAP)。Web服务提供在一个使用标准协议(如HTTP、XML、XSD、SOAP和WSDL)的松耦合环境中交换信息的能力,先由服务开发方开发,并发布能够完成特别应用需求的在线应用服务,其他用户或者应用软件能够通过Internet来访问并使用这项在线应用服务。XML Web Services基础结构建立在基于XML的消息通信之上,这些消息遵循服务开发方根据具体服务发布的服务说明。服务说明是用名为WSDL(Web 服务描述语言)的XML语法编写的XML文档,它定义XML Web Services要求的消息格式,起协议的作用,它定义XML Web Services的行为和功能,并指示潜在客户端如何与该服务进行交互。Web服务返回给客户端的是数据,而不是网页。Web服务技术规范仍然在飞速发展中,各种新的Web服务技术规范和定义层出不穷。各个主要的软件平台厂商如微软、IBM和SUN等公司也都不遗余力地推出各类操作系统和开发平台对Web服务提供广泛的支持。微软公司的.NET平台针对Web服务提供了广泛的支持,是一个比较适合于构建Web服务的平台。
1 Web Services的构建及处理流程
在.NET框架下,构建Web Services大致有三个步骤。第一步,建立一个包含Web Services的扩展名为.asmx的Web服务文件,文件中定义一个类,在类中定义提供Web Services的方法或者函数。第二步,用.NET框架提供的工具wsdl对Web服务文件进行处理,处理时可以指定名称空间(Namespace)的名字,生成SOAP代理类文件;文件中定义一个刚刚处理时指定名字的Namespace,在Namespace中定义类,类中定义提供Web服务的相应的方法和函数;如果前面的.asmx的Web服务文件指定语言为VB,则代理类为“.vb”类型文件,如果.asmx的Web服务文件指定语言为C#,则代理类为“.cs”类型文件。第三步,用vbc(对“.vb”文件)或者csc(对“.cs”文件)工具对上一步生成的SOAP代理类文件进行编译,生成“.dll”文件,再把它部署到应用程序根目录下的bin文件夹。之后,客户就可以通过该代理类调用这个Web服务。如果是Visual Studio.NET,这些工作是自动完成的,基本的步骤一样。
客户端通过代理类访问服务端的Web服务,代理类使用XML序列化技术把请求序列化成SOAP消息。代理类发出的服务请求可以采用HTTP GET、HTTP POST或者HTTP SOAP协议。当客户端请求服务端的Web服务时,服务器的IIS把被请求的.asmx文件映射到Aspnet_isapi.dll,后者则通过请求处理管道把请求转发给ASP.NET工作进程,之后.NET框架就会通过HttpRuntime来处理这个请求。首先,该请求被送入HttpApplication实例,进入HttpModule,HttpModule完成身份验证、授权和缓冲等工作;然后HttpRuntime核实.asmx文件,注册到WebServiceHandlerFactory Handler并创建一个HTTP handler,它是WebServiceHandler的对象实例,负责处理Web服务请求。HTTP handler再把SOAP消息翻译成Web方法调用。 2 Web Services典型应用
⑴ Web服务返回DataSet对象[4]
假设一个搜索引擎专门从各网站搜索体育消息,对各类消息分门别类,例如足球消息、篮球消息、田径消息等等,保存在数据库sportsnews.mdb的表“sports_news”中,每类消息设置了相应的关键字,以便查询。该搜索引擎向Internet用户提供免费查询各类消息的服务,客户端界面如图1所示。
图1 体育新闻搜索服务的客户端界面
服务器端的.asmx服务文件主要代码如下:
Public Class SportsNews :Inherits WebService
Public Function SearchNews(NewsType As
string) As DataSet
Dim connection1 As New OleDbConnection("Provider=
Microsoft.Jet.OLEDB.4.0; Data Source=" & Server
.Mappath("sportsnews.mdb"))
Dim StrSql As String
StrSql="Select * From sportsnews Where newsType
= & NewsType & "
Dim adptr As New OleDbDataAdapter(StrSql, connection1)
Dim ds1 As New DataSet()
adptr.Fill(ds1, "sportsnews")
Return(ds1)
End Function
End Class
该服务文件由wsdl工具转换为“.vb“文件,转换时指定名称空间myService1,则转换后的“.vb“文件自动产生一行代码“Namespace myService1”,后面的代码则根据.asmx文件规定,生成相应的类及相关的服务方法和函数。之后用vbc工具进行编译,生成dll文件,并将该文件部署到应用程序根目录的bin文件夹即可。
客户端通过代理类调用Web服务,主要代码如下:
Sub Enter_Click(Sender As Object, E As EventArgs)
Dim ds As New DataSet()
Dim mn As New myNews()
ds=mn.SelectNews(keyword.Text)
MyDataGrid.DataSource=DS.Tables(0).DefaultView
MyDataGrid.DataBind()
End Sub
以下仅列出html部分中的表单form部分:
⑵ 利用SoapHeader传递用户凭据[3]
如果是有偿服务,服务器端可以要求客户端提供凭据,凭据验证通过后才提供服务。下面的例子假设Web服务提供了求两个整数的平方和计算,返回整数,客户端可以通过SoapHeader传递用户名和密码,并假设用户名为Luo,密码为123才能通过验证,实际应用中可以根据客户端传递的用户凭据到数据库中查找,服务程序文件如下所示:
namespace theNamespace {
public class theHeader : SoapHeader {
public string Username, Password;
}
public class theService {
public theHeader sHeader;
[WebMethod][SoapHeader("sHeader")]
public int theSquare(int a, int b) {
if (sHeader==null) return -1;
string usr=sHeader.Username;
string pwd=sHeader.Password;
if (AuthenticateUser(usr, pwd)) return a*a+b*b;
else return -1;
}
private bool AuthenticateUser(string usr, string pwd) {
if ((usr=="Luo")&&(pwd=="123")) return true; return false;
}
}
}
客户端程序主要代码如下:
theService s1=new theService();
theHeader myHeader=new theHeader();
myHeader.Username="Luo";
myHeader.Password="123";
s1.theHeaderValue=myHeader;
Response.Write(s1.theSquare(3,4));
除了上述两种典型的方法实现Web服务应用外,还有很多其他方法应用Web服务。例如,利用WSE技术传递UsernameToken令牌以及加密SOAP消息,这是一种更加安全的应用方法。Web Services Enhancements(WSE)是微软公司发布的一种针对Web Service的增强技术,通过WSE技术可以把安全、路由、附件等技术同Web Service完美地结合在一起,通过在SOAP消息中添加一个或多个安全性凭据,对SOAP消息进行数字签名和加密SOAP消息来实现SOAP消息级别的安全性[1]。
而异步Web服务调用也是一种可以考虑的选择。在异步调用中,向Web服务发出请求后,客户端不必等待请求结束,可以继续执行其他任务。服务器端不用特别的设置,就像普通Web服务一样即可。.NET Framework的异步调用方法的设计模式指定每个同步方法都有两个异步方法。对于每个同步方法,都有一个Begin异步方法和一个End异步方法[2]。
3 结束语
Web服务因为客户端和服务器端通信消息采用XML文本格式,便于不同平台系统之间的通信,因此在一个基于Web服务的模型中,客户不需要考虑服务器端使用的语言和操作系统,不同平台和操作系统的客户端和服务器端可以基于同样的协议,没有障碍地通信。客户端只需标识Web服务的位置及其可以调用的方法,就可以简单地使用Web服务。微软公司的.NET框架针对Web服务提供了广泛的支持。为了提高服务的安全性,微软的.NET框架同时提供了WSE技术(Web Services Enhancements)。WSE提供对Web服务技术规范的支持,包括WS-Routing、WS-Security和WS-Attachment。总体而言,其.NET框架是实现Web服务的简单而且便利的平台。本文举例说明了.NET环境下,Web服务的构建及其典型的应用,以供读者参考。
参考文献:
[1] Peter Thorsteinson,G. Gnana Arun Ganesh著,梁志敏,蔡建译,
.NET安全性与密码术[M].清华大学出版社,2004.
[2] J.D. Meier, Srinath Vasireddy, Ashish Babbar, Alex Mackman,
Improving Web Services Performance. http://msdn2.microsoft.com/en-us/library/ms998562.aspx,2004.
[3] 石志国等.ASP.NET应用教程[M].清华大学出版社,2005.
[4] 尚俊杰.ASP.NET程序设计[M].清华大学出版社,2004.
[5] 崔淼等.ASP.NET程序设计教程(C#版)(第2版)[M].机械工业出版社,
2011.
关键词: .NET框架; Web服务; 服务构建; 应用
中图分类号:TP311.11 文献标志码:A 文章编号:1006-8228(2014)11-22-02
Construction and application research of Web Services
Luo Haitao
(School of Informatics, Guangdong University of Foreign Studies, Guangzhou, Guangdong 510420, China)
Abstract: Web Service is based on standard protocols such as XML, SOAP and HTTP. Client and server with different OS can communicate freely based on the same protocols. The client simply identifies the location and method of Web Service when it uses the services. The .NET Framework of Microsoft Company provides wide support to Web Services. The construction and processing of Web Services under .NET Framework are analyzed. Typical examples of Web Services are proposed.
Key words: .NET framework; Web Services; service construction; application
0 引言
随着Internet的发展和深入普及,基于Internet的Web应用得到了快速发展。从早期使用HTML标记语言设计的静态网页,到使用CGI、ASP、JSP、PHP、ASP.NET开发设计的动态网站,实现的功能越来越复杂[5]。2002年微软开发出了.NET框架(.NET Framework),提供了一种开发Web应用程序,包括Web服务的全新模式,其底层用类实现,是一种面向对象的实现方法。十几年来.NET框架几经发展,已可以在这个框架下利用VB.NET、C#、C++或JScript.NET等程序语言,进行WEB应用程序设计(即通常说的动态网页/网站)、Web服务应用、Windows应用程序设计、控制台应用程序设计等。
Web服务又叫XML Web Service,Web服务基于“简单对象访问协议”(Simple Object Access Protocol,简称SOAP)。Web服务提供在一个使用标准协议(如HTTP、XML、XSD、SOAP和WSDL)的松耦合环境中交换信息的能力,先由服务开发方开发,并发布能够完成特别应用需求的在线应用服务,其他用户或者应用软件能够通过Internet来访问并使用这项在线应用服务。XML Web Services基础结构建立在基于XML的消息通信之上,这些消息遵循服务开发方根据具体服务发布的服务说明。服务说明是用名为WSDL(Web 服务描述语言)的XML语法编写的XML文档,它定义XML Web Services要求的消息格式,起协议的作用,它定义XML Web Services的行为和功能,并指示潜在客户端如何与该服务进行交互。Web服务返回给客户端的是数据,而不是网页。Web服务技术规范仍然在飞速发展中,各种新的Web服务技术规范和定义层出不穷。各个主要的软件平台厂商如微软、IBM和SUN等公司也都不遗余力地推出各类操作系统和开发平台对Web服务提供广泛的支持。微软公司的.NET平台针对Web服务提供了广泛的支持,是一个比较适合于构建Web服务的平台。
1 Web Services的构建及处理流程
在.NET框架下,构建Web Services大致有三个步骤。第一步,建立一个包含Web Services的扩展名为.asmx的Web服务文件,文件中定义一个类,在类中定义提供Web Services的方法或者函数。第二步,用.NET框架提供的工具wsdl对Web服务文件进行处理,处理时可以指定名称空间(Namespace)的名字,生成SOAP代理类文件;文件中定义一个刚刚处理时指定名字的Namespace,在Namespace中定义类,类中定义提供Web服务的相应的方法和函数;如果前面的.asmx的Web服务文件指定语言为VB,则代理类为“.vb”类型文件,如果.asmx的Web服务文件指定语言为C#,则代理类为“.cs”类型文件。第三步,用vbc(对“.vb”文件)或者csc(对“.cs”文件)工具对上一步生成的SOAP代理类文件进行编译,生成“.dll”文件,再把它部署到应用程序根目录下的bin文件夹。之后,客户就可以通过该代理类调用这个Web服务。如果是Visual Studio.NET,这些工作是自动完成的,基本的步骤一样。
客户端通过代理类访问服务端的Web服务,代理类使用XML序列化技术把请求序列化成SOAP消息。代理类发出的服务请求可以采用HTTP GET、HTTP POST或者HTTP SOAP协议。当客户端请求服务端的Web服务时,服务器的IIS把被请求的.asmx文件映射到Aspnet_isapi.dll,后者则通过请求处理管道把请求转发给ASP.NET工作进程,之后.NET框架就会通过HttpRuntime来处理这个请求。首先,该请求被送入HttpApplication实例,进入HttpModule,HttpModule完成身份验证、授权和缓冲等工作;然后HttpRuntime核实.asmx文件,注册到WebServiceHandlerFactory Handler并创建一个HTTP handler,它是WebServiceHandler的对象实例,负责处理Web服务请求。HTTP handler再把SOAP消息翻译成Web方法调用。 2 Web Services典型应用
⑴ Web服务返回DataSet对象[4]
假设一个搜索引擎专门从各网站搜索体育消息,对各类消息分门别类,例如足球消息、篮球消息、田径消息等等,保存在数据库sportsnews.mdb的表“sports_news”中,每类消息设置了相应的关键字,以便查询。该搜索引擎向Internet用户提供免费查询各类消息的服务,客户端界面如图1所示。
图1 体育新闻搜索服务的客户端界面
服务器端的.asmx服务文件主要代码如下:
Public Class SportsNews :Inherits WebService
string) As DataSet
Dim connection1 As New OleDbConnection("Provider=
Microsoft.Jet.OLEDB.4.0; Data Source=" & Server
.Mappath("sportsnews.mdb"))
Dim StrSql As String
StrSql="Select * From sportsnews Where newsType
= & NewsType & "
Dim adptr As New OleDbDataAdapter(StrSql, connection1)
Dim ds1 As New DataSet()
adptr.Fill(ds1, "sportsnews")
Return(ds1)
End Function
End Class
该服务文件由wsdl工具转换为“.vb“文件,转换时指定名称空间myService1,则转换后的“.vb“文件自动产生一行代码“Namespace myService1”,后面的代码则根据.asmx文件规定,生成相应的类及相关的服务方法和函数。之后用vbc工具进行编译,生成dll文件,并将该文件部署到应用程序根目录的bin文件夹即可。
客户端通过代理类调用Web服务,主要代码如下:
Sub Enter_Click(Sender As Object, E As EventArgs)
Dim ds As New DataSet()
Dim mn As New myNews()
ds=mn.SelectNews(keyword.Text)
MyDataGrid.DataSource=DS.Tables(0).DefaultView
MyDataGrid.DataBind()
End Sub
以下仅列出html部分中的表单form部分:
⑵ 利用SoapHeader传递用户凭据[3]
如果是有偿服务,服务器端可以要求客户端提供凭据,凭据验证通过后才提供服务。下面的例子假设Web服务提供了求两个整数的平方和计算,返回整数,客户端可以通过SoapHeader传递用户名和密码,并假设用户名为Luo,密码为123才能通过验证,实际应用中可以根据客户端传递的用户凭据到数据库中查找,服务程序文件如下所示:
namespace theNamespace {
public class theHeader : SoapHeader {
public string Username, Password;
}
public class theService {
public theHeader sHeader;
[WebMethod][SoapHeader("sHeader")]
public int theSquare(int a, int b) {
if (sHeader==null) return -1;
string usr=sHeader.Username;
string pwd=sHeader.Password;
if (AuthenticateUser(usr, pwd)) return a*a+b*b;
else return -1;
}
private bool AuthenticateUser(string usr, string pwd) {
if ((usr=="Luo")&&(pwd=="123")) return true; return false;
}
}
}
客户端程序主要代码如下:
theService s1=new theService();
theHeader myHeader=new theHeader();
myHeader.Username="Luo";
myHeader.Password="123";
s1.theHeaderValue=myHeader;
Response.Write(s1.theSquare(3,4));
除了上述两种典型的方法实现Web服务应用外,还有很多其他方法应用Web服务。例如,利用WSE技术传递UsernameToken令牌以及加密SOAP消息,这是一种更加安全的应用方法。Web Services Enhancements(WSE)是微软公司发布的一种针对Web Service的增强技术,通过WSE技术可以把安全、路由、附件等技术同Web Service完美地结合在一起,通过在SOAP消息中添加一个或多个安全性凭据,对SOAP消息进行数字签名和加密SOAP消息来实现SOAP消息级别的安全性[1]。
而异步Web服务调用也是一种可以考虑的选择。在异步调用中,向Web服务发出请求后,客户端不必等待请求结束,可以继续执行其他任务。服务器端不用特别的设置,就像普通Web服务一样即可。.NET Framework的异步调用方法的设计模式指定每个同步方法都有两个异步方法。对于每个同步方法,都有一个Begin异步方法和一个End异步方法[2]。
3 结束语
Web服务因为客户端和服务器端通信消息采用XML文本格式,便于不同平台系统之间的通信,因此在一个基于Web服务的模型中,客户不需要考虑服务器端使用的语言和操作系统,不同平台和操作系统的客户端和服务器端可以基于同样的协议,没有障碍地通信。客户端只需标识Web服务的位置及其可以调用的方法,就可以简单地使用Web服务。微软公司的.NET框架针对Web服务提供了广泛的支持。为了提高服务的安全性,微软的.NET框架同时提供了WSE技术(Web Services Enhancements)。WSE提供对Web服务技术规范的支持,包括WS-Routing、WS-Security和WS-Attachment。总体而言,其.NET框架是实现Web服务的简单而且便利的平台。本文举例说明了.NET环境下,Web服务的构建及其典型的应用,以供读者参考。
参考文献:
[1] Peter Thorsteinson,G. Gnana Arun Ganesh著,梁志敏,蔡建译,
.NET安全性与密码术[M].清华大学出版社,2004.
[2] J.D. Meier, Srinath Vasireddy, Ashish Babbar, Alex Mackman,
Improving Web Services Performance. http://msdn2.microsoft.com/en-us/library/ms998562.aspx,2004.
[3] 石志国等.ASP.NET应用教程[M].清华大学出版社,2005.
[4] 尚俊杰.ASP.NET程序设计[M].清华大学出版社,2004.
[5] 崔淼等.ASP.NET程序设计教程(C#版)(第2版)[M].机械工业出版社,
2011.