如何写一个简单的Web webservice接口怎么写

Web&Service入门简介(一个简单的WebService示例)
Web Service入门简介
Service简介
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检查客户的信用、收取货款,并与货运公司办理货运手续。
Service开发
.net平台内建了对Web
Service的支持,包括Web
Service的构建和使用。与其它开发平台不同,使用.net平台,你不需要其他的工具或者SDK就可以完成Web Service的开发了。.net&Framework本身就全面支持Web
Service,包括服务器端的请求处理器和对客户端发送和接受SOAP消息的支持。下来我们就一步一步的用Microsoft Visual Studio
.net 2005(后面简称VS.Net
2005)创建和使用一个简单的Web
2.1、用创建一个最简单的Web
首先,打开VS2005,打开“文件-新建-网站”,选择“ASP.NET Web服务”。
<img src="/blog7style/images/common/sg_trans.gif" real_src ="/cnblogs_com/soso_ak/webservice1.JPG" V:SHAPES="_x" ALT="webservice1" BORDER="0" WIDTH="679" HEIGHT="445"
TITLE="Web&Service入门简介(一个简单的WebService示例)" />
查看Service.cs代码,你会发现VS.Net 2005已经为Web Service文件建立了缺省的框架。原始代码为:
using&System.W
using&System.Web.S
using&System.Web.Services.Protocols
[WebService(Namespace&=&"http://tempuri.org/")]
[WebServiceBinding(ConformsTo&=&WsiProfiles.BasicProfile1_1)]
public&class&Service&:&System.Web.Services.WebService
&&&&public&Service&()&
&&&&&&&&//如果使用设计的组件,请取消注释以下行&
&&&&&&&&//InitializeComponent();&
&&&&[WebMethod]
&&&&public&string&HelloWorld()&{
&&&&&&&&return&"Hello&World";
默认工程里面已经有一个Hello
World的方法了,直接运行看看效果,
<img src="/blog7style/images/common/sg_trans.gif" real_src ="/cnblogs_com/soso_ak/webservice2.JPG" V:SHAPES="_x" ALT="webservice2" BORDER="0" WIDTH="400" HEIGHT="292"
TITLE="Web&Service入门简介(一个简单的WebService示例)" />&
点击显示页面上图中的“HelloWorld”超链接,跳转到下一页面
<img src="/blog7style/images/common/sg_trans.gif" real_src ="/cnblogs_com/soso_ak/webservice3.JPG" V:SHAPES="_x" ALT="webservice3" BORDER="0" WIDTH="443" HEIGHT="304"
TITLE="Web&Service入门简介(一个简单的WebService示例)" />
再点击“调用”按钮,就可以看到用XML格式返回的Web Service结果下图。说明我们的Web Service环境没有问题,而且还初步接触了一下最简单的Web
<img src="/blog7style/images/common/sg_trans.gif" real_src ="/cnblogs_com/soso_ak/webservice4.JPG" V:SHAPES="_x" ALT="webservice4" BORDER="0" WIDTH="458" HEIGHT="173"
TITLE="Web&Service入门简介(一个简单的WebService示例)" />
2.2、创建一个简单带有功能的Web
&&&&&&&上面我们宏观的了解了webservice,其实它就是个对外的接口,里面有函数可供外部客户调用(注意:里面同样有客户不可调用的函数).假若我们是服务端,我们写好了个webservice,然后把它给了客户(同时我们给了他们调用规则),客户就可以在从服务端获取信息时处于一个相对透明的状态.即是客户不了解(也不需要)其过程,他们只获取数据.在代码文件里,如果我们写了一个函数后,希望此函数成为外部可调用的接口函数,我们必须在函数上面添上一行代码[WebMethod(Description="函数的描述信息")],如果你的函数没有这个申明,它将不能被用户引用.下来我们开始编写一个简单的Web
Service&的例子。
&&&&&先把默认的HelloWorld方法注释掉,简单的写了求加减乘除运算的四个方法;
using&System.W
using&System.Web.S
using&System.Web.Services.P
[WebService(Namespace&=&"http://tempuri.org/")]
[WebServiceBinding(ConformsTo&=&WsiProfiles.BasicProfile1_1)]
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;&
运行可以看到我们自己写的可以被调用的方法,如下图:&
<img src="/blog7style/images/common/sg_trans.gif" real_src ="/cnblogs_com/soso_ak/webservice5.JPG" V:SHAPES="_x" ALT="webservice5" BORDER="0" WIDTH="431" HEIGHT="332"
TITLE="Web&Service入门简介(一个简单的WebService示例)" />
同样点击addition方法,进入addition方法的调用页。&&
&<img src="/blog7style/images/common/sg_trans.gif" real_src ="/cnblogs_com/soso_ak/webservice6.JPG" V:SHAPES="_x" ALT="webservice6" BORDER="0" WIDTH="448" HEIGHT="305"
TITLE="Web&Service入门简介(一个简单的WebService示例)" />
在参数上面输入参数i=3,j=3,如上图,点击调用,就可以看到用XML&格式返回的Web
Service结果(i与j相加的结果)下图
<img ALT="webservice7" src="/blog7style/images/common/sg_trans.gif" real_src ="/cnblogs_com/soso_ak/webservice7.JPG" WIDTH="394" HEIGHT="90"
TITLE="Web&Service入门简介(一个简单的WebService示例)" />&
到这里,我们会发现,其实webservice并不是那么的神秘,它也不过只是个接口,对我们而言,侧重点就是是接口函数的编写.
2.3、用ASP.NET调用Web Service
首先,打开VS2005,打开“文件-新建-网站”,选择“ASP.NET网站”.
<img ALT="webservice8" src="/blog7style/images/common/sg_trans.gif" real_src ="/cnblogs_com/soso_ak/webservice8.JPG" WIDTH="679" HEIGHT="444"
TITLE="Web&Service入门简介(一个简单的WebService示例)" />
选好存储位置,语言后点击确定,进入默认页面。然后先添加Web引用,把WebService引到当前的工程里面。方法是:在资源管理器中点击右键,选择添加Web&引用,调出对话框:
<img src="/blog7style/images/common/sg_trans.gif" real_src ="/cnblogs_com/soso_ak/webservice9.JPG" V:SHAPES="_x" ALT="webservice9" BORDER="0" WIDTH="700" HEIGHT="494"
TITLE="Web&Service入门简介(一个简单的WebService示例)" />
在URL中填入,前面写好的WebService运行后浏览器上面显示的地址,点击“前往”按钮,如上图,就会显示出所引用的WebService中可以调用的方法,然后点击“添加引用”,就将webservice引用到了当前的工程里面,如下图,解决方案中会出现引进来的WebService文件<img src="/blog7style/images/common/sg_trans.gif" real_src ="/cnblogs_com/soso_ak/webservice10.JPG" V:SHAPES="_x" ALT="webservice10" BORDER="0" WIDTH="198" HEIGHT="82"
TITLE="Web&Service入门简介(一个简单的WebService示例)" />
我们在这就练习调用webservice的四个方法,做一个简单的调用的例子,先在网站的前台添加几个控件,代码如下:&然后在后台写调用的代码,调用之前和使用其它的对象一样,要先实例化,实例化的方法是localhost.Service&a
=&new&localhost.Service();然后就可以通过a来访问WebService里面提供的方法了。在这个例子里面,动态的创建了一个button控件来触发WebService的调用,后台代码如下:
using&System.D
using&System.C
using&System.W
using&System.Web.S
using&System.Web.UI;
using&System.Web.UI.WebC
using&System.Web.UI.WebControls.WebP
using&System.Web.UI.HtmlC
public&partial&class&_Default&:&System.Web.UI.Page
&&&&protected&void&Page_Load(object&sender,&EventArgs&e)
&&&&&&&&Button&btn&=&new&Button();
&&&&&&&&btn.Width&=&50;
&&&&&&&&btn.Text&=&"=";
&&&&&&&&btn.Click&+=&new&EventHandler(btn_Click);
&&&&&&&&E.Controls.Add(btn);
&&&&void&btn_Click(object&sender,&EventArgs&e)
&&&&&&&&if&(this.txtNum1.Text&!=&""&&&&this.txtNum2.Text&!=&"")
&&&&&&&&&&&&localhost.Service&WebServiceInstance&=&new&localhost.Service();
&&&&&&&&&&&&int&Oper&=&selectOper.SelectedI
&&&&&&&&&&&&switch&(Oper)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&case&0:
&&&&&&&&&&&&&&&&&&&&txtResult.Text&=&WebServiceInstance.addition(double.Parse(txtNum1.Text),&double.Parse(txtNum2.Text)).ToString();
&&&&&&&&&&&&&&&&&&&&break;
&&&&&&&&&&&&&&&&case&1:
&&&&&&&&&&&&&&&&&&&&txtResult.Text&=&WebServiceInstance.subtruct(double.Parse(txtNum1.Text),&double.Parse(txtNum2.Text)).ToString();
&&&&&&&&&&&&&&&&&&&&break;
&&&&&&&&&&&&&&&&case&2:
&&&&&&&&&&&&&&&&&&&&txtResult.Text&=&WebServiceInstance.multiplication(double.Parse(txtNum1.Text),&double.Parse(txtNum2.Text)).ToString();
&&&&&&&&&&&&&&&&&&&&break;
&&&&&&&&&&&&&&&&case&3:
&&&&&&&&&&&&&&&&&&&&txtResult.Text&=&WebServiceInstance.division(double.Parse(txtNum1.Text),&double.Parse(txtNum2.Text)).ToString();
&&&&&&&&&&&&&&&&&&&&break;
&&&&&&&&&&&&}
&运行后可以看到效果,如下图所示,在前面两个Textbox里面输入两个操作数,在中间的下拉列表中选择操作符,然后点击“=”号,将计算的结果输出到第三个Textbox里面。
<img src="/blog7style/images/common/sg_trans.gif" real_src ="/cnblogs_com/soso_ak/webservice11.JPG" V:SHAPES="_x" ALT="webservice11" BORDER="0" WIDTH="556" HEIGHT="97"
TITLE="Web&Service入门简介(一个简单的WebService示例)" />
而整个计算并不是在本地进行的,是在Web服务端进行计算的然后将结果通过XML返还给了调用方的,所以,在运行该程序的时候,WebService程序还必须启动,否则会报无法连接远程服务器的异常,如下图:
<img src="/blog7style/images/common/sg_trans.gif" real_src ="/cnblogs_com/soso_ak/webservice12.JPG" V:SHAPES="_x" ALT="webservice12" BORDER="0" WIDTH="378" HEIGHT="208"
TITLE="Web&Service入门简介(一个简单的WebService示例)" />
到此一个一个简单的WebService的开发和调用就已经完成了,在实际应用中可以根据自己的需要,写一些功能强大的,复杂的WebService,不管多么复杂,整个流程都是这样的。
&%@&Page&Language="C#"&AutoEventWireup="true"&CodeFile="Default.aspx.cs"&Inherits="_Default"&%&
&!DOCTYPE&html&PUBLIC&"-//W3C//DTD&XHTML&1.0&Transitional//EN"&"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
&html&xmlns="http://www.w3.org/1999/xhtml"&
&head&runat="server"&
&&&&&title&Webservice调用实例&/title&
&&&&&form&id="form1"&runat="server"&
&&&&&&&&&div&
&&&&&&&&&&&&运算数1:&asp:TextBox&ID="txtNum1"&runat="server"&&/asp:TextBox&
&&&&&&&&&&&&&select&id="selectOper"&runat="server"&
&&&&&&&&&&&&&&&&&option&+&/option&
&&&&&&&&&&&&&&&&&option&-&/option&
&&&&&&&&&&&&&&&&&option&*&/option&
&&&&&&&&&&&&&&&&&option&/&/option&
&&&&&&&&&&&&&/select&
&&&&&&&&&&&&运算数2:
&&&&&&&&&&&&&asp:TextBox&ID="txtNum2"&runat="server"&&/asp:TextBox&
&&&&&&&&&&&&&span&id="E"&runat="server"&&/span&运算结果:
&&&&&&&&&&&&&asp:TextBox&ID="txtResult"&runat="server"&&/asp:TextBox&
&&&&&&&&&/div&
&&&&&/form&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。急,请教关于webservice的问题,一个简单的应用实例如何实现?_百度知道webservice主要是一些站点为我们写好了的方法,供我们调用,当然我们也可以自己去编写自己的webservice,本文主要是通过一个小的实例,去如何调用webservice。下面先给出几个常用的webservice的调用地址。
快递查询接口 /ExpressService.asmx
ip查询接口 /ipService.asmx
天气预报接口 /weatherService.asmx
身份证查询接口 /IdCardService.asmx
手机归属地接口 /MobilePhoneService.asmx
翻译接口 /TranslationService.asmx
火车时刻接口:/TrainService.asmx
股票查询接口/StockService.asmx
下面我们就拿一个简单的天气预报接口。先把天气预报接口的地址输入地址栏:会出现一些带有链接的方法名和参数说明之类的。看完之后,然后进链接可以看到测试,可以先把我们想测试的参数写进去,点击调用,会出现一个xml文件,这些就是得到的结果,依情况而定我们出把结果处理成我们想要的就可以了。下面说一下怎么在项目中调用:新建一个web项目,然后点击添加引用服务如图,然后点击确定。
这样就会发现在webconfig文件里面多了一下节点,而且项目类中的Service References文件件多了一个绿色的东西。可以点击看看他有哪些方法,应该是和我们在浏览器输入链接的方法是一致的,剩余就是怎么调用了。下面给出具体的代码:本代码值在webForm中先添加Lable、TextBox、Button以及Literal各一个。然后点击按钮。
protected void Button1_Click(object sender, EventArgs e)
if (!string.IsNullOrEmpty(this.TextBox1.Text))
WeatherService.WeatherWebServiceSoapClient service = new WeatherService.WeatherWebServiceSoapClient();
String[] strWeatherInfo = service.getWeatherbyCityName(this.TextBox1.Text);
StringBuilder str = new StringBuilder("");
str.AppendLine("您查看天气信息如下:");
foreach (string info in strWeatherInfo)
str.AppendLine(info+"&br/&");
this.Literal1.Text =str.ToString();
运行程序,输入查看的城市:点击按钮如图所示:
ok基本上一个webservice的调用就完成了。
阅读(...) 评论()一个简单的Webservice的demo(中)_前端页面调用_ASP.NET技巧_
一个简单的Webservice的demo(中)_前端页面调用
来源:人气:1242
一个简单的Webservice的demo(中)_前端页面调用  首先新建项目,这里有两种调用方式,为了能方便理解,新建页面WebserviceTest如下图:    先引用写好的服务,这里用上次写好的服务。见上次写的一个简单的Webservice的demo,简单模拟服务。     这里我们要新建一个服务,调用我们引用给服务。因为一般情况下js不能跨域访问服务的,当然,只是一般,要非得跨域访问也行,网上搜方法,但是那样做就没意义了。新建服务,取名MyJsWebservice,如下图:    在服务中调用引用的服务,并将脚本调用改取消的注释取消。如下图:    生成以下解决方案,现在我们在页面上调用。使用jQuery,Ajax调用。  前端代码:   1 &head runat="server"& 2 &meta http-equiv="Content-Type" content="text/ charset=utf-8"/& 3
&title&WebserviceTest&/title& 4
&scrt src="jquery-1.7.2.min.js"&&/script& 5
&script type="text/script"& 6
$(function () { 7
$("#btnSure").click(function () { 8
var birthday = $("#birthday").val(); 9
$.ajax({10
type: "Post", //Post传参11
url: "/MyJsWebservice.asmx/WhoAreYou",//服务地址12
data: "{birthday:'"+birthday+"'}",//参数13
dataType: "json",14
contentType: "/charset=utf-8",15
success: function (result) {16
// 调用成功后,将获取的名字填入name文本框中。17
$("#name").val(result.d);18
error: function (e) {20
window.alert(e.status);21
&/script&26 &/head&27 &body&28
&form id="form1" runat="server"&29
请输入您的生日:31
&input type="text" id="birthday" /&32
&input type="text" id="name" /&&input type="button" id="btnSure" value="确 定" /&33
&/form&35 &/body&  测试成功:  
优质网站模板一个webservice的初级例子 - lengbingshy - 博客园
posts - 52, comments - 25, trackbacks - 0, articles - 1
&&& 首先,我们必须了解什么是webservice.就概念上来说,可能比较复杂,不过我们可以有个宏观的了解:webservice就是个对外的接口,里面有函数可供外部客户调用(注意:里面同样有客户不可调用的函数).假若我们是服务端,我们写好了个webservice,然后把它给了客户(同时我们给了他们调用规则),客户就可以在从服务端获取信息时处于一个相对透明的状态.即是客户不了解(也不需要)其过程,他们只获取数据.&&& webservice传递的数据只能是序列化的数据,典型的就是xml数据,这里我们也只讨论xml数据的传输.&&& 有了一些对xml webservice的初步了解后,我们将切入正题,即是用一个具体的webservice事例的形式来讲解具体的webservice用法,用具体的事例来讲解一个概念我想怎么也要比单纯的说理能让人容易理解吧.&&& 这里,我们将以一个简单的分布式课件搜索系统为例来讲解.使用VS2003为编译环境,C#为语言,SqlServcer2000为数据库.(这个例子来源于一位网上朋友的文章的启发,觉得很能代表webservice的特点,就按那个想法做了这么个系统来示例了)&&& 首先,明确我们要做什么.我们需要一个对客户的接口,也就是个站点,我们把它称做ServiceGatherSite,它是何种形式都无所谓,甚至它本身并不需要数据库,它只是提供给用户一个查询的接口,真正的服务,普通用户是不接触到的.然后,这里我们还需要若干个提供服务的站点,我们可以称它们为资源站,这里为简单起见,假设有两个资源站,分别叫WebSiteA,WebSiteB,它们可以是不对外公布的,只是为了丰富查询数据而存在.最后,是我们最需要关注的东西---资源站提供给ServiceGatherSite的服务.两个资源站,就有两个服务,我们称为SiteAService和 SiteBService.两个服务间没有任何关系,内部提供的方法也完全没关联,只是需要把方法如何使用告诉ServiceGatherSite,意思是,服务只提供查询接口,返回的数据如何处理,服务本身并不管,全由使用服务的站点分配.&&&&&写了这么多,算是简要的介绍了下有关xml webservice的概念和我们这个例子的结构,下篇文章,我们将开始真正进入代码的设计阶段.&&&&&&& 在VS2003中,开发一个webservice并不是件困难的事,首先,我们新建一个webservice项目(文件-&新建-&项目-&C#-&Web服务应用程序)&&& 建完这个工程,我们将看到一个叫Service1.asmx的文件,这就是webservice的标准文件,它也有UI的概念,不过我们一般不关注,因此,我们查看其cs代码文件.如果你什么都还没做的话,将看见一个被注释掉的helloworld的WebMethod,把注释去掉,在运行,你就可以得到最简单的webservice运行实例了.点击"helloworld"将执行其方法.显然,这个函数对我们的意义只在于宏观的了解了下web服务的写法.&&&& 下面,我们将开始具体介绍webservice的写法.在代码文件里,如果我们写了一个函数后,希望此函数成为外部可调用的接口函数,我们必须在函数上面添上一行代码[WebMethod(Description="函数的描述信息")],如果你的函数没有这个申明,它将不能被用户引用.如:
[WebMethod(Description="最简单的方法")]&&public&string&HelloWorld()&&{&&&return&"Hello&World";&&}
&&& 这个函数就是外部可调用的接口函数,对用户来说相当于一个API.如果某用户在引用了这个服务后,他调用HelloWorld()方法,他就将获得"HelloWorld"这个返回值.&&& 看到这里,我们是不是发现,其实webservice并不是那么的神秘,它也不过只是个接口,对我们而言,侧重点依然是接口函数的编写.下面,我将给出我们的例子所需要的接口函数.
&[WebMethod(Description="查询以获取需要的课件信息")]&&public&XmlDataDocument&GetSiteAData(string&AssignName)&&{&&&DataSet&dsNorthwind&=&new&DataSet();&&//Create&the&connection&string.&&&&&&&&&&&&&&String&sC&&&sConnect="Password=User&ID=Data&Source=eaitest";&&&&&&&&&&&&&&&&&//Create&a&connection&object&to&connect&to&the&northwind&db.&&&OracleConnection&nwconnect&=&new&OracleConnection(sConnect);&&&&//Create&a&command&string&to&select&all&the&customers&in&the&WA&region.&&&String&sCommand&=&"Select&*&from&users";&&&&//Create&an&adapter&to&load&the&DataSet.&&&OracleDataAdapter&myDataAdapter&=&new&OracleDataAdapter(sCommand,&nwconnect);&&&&//Fill&the&DataSet&with&the&selected&records.&&&myDataAdapter.Fill(dsNorthwind,"users");&&&&//Load&the&document&with&the&DataSet.&&&XmlDataDocument&doc&=&new&XmlDataDocument(dsNorthwind);&&&&&&&&//Display&the&XmlDataDocument.&&&doc.Save(Console.Out);&&&&&if(true)&//如果执行成功,存储过程&&&{&&&&XmlNode&root1=doc.DocumentE&&&&&XmlNodeList&roots=root1.SelectNodes("list");&&&&&&&foreach(XmlNode&roota&in&&roots)&&//为所有元素加上站点名称标记&&&&{&&&&&XmlElement&Link=xd.CreateElement("SiteName");&&&&&&Link.InnerText=ConfigurationSettings.AppSettings["SiteName"].ToString();&&&&&roota.AppendChild(Link);&&&&}&&&&return&&&&}&&&else&return&null;}&
&&&&&&&&&& 这是获取资源站点信息的一个接口函数.里面大部分的代码,我想对于有一定asp.net基础的朋友来说,都应该是一看就明白,这里只说明下CStoreProc,这是我封装的一个存储过程类,主要功能是执行各种类型的存储过程.&&&&&&&&& 细心的朋友可能会发现这个函数的返回类型似乎比较特殊,是个xml的文档.我们在前面已经说过,webservice只能传输序列化数据,xml显然满足条件,但比如hash表之类的非序列化数据,是不能传输的,xml使用最为广泛,而且考虑到跨平台应用,所以这里我们只以xml数据的传输来示例.&&&&&&&&&&函数功能很简单,只是要返回查询结果,其数据格式是XmlDataDocument.当查询失败时(无匹配查询结果),我们构造一个xml,返回一个空记录.否则,我们把查询后的dataset生成一个&&&&& 好了,webservice的方法函数介绍完了(这里还有个web服务方法,稍后介绍),接下来我们的任务是怎么调用它了.首先把webservice的项目编译完成,假定我们这个服务是针对资源站点A的,我们不妨称其为ServiceA.先单独运行asmx文件,执行 GetSiteAData(string AssignName)方法,将提示你输入参数,你输入要搜索的内容,点确认,将返回给你一个xml数据,并在ie上显示出来,这就是你搜索到的内容拉.&&&&&&& 这里对ServiceA的工作再做点介绍,在我们这个项目里,它是资源站点A提供的服务,意思是,它查询的数据将全来源于站点A,而站点A资源添加在本项目也有专门的工程实现.&&&&&&& 好了,回到正题.这里我介绍vs调用webservice的方法,其实其他平台的调用方法也是大同小异.首先我们介绍web引用方式,这种方式我强烈建议调试时使用,非常方便.右击引用,点添加web引用,输入你的webservice地址,如:http://localhost/aspxproject /WebServiceSolution/SiteBService/service1.asmx,你必须保证你输入的webservice存在.然后引用即可,注意:web引用名将作为你加入的webservice的名字空间.比如你输入了:SiteA,那服务的实例化将是这样:SiteA.Service1 serviceA=new SiteA.Service1();(Service1是服务的类名).另一种引用的方法是产生一个代理类,编译成dll,在引用的地方把这个dll引用进去,不过这种方法有个缺点:就是当web服务修改了以后必须重新编译
通过前面的介绍,大概应该知道怎么写webservice,怎么调用,接下是讲怎么使用webservice提供的服务.下面是一段代码,比较简单:
private&void&button1_Click(object&sender,&System.EventArgs&e)&&{&&&//localhost.Service1&a=&new&WindowsApplication1.localhost.Service1();//&&&a.HelloWorld();//&&&//&&&d.Url&=&"";//&&&d.GetSiteAData();//&&&d.HelloWorld();//&&&string&strSearch&=&"<span style="color: #3";&&&ServiceA.Service1&a&=&new&ServiceA.Service1();&&&ServiceB.Service1&b&=&new&ServiceB.Service1();&&&IAsyncResult&ar1;&&&IAsyncResult&ar2;&&&DataSet&ds=new&DataSet();&&&XmlNode&xmlNode1,xmlNode2;&&&XmlDataDocument&xd=new&XmlDataDocument();&&&StringBuilder&xmlString1,xmlString2;&&&//--简单的异步调用&&&ar1=a.BeginGetSiteAData(strSearch,null,null);&&&ar2=b.BeginGetSiteAData(strSearch,null,null);&&&xmlNode1=a.EndGetSiteAData(ar1);&&&xmlNode2=b.EndGetSiteAData(ar2);&&&//----------&&&if(xmlNode1==null&&xmlNode2==null)&//--&&&&&&&&&&&&&&&&&&&&&&return;&&&xmlString1=new&StringBuilder(xmlNode1.OuterXml);&&&xmlString2=new&StringBuilder(xmlNode2.OuterXml);&&&xmlString1=MakeNewXmlString(xmlString1,xmlString2);&&//生成新的xml&&&if(xmlString1.ToString().Equals(""))&&&&return&;&&&xd.LoadXml(xmlString1.ToString());&&&ds.ReadXml(new&XmlNodeReader(xd));&&&dataGrid1.DataSource=ds.Tables[<span style="color: #]&&}&&&//生成新XML&&public&StringBuilder&MakeNewXmlString(StringBuilder&str1,StringBuilder&str2)&&{&&&str1=str1.Replace("","");&&&str2=str2.Replace("","");&&&str1.Append(str2.ToString());&&&return&str1;&&}
这段代码是在windows应用程序里运行的,如果是asp.net应用程序的话要改个地方:dataGrid1.DataSource=ds.Tables[0];后面加上dataGrid1.DataBand();

我要回帖

更多关于 webservice写入数据库 的文章

 

随机推荐