您的位置:首页 > 其它

用VS.NET 2003开发和调用Web Service实例

2008-08-25 15:40 369 查看
“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。


550)this.width=550" border=undefined>

(图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)


550)this.width=550" border=undefined>

(图2)


550)this.width=550" border=undefined>

(图3)

  再点击“调用”按钮,就可以看到用XML格式返回的Web Service结果(如图4)。说明我们的Web Service环境没有问题,而且还初步接触了一下最简单的Web Service。


550)this.width=550" border=undefined>

(图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)。


550)this.width=550" border=undefined>

(图5)


550)this.width=550" border=undefined>

(图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进行一些学习,主要是针对数据库和更加复杂和实用的一些功能,希望大家能够喜欢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: