收藏 分享(赏)

c#_操作webservice(经典入门教程).doc

上传人:kpmy5893 文档编号:7349859 上传时间:2019-05-15 格式:DOC 页数:17 大小:312KB
下载 相关 举报
c#_操作webservice(经典入门教程).doc_第1页
第1页 / 共17页
c#_操作webservice(经典入门教程).doc_第2页
第2页 / 共17页
c#_操作webservice(经典入门教程).doc_第3页
第3页 / 共17页
c#_操作webservice(经典入门教程).doc_第4页
第4页 / 共17页
c#_操作webservice(经典入门教程).doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

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

2、 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 服务

3、供应商和使用者的新项目。在用户能够调用 Web 服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI 是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用 SOAP 消息机制(标准的 XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用 XML 格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。概念补充:http soap 关系http:是一个客户端和服务器端请求和应答的标准(TCP )。 http 协议其目的是为了提供一种发布和接收 htttp 页面的方法一 http 协议的客户端与服务器的交互:

4、由 HTTP 客户端发起一个请求,建立一个到服务器指定端口(默认是 80 端口)的 TCP 连接。HTTP 服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如“HTTP/1.1 200 OK“,和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。soap 协议:它描述了一种在分散或分布式的环境中如何交换信息的轻量级协议。soap在 http 协议的基础上,一个基于 XML 的协议。不同:都是底层的通信协议,请求包的格式不同而已,soap 包是 XML 格式,http 纯文本格式。关系:SOAP 是个通信协议, SOAP 在

5、HTTP 协议的基础上,把编写成 XML 的REQUEST 参数, 放在 HTTP BODY 上提交个 WEB SERVICE 服务器(SERVLET,ASP 什么的) 处理完成后,结果也写成 XML 作为 RESPONSE 送回用户端, 为了使用户端和 WEB SERVICE 可以相互对应,可以使用 WSDL 作为这种通信方式的描述文件,利用 WSDL 工具可以自动生成 WS 和用户端的框架文件,SOAP 具备把复杂对象序列化捆绑到 XML 里去的能力。Membrane SOAP Monitor,这个 soap 监听工具。这是德国的一家在线 web 服务注册公司 predic8 做的开源 s

6、oap 监听工具,简单好用。windows 下最新的版本为 1.1.2 版,下载地址: http:/ 还有 linux 下的版本:http:/ 源码:http:/ 具体使用: 1) 运行 exe 文件(linux 下可能是 jar 文件) ; 2) 点击菜单项 membrane-add rule ,进入后默认选项即可,点 next; 3) 设置端口号( 不产生冲突的任意端口) ,点 next; 4) 设置主机及端口( 部署服务的地址及服务器的端口),完成。当调用网上发布的服务时,如检查 qq 是否在线的服务:http:/ 4)中的 host 设为远端服务的网址,如 ,端口设为服务的端口,上面就

7、是 80 端口。 当我们监听 soap 消息时,只要访问了 web 服务,即可在 membrane 的界面显示发送及接受的 soap 消息概念补充:View CodeXML Web Service 的特点View Code二、Web Service 开发.net 平台内建了对 Web Service 的支持,包括 Web Service 的构建和使用。与其它开发平台不同,使用.net 平台,你不需要其他的工具或者 SDK 就可以完成Web Service 的开发了。.net Framework 本身就全面支持 Web Service,包括服务器端的请求处理器和对客户端发送和接受 SOAP 消息

8、的支持。下来我们就一步一步的用 Microsoft Visual Studio .net 20058(后面简称 VS.Net 2008)创建和使用一个简单的 Web Service。2.1、用创建一个最简单的 Web Service首先,打开 VS2005,打开“文件- 新建-网站“,选择 “ASP.NET Web 服务“查看 Service.cs 代码,你会发现 VS.Net 2005 已经为 Web Service 文件建立了缺省的框架。原始代码为:?默认工程里面已经有一个 Hello World 的方法了,?namespace WebService1/ / Service1 的摘要说明/

9、 WebService(Namespace = “http:/tempuri.org/“)/用于向 XML Web services 添加附加信息,如描述其功能的字符串。/对于将要发布和执行的 XML Web services 来说,WebServiceAttribute 不是必需的。/可以使用 WebServiceAttribute 为 XML Web services 指定不受公共语言运行库标识符(用于 XML Web services 的“服务说明”和“服务帮助”页)规则限制的名称。/XML Web services 在成为公共之前,应该更改其默认的 XML 命名空间。/每个 XML W

10、eb services 都需要唯一的 XML 命名空间来标识它,以便客户端应用程序能够将它与网络上的其他服务区分开来。http:/tempuri.org/ 可用于正在开发中的 XML Web services,/但是已发布的 XML Web services 应该使用更具永久性的命名空间。例如,可以将公司的 Internet 域名作为 XML 命名空间的一部分。/虽然很多 XML Web services 的 XML 命名空间与 URL 很相似,但是,它们无需指向 Web 上的某一实际资源。(XML Web services 的 XML 命名空间是 URI。)对于使用 ASP.NET 创建的

11、XML Web services,可以使用 Namespace 属性更改默认的 XML 命名空间。WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)/ConformsTo 获取或设置绑定声称所符合的 Web 服务互操作性 (WSI) 规范。 /声明定义一个或多个 XML Web services 方法的绑定。无法继承此类。/按 Web 服务描述语言 (WSDL) 的定义,绑定类似于一个接口,原因是它定义一组具体的操作。/每个 XML Web services 方法都是特定绑定中的一项操作。XML Web services 方法

12、是 XML Web services 的默认绑定的成员,/或者是在应用于实现 XML Web services 的类的 WebServiceBindingAttribute 中指定的绑定的成员。/XML Web services 可以通过将多个 WebServiceBindingAttribute 属性应用于 XML Web services 来实现多个绑定。/将一个或多个 WebServiceAttribute 属性应用到 XML Web services 之后,可以将 SoapDocumentMethodAttribute 或 SoapRpcMethodAttribute 应用到各个 XM

13、L Web services 方法/以指示由特定的 XML Web services 方法实现的绑定操作。/设置 SoapDocumentMethodAttribute 或 SoapRpcMethodAttribute 的 Binding 属性以指定 XML Web services 方法正在为其实现操作的绑定。System.ComponentModel.ToolboxItem(false)/提供工具箱项的基实现。/ 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。/ System.Web.Script.Services.ScriptServicepu

14、blic class Service1 : System.Web.Services.WebService/表示此网站项目实现的一个 Web 服务,如同将此网站引用添加到项目时以 Visual Studio 生成的 .asmx 文件表示一样。WebMethod/向使用 ASP.NET 创建的 XML Web services 中的某个方法添加此属性 (Attribute) 后,就可以从远程 Web 客户端调用该方法。无法继承此类。/初始化 WebMethodAttribute 类的新实例。public string HelloWorld()return “Hello World“;直接运行看看效

15、果,点击显示页面上图中的“HelloWorld“超链接,跳转到下一页面:点击“调用“按钮,就可以看到用 XML 格式返回的 Web Service 结果下图。说明我们的 Web Service 环境没有问题,而且还初步接触了一下最简单的 Web Service。2.2、创建一个简单带有功能的 Web Service上面我们宏观的了解了 webservice,其实它就是个对外的接口,里面有函数可供外部客户调用(注意:里面同样有客户不可调用的函数).假若我们是服务端, 我们写好了个 webservice,然后把它给了客户 (同时我们给了他们调用规则 ),客户就可以在从服务端获取信息时处于一个相对透

16、明的状态.即是客户不了解(也不需要)其过程,他们只获取数据.在代码文件里,如果我们写了一个函数后,希望此函数成为外部可调用的接口函数,我们必须在函数上面添上一行代码WebMethod(Description=“函数的描述信息“),如果你的函数没有这个申明,它将不能被用户引用.下来我们开始编写一个简单的 Web Service 的例子。先把默认的 HelloWorld 方法注释掉,简单的写了求加减乘除运算的四个方法;view plaincopy to clipboardprint?using System; using System.Linq; using System.Web; using S

17、ystem.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; WebService(Namespace = “http:/tempuri.org/“) WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1) / 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 / System.Web.Script.Services.ScriptService public class Service : S

18、ystem.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 subt

19、ract(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;

20、using System.Web.Services;using System.Web.Services.Protocols;using System.Xml.Linq;WebService(Namespace = “http:/tempuri.org/“)WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)/ 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。/ System.Web.Script.Services.ScriptServicepublic class Service : S

21、ystem.Web.Services.WebServicepublic 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

22、 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;elsereturn 0;运行可以看到我们自己写的可以被调用的方法,如下图:同样点击 addition 方法,进入 addition 方法的调用页。在参数上面输入参数

23、 i=3,j=3,如上图,点击调用, 就可以看到用 XML 格式返回的Web Service 结果(i 与 j 相加的结果)下图到这里,我们会发现,其实 webservice 并不是那么的神秘,它也不过只是个接口,对我们而言,侧重点就是是接口函数的编写 .2.3、用 ASP.NET 调用 Web Service首先,打开 VS2005,打开“文件- 新建-网站“,选择 “ASP.NET 网站“。选好存储位置,语言后点击确定,进入默认页面。然后先添加 Web 引用,把WebService 引到当前的工程里面。方法是:在资源管理器中点击右键,选择添加 Web 引用,调出对话框:在 URL 中填入,

24、前面写好的 WebService 运行后浏览器上面显示的地址(即:WebService 发布后的访问地址 ),点击“ 前往“按钮,如上图,就会显示出所引用的 WebService 中可以调用的方法,然后点击“添加引用“,就将 webservice引用到了当前的工程里面 ,如下图,解决方案中会出现引进来的 WebService文件我们在这就练习调用 webservice 的四个方法,做一个简单的调用的例子,先在网站的前台添加几个控件,代码如下:view plaincopy to clipboardprint?无标题页 + - * / 无标题页 +-*/然后在后台写调用的代码,调用之前和使用其它的

25、对象一样,要先实例化,实例化的方法是 localhost.Service a = new localhost.Service();然后就可以通过 a来访问 WebService 里面提供的方法了。在这个例子里面,动态的创建了一个button 控件来触发 WebService 的调用,后台代码如下:运行后可以看到效果,如下图所示,在前面两个 Textbox 里面输入两个操作数,在中间的下拉列表中选择操作符,然后点击“=“ 号,将计算的结果输出到第三个Textbox 里面。而整个计算并不是在本地进行的,是在 Web 服务端进行计算的然后将结果通过XML 返还给了调用方的,所以,在运行该程序的时候,

26、WebService 程序还必须启动,否则会报无法连接远程服务器的异常,如下图:后台代码如下: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 S

27、ystem.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.Servi

28、ce(); 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.multipli

29、cation(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.S

30、ecurity;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 sende

31、r, 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), doub

32、le.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,不管多么复杂,整个流程都是这样的

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报