“MS.NET平台内建了对Web Service的支持,包括Web Service的构建和使用。与其它开发平台不同,使用.NET平台,你不需要其他的工具或者SDK就可以完成Web Service的开发了。.NET Framework本身就全面支持Web Service,包括服务器端的请求处理器和对客户端发送和接受SOAP消息的支持”(前面这句话是icech借用别人的)。本文将一步一步带你用Microsoft Visual Studio .NET 2003(后面简称VS.Net 2003)创建和使用一个简单的Web Service。
1、用VS.Net 2003创建一个最简单的Web Service
首先,打开VS.Net 2003, 按Ctrl+Shift+N(或者打开“文件-新建-项目”),选择“ASP.NET Web服务”。生成WebService默认文件是Service1.asmx。
(图1)
查看Service1.asmx.cs代码,你会发现VS.Net 2003已经为Web Service文件建立了缺省的框架。原始代码为:
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services;
namespace WebService1 { /// /// Service1 的摘要说明。 /// public class Service1 : System.Web.Services.WebService { public Service1() { //CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的 InitializeComponent(); }
#region 组件设计器生成的代码
//Web 服务设计器所必需的 private IContainer components = null;
/// /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// private void InitializeComponent() { }
/// /// 清理所有正在使用的资源。 /// protected override void Dispose( bool disposing ) { if(disposing && components != null) { components.Dispose(); } base.Dispose(disposing); }
#endregion
// WEB 服务示例 // HelloWorld() 示例服务返回字符串 Hello World // 若要生成,请取消注释下列行,然后保存并生成项目 // 若要测试此 Web 服务,请按 F5 键
// [WebMethod] // public string HelloWorld() // { // return "Hello World"; // } } }
|
(代码1)
直接使用“WEB 服务示例”,我们先看一下最简单的Web Service是什么样子的。去掉53~58行的注释后(如代码2),直接按F5编译查看效果。
[WebMethod] public string HelloWorld() { return "Hello World"; } |
(代码2)
点击显示页面(如图2)中的“HelloWorld”超链接,跳转到下一页面(如图3)
(图2)
(图3)
再点击“调用”按钮,就可以看到用XML格式返回的Web Service结果(如图4)。说明我们的Web Service环境没有问题,而且还初步接触了一下最简单的Web Service。
(图4)
2、创建一个简单带有功能的Web Service
网上有很多例子都是计算a+b=sum和显示问候语的,所以我们也来练习一下。我们建立一个整数加法和显示西部E网问候语的Web Service的例子,然后我们在下一节练习如何调用它。
另外:WebMethod和WebService都有一个Description属性,功能就是描述一下服务功能,具体方法可见:
[WebMethod(Description="计算a+b=sum的功能")]和
[WebService (Namespace="http://www.weste.net", Description = "<font color='#FF0000'><b>用 VS.NET 开发一个 Web Service 实例< /b></font>")]
[WebMethod(Description="计算a+b=sum的功能")] public int Add(int a,int b) { return a+b; }
[WebMethod(Description="显示问候语的功能")] public string Show(string yourname) { return "西部E网 www.weste.net"+"欢迎"+yourname; }
|
(代码3)
运行后显示的结果如图5,具体的操作和测试方式就不细说了,和上面的HelloWorld差不多。如果测试正确性,可以输入“http://localhost/WebService1/Service1.asmx/Show?yourname=icech”或者“http://localhost/WebService1/Service1.asmx/Add?a=3&b=6”(如图6)。
(图5)
(图6)
3、用ASP调用Web Service
如果要用ASP来调用WevService,就一定要使用SOAP Toolkit或者XMLHTTP, 使用SOAP Client需要专门安装SOAP Toolkit,这对客户端来说不具有通用性,因此我们就学习使用XML来进行对WebService的调用。
<% Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP") Set xmlDOC =Server.CreateObject("MSXML.DOMDocument") strWebserviceURL = "http://localhost/WebService1/Service1.asmx/Add" '设置参数和值 strRequest = "a=5&b=6" objHTTP.Open "POST", strWebserviceURL, False '设置Content-Type很重要 objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" objHTTP.Send(strRequest) bOK = xmlDOC.load(objHTTP.responseXML) '查看状态值 if objHTTP.Status=200 then xmlStr = xmlDOC.xml xmlStr = Replace(xmlStr,"<","<",1,-1,1) xmlStr = Replace(xmlStr,">",">",1,-1,1) Response.Write xmlStr else Response.Write objHTTP.Statu&"<br>" Response.Write objHTTP.StatusText end if %> |
(代码4)
注意:代码中的“http://localhost/WebService1/Service1.asmx/Add”是在第2节中其中“计算a+b=sum功能”的Web Service地址。
以上代码在本地测试都没有问题(在部署webservice的本地机器上测试的),然而把strWebserviceURL = "http://localhost/WebService1/Service1.asmx/Add"改为部署在其他机器上的WebService时,却出了问题,结果一直是返回500错误,即objHTTP.Status一直都为500。
原因在于.Net Framework1.1默认不支持HttpGet和HttpPost。如果修改webservice里的web.config增加上代码5后,上代码就可以调用远程机器上的WebService了。
<webServices> <protocols> <add name="HttpPost"/> <add name="HttpGet"/> </protocols> </webServices> |
(代码5)
4、用VBScript调用Web Service
大家都清楚,其实VB、ASP、VBScript的语法和代码都及其相似,其实写出来他们其中任何一个都能出来另外几个。
<script language="vbscript"> Set objHTTP = CreateObject("MSXML2.XMLHTTP") Set xmlDOC =CreateObject("MSXML.DOMDocument") strWebserviceURL = "http://icech/WebService1/Service1.asmx/Add" '设置参数和值 strRequest = "a=2&b=3" objHTTP.Open "POST", strWebserviceURL, False '设置Content-Type很重要 objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" objHTTP.Send(strRequest) bOK = xmlDOC.load(objHTTP.responseXML) '查看状态值,这里是用MsgBox的方式显示的,你可以根据 '自己的需要用其他方式显示 msgBox objHTTP.Status msgbox objHTTP.StatusText 'objHTTP.Status=200,这里就可以处理返回的xml片段了 '如果需要,可以替换返回的xml字符串当中的<和> xmlStr = xmlDOC.xml xmlStr = Replace(xmlStr,"<","<",1,-1,1) xmlStr = Replace(xmlStr,">",">",1,-1,1) msgbox xmlStr </script> |
(代码6)
5、用ASP.Net调用Web Service
在VS.Net 2003中新建窗体(我这里使用的C#),我这里的文件是WebForm1.aspx,编辑WebForm1.aspx.cs代码。
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;
namespace WebService1 { /// /// WebForm1 的摘要说明。 /// public class WebForm1 : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 int a=5; int b=6; Service1 AddNum=new Service1(); string sum=AddNum.Add(a,b).ToString(); Response.Write("SUM="+sum); }
#region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); }
/// /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion } }
|
(代码7)
这些都是最基本最常见的一些测试,网上有很多,icech只是进行了整理,希望对初学的朋友能够有所帮助。我的网站地址是http://www.weste.net/,论坛地址是http://bbs.weste.net/。
后面我还会继续对Web Service进行一些学习,主要是针对数据库和更加复杂和实用的一些功能,希望大家能够喜欢。