当前位置:首页>>开发编程>>VS.NET>>新闻内容
用VS.NET 2003开发和调用Web Service实例
作者:本站原创 icech 发布时间:2004-6-30 11:34:50 文章来源:西部E网

  “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,"&lt;","<",1,-1,1)
xmlStr = Replace(xmlStr,"&gt;",">",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字符串当中的&lt;和&gt;
xmlStr = xmlDOC.xml
xmlStr = Replace(xmlStr,"&lt;","<",1,-1,1)
xmlStr = Replace(xmlStr,"&gt;",">",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进行一些学习,主要是针对数据库和更加复杂和实用的一些功能,希望大家能够喜欢。


最新更新
·C#中使用Split分隔字符串的技
·VS2008开发中Windows Mobile
·PC机和移动设备上绝对路径的
·C#程序加壳的方法(使用Sixx
·当前上下文中不存在名称Conf
·请插入磁盘:Visual Studio 2
·用VS.NET读取Flash格式文件信
·在ASP.NET中使用AJAX的简单方
·VS.NET 2005中常用的一些代码
·安装VS.NET 2005 SP1补丁全攻
相关信息
画心
愚爱
偏爱
火苗
白狐
画沙
犯错
歌曲
传奇
稻香
小酒窝
狮子座
小情歌
全是爱
棉花糖
海豚音
我相信
甩葱歌
这叫爱
shero
走天涯
琉璃月
Nobody
我爱他
套马杆
爱是你我
最后一次
少女时代
灰色头像
断桥残雪
美了美了
狼的诱惑
我很快乐
星月神话
心痛2009
爱丫爱丫
半城烟沙
旗开得胜
郎的诱惑
爱情买卖
2010等你来
我叫小沈阳
i miss you
姑娘我爱你
我们都一样
其实很寂寞
我爱雨夜花
变心的玫瑰
犀利哥之歌
你是我的眼
你是我的OK绷
贝多芬的悲伤
哥只是个传说
丢了幸福的猪
找个人来爱我
要嫁就嫁灰太狼
如果这就是爱情
我们没有在一起
寂寞在唱什么歌
斯琴高丽的伤心
别在我离开之前离开
不是因为寂寞才想你
爱上你等于爱上了错
在心里从此永远有个你
一个人的寂寞两个人的错