打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
asp.net webService服务
1.1、Web Service基本概念
Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。
XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。
Soap:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过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 Service,再也不必像以前那样,要先从第三方购买、安装软件组件,再从应用程序中调用这些组件;只需要直接调用远端的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 Service 作为构造块。
例如,用户可以开发一个采购应用程序,以自动获取来自不同供应商的价格信息,从而使用户可以选择供应商,提交订单,然后跟踪货物的运输,直至收到货物。而供应商的应用程序除了在Web上提供服务外,还可以使用XML Web Service检查客户的信用、收取货款,并与货运公司办理货运手续。
 
 注意:WebService方法不能返回对象,只能返回值类型数据.如字符串数组 字符串 数值和基本XML的数据如:DataSet  DataTable.
建立一个名为WebService1.asmx的WebService
view plaincopy to clipboardprint?
using System;  
 
using System.Data;  
 
using System.Data.SqlClient;  
 
using System.Web;  
 
using System.Collections;  
 
using System.Web.Services;  
 
using System.Web.Services.Protocols;  
 
using System.ComponentModel;  
 
 
 
namespace WebService1  
 
{  
 
    /// <summary>  
 
    /// Service1 的摘要说明  
 
    /// </summary>  
 
    [WebService(Namespace = "http://www.ebook.org/")]  
 
    [WebServiceBinding(ConformsTo = WsiProfiles.None)]//为了实现方法重载这里设为WsiProfiles.None  
 
    [ToolboxItem(false)]  
 
    public class Service1 : System.Web.Services.WebService  
 
    {  
 
 
 
        [WebMethod]//描述语言语法[property()]  
 
        public int Add(int a, int b)  
 
        {  
 
            return a + b;  
 
        }  
 
 
 
        [WebMethod(MessageName = "Add3")]//为带有三个参数的Add方法取别名  
 
        public int Add(int x, int y, int z)  
 
        {  
 
            return x + y + z;  
 
        }  
 
 
 
        [WebMethod]  
 
        public int GetCount1()  
 
        {  
 
            if (Application["count"] == null)  
 
            {  
 
                Application["count"] = "0";  
 
            }  
 
            int a = int.Parse(Application["count"].ToString());  
 
            a++;  
 
            Application["count"] = a;  
 
            return a;  
 
        }  
 
 
 
        [WebMethod(EnableSession = true)]//启用会话  
 
        public int GetCount2()  
 
        {  
 
            if (Session["count"] == null)  
 
            {  
 
                Session["count"] = "0";  
 
            }  
 
            int a = int.Parse(Session["count"].ToString());  
 
            a++;  
 
            Session["count"] = a;  
 
 
 
            return a;  
 
        }  
 
 
 
        [WebMethod]  
 
        public DataSet GetDataSet()  
 
        {  
 
            DataSet ds = new DataSet();  
 
            string connstr = "server=.;database=pubs;uid=sa;pwd=";  
 
            string sql = "select * from jobs";  
 
            using (SqlConnection conn = new SqlConnection(connstr))  
 
            {  
 
                SqlDataAdapter da = new SqlDataAdapter(sql, conn);  
 
                da.Fill(ds);  
 
            }  
 
            return ds;  
 
        }  
 
    }  
 
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
 
namespace WebService1
{
    /// <summary>
    /// Service1 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://www.ebook.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.None)]//为了实现方法重载这里设为WsiProfiles.None
    [ToolboxItem(false)]
    public class Service1 : System.Web.Services.WebService
    {
 
        [WebMethod]//描述语言语法[property()]
        public int Add(int a, int b)
        {
            return a + b;
        }
 
        [WebMethod(MessageName = "Add3")]//为带有三个参数的Add方法取别名
        public int Add(int x, int y, int z)
        {
            return x + y + z;
        }
 
        [WebMethod]
        public int GetCount1()
        {
            if (Application["count"] == null)
            {
                Application["count"] = "0";
            }
            int a = int.Parse(Application["count"].ToString());
            a++;
            Application["count"] = a;
            return a;
        }
 
        [WebMethod(EnableSession = true)]//启用会话
        public int GetCount2()
        {
            if (Session["count"] == null)
            {
                Session["count"] = "0";
            }
            int a = int.Parse(Session["count"].ToString());
            a++;
            Session["count"] = a;
 
            return a;
        }
 
        [WebMethod]
        public DataSet GetDataSet()
        {
            DataSet ds = new DataSet();
            string connstr = "server=.;database=pubs;uid=sa;pwd=";
            string sql = "select * from jobs";
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                SqlDataAdapter da = new SqlDataAdapter(sql, conn);
                da.Fill(ds);
            }
            return ds;
        }
    }
}view plaincopy to clipboardprint?
  
 建立一个名为Form1.cs的窗体view plaincopy to clipboardprint?
<PRE class=csharp name="code">using System;  
 
using System.Collections.Generic;  
 
using System.ComponentModel;  
 
using System.Data;  
 
using System.Drawing;  
 
using System.Text;  
 
using System.Windows.Forms;  
 
 
 
using accp.com.cn;  
 
 
 
namespace WebServiceTest  
 
{  
 
    public partial class Form1 : Form  
 
    {  
 
        public Form1()  
 
        {  
 
            InitializeComponent();  
 
        }  
 
 
 
        private void button1_Click(object sender, EventArgs e)  
 
        {  
 
            int a = int.Parse(num1.Text);  
 
            int b = int.Parse(num2.Text);  
 
            try 
 
            {  
 
                //用try保护 URL地址固定  
 
               localhost.Service1 service=new localhost.Service1();  
 
                service.Url = "http://localhost:1067/Service1.asmx?WSDL";  
 
                int c = service.Add(a, b);  
 
                txtCount.Text = c.ToString();  
 
                this.dgv.DataSource=service.GetDataSet().Tables[0];  
 
                 
 
            }  
 
            catch (Exception ex)  
 
            {  
 
                throw ex;  
 
            }  
 
        }  
 
    }  
 
}</PRE>  
从webservice中分离出Serice1.cs代码  
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin>wsdl /l:CS /n:accp.com.cn /out:d:\ <A href="http://localhost:1067/Service1.asmx?WSDL">http://localhost:1067/Service1.asmx?WSDL</A
view plaincopy to clipboardprint?using System;     using System.Collections.Generic;     using System.ComponentModel;     using System.Data;     using System.Drawing;     using System.Text;     using System.Windows.Forms;         using accp.com.cn;         namespace WebServiceTest     {         public partial class Form1 : Form         {             public Form1()             {                 InitializeComponent();             }                 private void button1_Click(object sender, EventArgs e)             {                 int a = int.Parse(num1.Text);                 int b = int.Parse(num2.Text);                 try                {                     //用try保护 URL地址固定                    localhost.Service1 service=new localhost.Service1();                     service.Url = "http://localhost:1067/Service1.asmx?WSDL";                     int c = service.Add(a, b);                     txtCount.Text = c.ToString();                     this.dgv.DataSource=service.GetDataSet().Tables[0];                                     }                 catch (Exception ex)                 {                     throw ex;                 }             }         }     }  using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
 
using accp.com.cn;
 
namespace WebServiceTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            int a = int.Parse(num1.Text);
            int b = int.Parse(num2.Text);
            try
            {
                //用try保护 URL地址固定
               localhost.Service1 service=new localhost.Service1();
                service.Url = "http://localhost:1067/Service1.asmx?WSDL";
                int c = service.Add(a, b);
                txtCount.Text = c.ToString();
                this.dgv.DataSource=service.GetDataSet().Tables[0];
              
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
从webservice中分离出Serice1.cs代码
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin>wsdl /l:CS /n:accp.com.cn /out:d:\ http://localhost:1067/Service1.asmx?WSDLview plaincopy to clipboardprint?
生成DLL  
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 csc /out:d:\accp.com.cn.dll /t:library 
生成DLL
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 csc /out:d:\accp.com.cn.dll /t:libraryview plaincopy to clipboardprint?
d:\Service1.cs 
 d:\Service1.csview plaincopy to clipboardprint?
  
 view plaincopy to clipboardprint?
WebService中的设置 
WebService中的设置view plaincopy to clipboardprint?
    <system.web>  
      <webServices >  
        <protocols>  
          <clear/>  
          <add name="Documentation"/>  
          <add name="HttpSoap"/>  
        </protocols>  
      </webServices>  
    </system.web> 
    <system.web>
      <webServices >
        <protocols>
          <clear/>
          <add name="Documentation"/>
          <add name="HttpSoap"/>
        </protocols>
      </webServices>
    </system.web>view plaincopy to clipboardprint?
首先清除所协议,再启用Documentation HttpSoap即可.其它不用启用. 
首先清除所协议,再启用Documentation HttpSoap即可.其它不用启用.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zerolsy/archive/2008/06/18/2562146.aspx
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
webservice理解
BlogJava - 成都心情(Full Speed) - Google 搜索之 WebService 篇
接口测试类型及接口测试工具
WebService
博客园闪存首页新随笔联系管理订阅 随笔- 2465 文章- 0 评论- 173 WCF与WebService的区别
C# Web Service简介及使用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服