当前位置: 澳门新濠3559 > 编程 > 正文

WebService接口创建及调用

时间:2019-11-08 04:40来源:编程
1.1、Web Service基本概念 Web Service也叫XML Web ServiceWebService是风度翩翩种可以吸取从Internet恐怕Intranet上的别的系统中传送过来的号召,轻量级的单身的简报技艺。是:通过SOAP在Web上提供的软

1.1、Web Service基本概念

Web Service也叫XML Web ServiceWebService是风度翩翩种可以吸取从Internet恐怕Intranet上的别的系统中传送过来的号召,轻量级的单身的简报技艺。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行认证,并通过UDDI进行挂号。

XML:(Extensible 马克up Language)扩张型可标识语言。面向长时间的近来数据管理、面向环球网络,是Soap的幼功。

Soap:(Simple Object Access Protocol)轻易对象存取合同。是XML Web 瑟维斯的通讯公约。当客商通过UDDI找到您的WSDL描述文档后,他通过方可SOAP调用你构造建设的Web服务中的一个或几个操作。SOAP是XML文书档案方式的调用方法的规范,它能够支撑不一样的平底接口,像HTTP(S)大概SMTP。

WSDL:(Web Services Description Language) WSDL 文件是二个 XML 文书档案,用于证贝因美组 SOAP 消息甚至哪些调换那么些音讯。大许多情形下由软件自动生成和使用。

UDDI (Universal Description, Discovery, and Integration) 是多个珍视针对Web服务中间商和使用者的新品类。在客户能够调用Web服务在此之前,必需分明这几个服务内包罗哪些商务方法,找到被调用的接口定义,还要在服务带给编排软件,UDDI是黄金时代种遵照描述文书档案来指导迷津种类查找相应服务的体制。UDDI利用SOAP音信机制(标准的XML/HTTP卡塔尔来宣布,编辑,浏览甚至查找注册音信。它利用XML格式来封装各样差别门类的多寡,何况发送到注册大旨依旧由登记中央来回到必要的数据。

1.2、XML Web Service的特点

Web Service的要紧对象是跨平台的可互操作性。为了落到实处这一指标,Web Service完全依赖XML(可增添标志语言卡塔尔、XSD(XML Schema卡塔尔等独立于阳台、独立于软件承包商的正统,是开创可互操作的、分布式应用程序的新平台。因而使用Web Service有比非常多独特之处:

1、跨防火墙的通讯

假诺应用程序有不少的客商,并且布满在世界各州,那么客户端和服务器之间的通讯将是三个高难的主题材料。因为顾客端和服务器之间日常会有防火墙大概代理服务器。古板的做法是,接受用浏览器作为顾客端,写下一大堆ASP页面,把应用程序的中等层拆穿给最后客户。那样做的结果是付出难度大,程序很难保证。 假如顾客端代码不再那样信任于HTML表单,客商端的编制程序就轻便多了。倘若中间层组件换到Web Service的话,就能够从顾客界面直接调用中间层组件,进而省去创设ASP页面包车型客车那一步。要调用Web Service,能够直接使用Microsoft SOAP Toolkit或.net那样的SOAP客商端,也得以行使自身付出的SOAP客商端,然后把它和应用程序连接起来。不仅仅收缩了开拓周期,还缩短了代码复杂度,并可以增加应用程序的可维护性。同不时间,应用程序也不再须求在历次调用中间层组件时,都跳转到相应的"结果页"。

2、应用程序集成

供销合作社级的应用程序开荒者都明白,公司里平时都要把用不一致语言写成的、在不一样平台上运转的种种程序集成起来,而这种购并将费用异常的大的支付技艺。应用程序常常索要从运营的风度翩翩台主机上的程序中获取数据;恐怕把数据发送到主机或别的平台应用程序中去。纵然在同二个阳台上,不一样软件厂家生产的种种软件也反复需求集成起来。通过Web Service,应用程序能够用标准的议程把效果和数据"暴光"出来,供其他应用程序使用。

XML Web services 提供了在松耦合情形中采取规范公约(HTTP、XML、SOAP 和 WSDL卡塔 尔(阿拉伯语:قطر‎交流消息的技术。音讯能够是结构化的、带项指标,也足以是高枕而卧定义的。

3、B2B的集成

B2B 指的是Business to Business,as in businesses doing business with other businesses,商家(泛指公司)对同盟社的电子商务,即公司与商家之间通过互连网开展成品、服务及音讯的沟通。通俗的传道是指开展电子商务交易的供应和须要双方都是商铺(或集团、企业),她们选取了Internet的技能或种种商务互联网平台,达成商务交易的长河。

Web Service是B2B集成成功的非常重要。通过Web Service,集团得以只需把第意气风发的商务应用"暴光"给指定的承包商和客商,就足以了,Web Service运维在Internet上,在世界别的地点都可轻便实现,其运作费用就相对比较低。Web Service只是B2B集成的二个注重部分,还索要过多其余的生机勃勃部分才干兑现并轨。 用Web Service来达成B2B集成的最大利润在于能够任性达成互操作性。只要把商务逻辑"揭示"出来,成为Web Service,就可以让别的内定的同盟同伴调用这么些商务逻辑,而无论是他们的系统在哪些平台上运维,使用什么支出语言。那样就大大收缩了花在B2B集成上的时刻和基金。

4、软件和数目重用

Web Service在允许重用代码的还要,能够选拔代码背后的数额。使用Web 瑟维斯,再也不用像早先这样,要先从第三方购买、安装软件组件,再从应用程序中调用那个组件;只需求直接调用远端的Web Service就足以了。另生机勃勃种软件重用的情景是,把一些个应用程序的功能集成起来,通过Web Service"揭发"出来,就足以特别轻易地把富有那几个职能都合并到你的山头站点中,为顾客提供叁个联结的、友好的分界面。 能够在应用程序中动用第三方的Web Service提供的功力,也足以把温馨的应用程序作用通过Web Service提要求外人。二种境况下,都得以选替代码和代码背后的数目。

从以上论述能够见到,Web Service在通过Web进行互操作或远程调用的时候是最可行的。可是,也会有一点处境,Web Service根本不能够带给此外收益,Web Service有弹指间顽固的病魔:

1、 单机应用程序

当前,公司和村办还使用着众多桌面应用程序。此中有的只要求与本机上的其余程序通讯。在此种意况下,最棒就绝不用Web Service,只要用本地的API就足以了。COM非常符合于在此种情景下工作,因为它既小又快。运转在长期以来台服务器上的服务器软件也是如此。当然Web Service 也能用在这里些地方,但这样不仅仅损耗太大,并且不会带给其余功利。

2、 局域网的生龙活虎部分应用程序

在不胜枚举运用中,全体的程序都是在Windows平台下利用COM,都运作在同四个局域网络。在此些程序里,使用DCOM会比SOAP/HTTP有效得多。诸如此类,假如四个.net主次要一连到局域网络的另四个.net程序,应该使用.net Remoting。其实在.net Remoting中,也得以钦定使用SOAP/HTTP来进展Web Service 调用。不过最佳只怕间接通过TCP实行RPC调用,那样会使得得多。

1.3、XML Web Service的应用

1.前期的 XML Web Service常常是能够低价地融会应用程序的新闻来自,如股价、天气预测、体育成就等等。

2.以 XML Web Service形式提供现有应用程序,能够营造新的、更有力的应用程序,并利用 XML Web 瑟维斯 作为组织块。

比方,客户能够付出一个购销应用程序,以活动拿到来自差异分销商的价位新闻,进而使顾客能够筛选承包商,提交订单,然后追踪货品的运送,直至收到商品。而经销商的应用程序除了在Web上提供劳动外,仍为能够动用XML Web Service检查顾客的信用、抽取货款,并与货物运输企业管理办公室理货运手续。

二、Web Service开发

.net平台内建了对Web Service的支撑,包涵Web 瑟维斯的创设和应用。与其他费用平台分化,使用.net平台,你没有必要其余的工具也许SDK就能够实现Web Service的付出了。.net Framework自己就到家帮衬Web Service,包涵服务器端的央浼微机和对顾客端发送和承担SOAP新闻的支撑。下来大家就一步一步的用Microsoft Visual Studio .net 二零零六8(前面简单称谓VS.Net 二〇一〇卡塔 尔(阿拉伯语:قطر‎创立和应用二个轻便易行的Web Service。

2.1、用创设叁个最简单易行的Web Service

首先,打开VS2005,打开"文件-新建-网站",选择"ASP.NET Web服务"

 图片 1

翻开瑟维斯.cs代码,你会意识VS.Net 二〇〇六黄金时代度为Web 瑟维Sven件创立了缺省的框架。原始代码为:

view plaincopy to clipboardprint?
using System;   
using System.Linq;   
using System.Web;   
using System.Web.Services;   
using System.Web.Services.Protocols;   
using System.Xml.Linq;   
[WebService(Namespace = "")]   
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]   
// 若要允许使用 ASP.NET AJAX 从剧本中调用此 Web 服务,请裁撤对下行的批注。   
// [System.Web.Script.Services.ScriptService]   
public class Service : System.Web.Services.WebService   
{   
    public Service () {   
        //若是使用规划的构件,请撤废注释以下行    
        //InitializeComponent();    
    }   
    [WebMethod]   
    public string HelloWorld()   
    {   
        return "Hello World";   
    }   
}  
using System;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
[WebService(Namespace = "")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要允许利用 ASP.NET AJAX 从剧本中调用此 Web 服务,请打消对下行的申明。
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
    public Service () {
        //就算使用规划的零器件,请撤废注释以下行 
        //InitializeComponent(); 
    }
    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }
}

暗中同意工程里面早就有二个Hello World的主意了,直接运转看看效果,

 图片 2

点击彰显页面上海教室中的"HelloWorld"超链接,跳转到下风姿洒脱页面:

 图片 3

点击"调用"按键,就能够看看用XML格式重回的Web 瑟维斯结果下图。表明大家的Web Service情形没不常,并且还起头接触了生机勃勃晃最简便的Web Service。

2.2、创立一个回顾带有效率的Web 瑟维斯

上面大家宏观的垂询了webservice,其实它就是个对外的接口,里面有函数可供外界客商调用(注意:里面相近有顾客不可调用的函数).即便大家是服务端,大家写好了个webservice,然后把它给了客商(同一时间咱们给了他们调用准则),顾客就能够在从服务端获取音信时处于三个相对透明的状态.正是顾客不打听(也无需)其进程,他们只获得数据.在代码文件里,若是我们写了二个函数后,希望此函数成为外界可调用的接口函数,大家亟须在函数方面添上意气风发行代码[WebMethod(Description="函数的叙述音讯")],如若您的函数未有这几个发明,它将无法被客商引用.下来大家初叶编写制定一个大约的Web Service 的例证。

先把暗许的HelloWorld方法注释掉,轻易的写了求加减乘除运算的八个艺术;

view plaincopy to clipboardprint?
using System;   
using System.Linq;   
using System.Web;   
using System.Web.Services;   
using System.Web.Services.Protocols;   
using System.Xml.Linq;   
[WebService(Namespace = "")]   
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]   
// 若要允许使用 ASP.NET AJAX 从剧本中调用此 Web 服务,请废除对下行的阐明。   
// [System.Web.Script.Services.ScriptService]   
public class Service : System.Web.Services.WebService   
{   
    public Service () {   
        //尽管使用规划的零零件,请撤废注释以下行    
        //InitializeComponent();    
    }   
    //[WebMethod]   
    //public string HelloWorld()   
    //{   
    //    return "Hello World";   
    //}   
    [WebMethod(Description = "求和的法子")]   
    public double addition(double i, double j)   
    {   
        return i + j;   
    }   
    [WebMethod(Description = "求差的主意")]   
    public double subtract(double i, double j)   
    {   
        return i - j;   
    }   
    [WebMethod(Description = "求积的章程")]   
    public double multiplication(double i, double j)   
    {   
        return i * j;   
    }   
    [WebMethod(Description = "求商的不二等秘书籍")]   
    public double division(double i, double j)   
    {   
        if (j != 0)   
            return i / j;   
        else  
            return 0;   
    }   
}  
using System;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
[WebService(Namespace = "")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要允许接收 ASP.NET AJAX 从剧本中调用此 Web 服务,请撤销对下行的批注。
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
    public Service () {
        //固然使用布置的机件,请撤消注释以下行 
        //InitializeComponent(); 
    }
    //[WebMethod]
    //public string HelloWorld()
    //{
    //    return "Hello World";
    //}
    [WebMethod(Description = "求和的不二等秘书诀")]
    public double addition(double i, double j)
    {
        return i + j;
    }
    [WebMethod(Description = "求差的法子")]
    public double subtract(double i, double j)
    {
        return i - j;
    }
    [WebMethod(Description = "求积的点子")]
    public double multiplication(double i, double j)
    {
        return i * j;
    }
    [WebMethod(Description = "求商的章程")]
    public double division(double i, double j)
    {
        if (j != 0)
            return i / j;
        else
            return 0;
    }
}  

运作可以看看我们温馨写的能够被调用的情势,如下图:

 图片 4

同一点击addition方法,进入addition方法的调用页。

 图片 5

在参数方面输入参数i=3,j=3,如上航海用教室,点击调用,就足以观望用XML格式再次来到的Web Service结果(i与j相加的结果)下图

 到这里,大家会意识,其实webservice实际不是那么的心腹,它也只是只是个接口,对大家来讲,侧入眼正是是接口函数的编写.

2.3、用ASP.NET调用Web Service
首先,打开VS2005,打开"文件-新建-网站",选择"ASP.NET网站"。

 图片 6

选好存款和储蓄地点,语言后点击明确,走入私下认可页面。然后先增添Web引用,把WebService引到日前的工程里面。方法是:在能源微处理器中式茶食击右键,选用增添Web 引用,调出对话框:

 图片 7

在UWranglerL中填入,前面写好的WebService运转后浏览器上边呈现之处(即:WebService公布后的拜见地址 卡塔尔国,点击"前往"开关,如上海教室,就能够显得出所引述的WebService中得以调用的法子,然后点击"增多援引",就将webservice引用到了眼前的工程里面 ,如下图,解决方案中会现身引入来的Web瑟维Sven件

 图片 8

我们在此就练习调用webservice的多个点子,做三个轻巧易行的调用的事例,先在网址的前台增多多少个控件,代码如下:

view plaincopy to clipboardprint?
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>   
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">   
<html xmlns="">   
<head runat="server">   
    <title>无标题页</title>   
</head>   
<body>   
    <form id="form1" runat="server">   
    <div>   
        <asp:TextBox ID="Num1" runat="server"></asp:TextBox>   
             <select id="selectOper" runat = "server">   
                 <option>+</option>   
                 <option>-</option>   
                 <option>*</option>   
                 <option>/</option>   
             </select>   
             <asp:TextBox ID="Num2" runat="server"></asp:TextBox>   
        <asp:Button ID="Button1" runat="server" Text="=" onclick="Button1_Click" />   
             <asp:TextBox ID="Result" runat="server"></asp:TextBox>   
    </div>   
    </form>   
</body>   
</html>  
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html xmlns="">
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="Num1" runat="server"></asp:TextBox>
             <select id="selectOper" runat = "server">
                 <option>+</option>
                 <option>-</option>
                 <option>*</option>
                 <option>/</option>
             </select>
             <asp:TextBox ID="Num2" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="=" onclick="Button1_Click" />
             <asp:TextBox ID="Result" runat="server"></asp:TextBox>
    </div>
    </form>
</body>
</html>  

接下来在后台写调用的代码,调用早前和应用其余的靶子同样,要先实例化,实例化的点子是localhost.Servicea = new localhost.Service();然后就足以因此a来访谈WebService里边提供的法门了。在这里个事例里面,动态的创制了四个button控件来触发Web瑟维斯的调用,后台代码如下:
运营后能够看看效果,如下图所示,在日前三个Textbox里面输入五个操作数,在上游的下拉列表中精选操作符,然后点击"="号,将总计的结果输出到第多少个Textbox里面。

 图片 9

而整个总结并非在本土开展的,是在Web服务端举行总计的下一场将结果通过XML返还给了调用方的,所以,在运转该程序的时候,WebService程序还非得运维,否则会报不大概连接远程服务器的可怜,如下图:

 图片 10

后台代码如下:

view plaincopy to clipboardprint?
using System;   
using System.Configuration;   
using System.Data;   
using System.Linq;   
using System.Web;   
using System.Web.Security;   
using System.Web.UI;   
using System.Web.UI.HtmlControls;   
using System.Web.UI.WebControls;   
using System.Web.UI.WebControls.WebParts;   
using System.Xml.Linq;   
public partial class _Default : System.Web.UI.Page    
{   
    protected void Page_Load(object sender, EventArgs e)   
    {   
    }   
    protected void Button1_Click(object sender, EventArgs e)   
    {   
        string selectFlag = selectOper.Value;   
        localhost.Service web = new localhost.Service();   
        if (selectFlag.Equals("+"))   
        {   
            Result.Text =(web.addition(double.Parse(Num1.Text),double.Parse(Num2.Text))).ToString();   
        }   
        else if (selectFlag.Equals("-"))   
        {   
            Result.Text = (web.subtract(double.Parse(Num1.Text), double.Parse(Num2.Text))).ToString();   
        }   
        else if (selectFlag.Equals("*"))   
        {   
            Result.Text = (web.multiplication(double.Parse(Num1.Text), double.Parse(Num2.Text))).ToString();   
        }   
        else if (selectFlag.Equals("/"))   
        {   
            Result.Text = (web.division(double.Parse(Num1.Text), double.Parse(Num2.Text))).ToString();   
        }   
    }   
}  
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string selectFlag = selectOper.Value;
        localhost.Service web = new localhost.Service();
        if (selectFlag.Equals("+"))
        {
            Result.Text =(web.addition(double.Parse(Num1.Text),double.Parse(Num2.Text))).ToString();
        }
        else if (selectFlag.Equals("-"))
        {
            Result.Text = (web.subtract(double.Parse(Num1.Text), double.Parse(Num2.Text))).ToString();
        }
        else if (selectFlag.Equals("*"))
        {
            Result.Text = (web.multiplication(double.Parse(Num1.Text), double.Parse(Num2.Text))).ToString();
        }
        else if (selectFlag.Equals("/"))
        {
            Result.Text = (web.division(double.Parse(Num1.Text), double.Parse(Num2.Text))).ToString();
        }
    }
}  

到此三个二个总结的WebService的开采和调用就已经到位了,在骨子里运用中可以依据自身的急需,写一些成效强大的,复杂的WebService,不管多么复杂,整个流程都以如此的。

 

转发地址:

本文来源CSDN博客,转发请标记出处:

编辑:编程 本文来源:WebService接口创建及调用

关键词: