zoukankan      html  css  js  c++  java
  • 用VS.NET 2003开发和调用Web Service实例

    “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++0x11新特性:delete删除函数
    网络研发工程师
    cannot find -lGL
    webSocket 使用 HttpSession 的数据配置与写法
    websocket 使用 spring 的service层 ,进而调用里面的 dao层 来操作数据库 ,包括redis、mysql等通用
    redis 重启服务丢失 密码设置 现象 与 解决过程
  • 原文地址:https://www.cnblogs.com/inspurhaitian/p/1275840.html
Copyright © 2011-2022 走看看