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

来源:互联网 发布:学编程英语要好吗 编辑:程序博客网 时间:2024/05/22 15:52

作者:icech 发布时间:2004-6-30 11:34:50  

  “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进行一些学习,主要是针对数据库和更加复杂和实用的一些功能,希望大家能够喜欢。


 

文章来源:西部E网