XMLWebService完全实例详细解析
webservice接口xml回参解析

Webservice接口XML回参解析一、背景介绍在W eb开发中,很多时候我们需要通过调用We bs er vi ce接口与其他系统进行数据交互。
而这些接口返回的数据通常以XM L格式进行传输。
在实际应用中,我们需要对接口返回的XM L数据进行解析,以便获取所需的信息。
本文将介绍如何进行W eb se rv i ce接口XM L回参的解析。
二、X M L数据结构分析在开始解析W eb se rv i ce接口的X ML回参之前,我们首先需要了解X M L数据的结构。
X ML是一种标记语言,它包含了标签、属性和内容等元素。
一个标准的X ML文档由根元素、子元素和属性组成。
三、使用X ML解析库为了方便解析We bs er v ic e接口的XM L回参,我们可以使用一些成熟的X ML解析库,如Py t ho n中的`El em ent T re e`库。
`E le men t Tr ee`库提供了一系列的A PI,方便我们对XM L进行解析和操作。
四、解析X ML数据在解析W eb se rv ic e接口的X ML回参时,我们可以按照以下步骤进行操作:1.创建X M L解析器首先,我们需要创建一个XM L解析器对象,用于解析XM L数据。
可以使用`E le me nt Tr ee`库中的`f ro ms tr in g`方法将XM L字符串转换成一个`El em en t`对象。
```p yt ho ni m po rt xm l.et re e.E l em en tT re ea sE Tx m l_da ta="""<r oo t><p er so n><n am e>张三</na me><a ge>18</a ge></pe rs on><p er so n><n am e>李四</na me><a ge>20</a g e></pe rs on></ro ot>"""r o ot=E T.fr om st rin g(x ml_d at a)```2.解析X M L数据接下来,我们可以通过`El em en t`对象的方法和属性来获取XM L数据。
webservice 数据格式样例

一、介绍WebService数据格式在Web应用程序开发中,WebService是一种基于Web的服务,通过HTTP协议提供外部应用程序访问数据和功能的途径。
WebService 数据格式是指在WebService中传输数据的结构和规范。
常用的WebService数据格式有XML、JSON等。
二、XML数据格式样例```xml<customer><id>001</id><name>张三</name><age>28</age><address>北京市朝阳区</address></customer>```在上面的示例中,<customer>是根元素,其中包含了<id>、<name>、<age>和<address>等子元素。
每个子元素用来存储不同的信息,通过XML的标签和属性来描述数据的结构和内容。
三、JSON数据格式样例```json{"id": "001","name": "张三","age": 28,"address": "北京市朝阳区"}```在JSON数据格式中,数据以键值对的形式存储,用大括号{}括起来表示对象。
每个键值对之间用逗号分隔,键值对的键和值之间用冒号分隔。
JSON数据格式相比XML更加简洁,易于阅读和解析。
四、WebService数据格式选择建议1. 对于复杂的数据结构或者需要进行深层次的数据嵌套时,推荐使用XML数据格式。
XML能够清晰地描述数据的层次结构和关系,适用于复杂的数据格式要求。
2. 对于简单的数据结构或者需要提高数据传输效率时,推荐使用JSON数据格式。
WebService如何封装XML请求以及解析接口返回的XML

WebService如何封装XML请求以及解析接⼝返回的XML原WebService如何封装XML请求以及解析接⼝返回的XML置顶 2019年08⽉16⽇ 15:00:47 阅读数 28 标签:更多个⼈分类:版权声明:本⽂为博主原创⽂章,遵循版权协议,转载请附上原⽂出处链接和本声明。
本⽂链接:1、封装XML报⽂对象博主在调第三⽅接⼝时,经常需要封装XML去请求第三⽅的数据,在Web开发时,需要经常⽤到,因此也打算写篇⽂章记录下本⼈在思考和寻求答案的过程。
1-1 XML的⼀些基本常识⼀般在参考⼀些API的⽂档时,JAVA开发⼀般是根据特定的API要求去对数据进⾏封装,在此,我将采⽤举例的⽅式来说明,已经应⽤场景。
在封装XML对象时,⾸先我们得了解封装XML对象试⽤⽅式,⼀般采取Class类注解的形式去实现。
如@XmlType、@XmlAccessorType、@XmlRootElement、 @XmlElement等。
@XmlType(propOrder ={ "Header", "MessageType", "Message" }) // 指定序列成的xml节点顺序@XmlAccessorType(value = XmlAccessType.FIELD) // 访问类型改为字段@XmlRootElement(name = "AmazonEnvelope")//封装XML对象的根节点1-2 封装XML针对某些特定API请求参数。
这⾥以对接亚马逊的某些接⼝举例以下为我举例加⼊某接⼝需要对参数封装XML:1. /*2. * <?xml version="1.0" encoding="UTF-8"?>3. * <AmazonEnvelope xmlns:xsi="/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">4. * <Header>5. * <DocumentVersion>1.02</DocumentVersion>6. * <MerchantIdentifier>A23G8Q8ZIKBK8C</MerchantIdentifier>7. * </Header>8. * <MessageType>ProcessingReport</MessageType>9. * <Message>10. * <MessageID>1</MessageID>11. * <ProcessingReport>12. * <DocumentTransactionID>57320017876</DocumentTransactionID>13. * <StatusCode>Complete</StatusCode>14. * <ProcessingSummary>15. * <MessagesProcessed>15</MessagesProcessed>16. * <MessagesSuccessful>13</MessagesSuccessful>17. * <MessagesWithError>2</MessagesWithError>18. * <MessagesWithWarning>0</MessagesWithWarning>19. * </ProcessingSummary>20. * <Result>21. * <MessageID>3</MessageID>22. * <ResultCode>Error</ResultCode>23. * <ResultMessageCode>25</ResultMessageCode>24. * <ResultDescription>We are unable to process the XML feed because one or more items are invalid. Please re-submit the feed.</ResultDescription>25. * </Result>26. * <Result>27. * <MessageID>4</MessageID>28. * <ResultCode>Error</ResultCode>29. * <ResultMessageCode>25</ResultMessageCode>30. * <ResultDescription>We are unable to process the XML feed because one or more items are invalid. Please re-submit the feed.</ResultDescription>31. * </Result>32. * </ProcessingReport>33. * </Message>34. * </AmazonEnvelope>35.36. */如果看到这种XML格式,去封装请求对象如何封装呢?我们如果有了解过XML这种语⾔就知道,XML可以理解为⼀颗树,有⽗⼦根节点构成。
WebService接口实例说明文档

WebService接口说明文档文档说明本文档主要讲述如何用C Sharp创建一个简单的Web Service接口,并使用Java调用这个Web Service接口。
准备工作系统环境:安装JDK1.6或更新版本开发工具:Microsoft Visual Studio 2012、MyEclipse 10.5、axis2-1.6.2C Sharp服务端1.首先,创建一个Web Service项目。
依次点击:文件—新建—项目,在弹出的新建项目窗口中选择Web下的 空 Web 应用程序。
如下图:2.接下来我们需要创建我们的Web Service接口实现文件。
鼠标右击我们的项目,依次点击:添加—新建项,在弹出窗口中选择Web 服务。
可修改新建项的文件名,注意文件名后缀后.asmx。
如下图:新建完成后我们的项目结构如下:3.打开我们新建的MyService.asmx下的MyService.asmx.cs文件,可以看到其中已经有默认的HelloWorld方法。
我们可以直接运行查看下运行的效果,效果如下图:点击HelloWorld,再点击调用可以看到页面返回:4.接下来我们完善我们的Web Service接口功能。
主要对Web Service接口进行参数类型的测试,文本型、布尔型、数值型、类(Class)等。
新增Add()等运算方法:新增strcat()连接字符串方法:新增GetBool()返回布尔值方法:新增GetTest()返回测试类,并新增Test类运行我们的项目,可以看到我们的结果如下图:点击add方法测试:输入add的参数i和j点击调用按钮,可以看到返回计算结果:5.到此为止我们C Sharp创建的Web Service程序完成。
接下来看Java如何调用我们的Web Service接口。
Java调用Web Service准备对于一个Web Service接口我们当前只知道访问的地址,我们如何用Java去访问接口呢?已知Web Service接口地址:http://localhost:11766/MyService.asmx?WSDLJava调用Web Service的方式有以下1.使用HttpClient2.使用Xfire3.使用axis2本文档示例选择的是axis2,首先到axis2网站下载axis2,网址:/axis2/java/core/download.cgi当前最新版本1.6.2。
webservice xml参数

webservice xml参数WebService是一种基于XML的远程调用协议,通过使用XML来描述和传递数据,实现跨平台和跨语言的通信。
本文将详细介绍WebService中的XML参数,并探讨其在实际应用中的使用。
一、XML参数的概念和作用在WebService中,XML参数指的是通过XML格式传递的数据。
XML (可扩展标记语言)是一种用于描述数据的标记语言,具有自我描述性和可扩展性的特点。
通过使用XML参数,可以在不同的平台和语言之间传递和解析数据,实现应用程序之间的数据交换。
XML参数在WebService中起到了至关重要的作用。
它可以实现不同系统之间的数据传递和交互,使得系统之间可以进行有效的通信和协作。
通过使用XML参数,可以将复杂的数据结构进行序列化和反序列化,方便数据的传输和解析。
同时,XML参数还可以定义数据的结构和类型,确保数据的准确性和完整性。
二、XML参数的使用方法在WebService中,使用XML参数可以通过以下几个步骤来实现:1. 定义XML参数的结构和类型:首先,需要定义XML参数的结构和类型。
可以使用XML Schema语言来定义参数的结构和约束条件,确保数据的一致性和有效性。
2. 序列化参数数据:将需要传递的数据按照XML参数的结构进行序列化。
可以使用编程语言提供的XML序列化工具,将数据转换为符合XML参数结构的XML文档。
3. 传递XML参数:将序列化后的XML参数通过WebService的调用进行传递。
可以使用SOAP协议来封装和传输XML参数,确保数据的安全性和完整性。
4. 解析XML参数:在接收端,需要对传递过来的XML参数进行解析。
可以使用编程语言提供的XML解析工具,将XML文档转换为内存中的数据结构,方便后续的处理和操作。
三、XML参数的优势和应用场景XML参数作为WebService中常用的数据传递方式,具有以下几个优势:1. 跨平台和跨语言:XML参数可以在不同的平台和语言之间进行传递和解析,实现系统之间的互通。
webservice简单实例

首先,我们必须了解什么是webservice.就概念上来说,可能比较复杂,不过我们可以有个宏观的了解:webservice就是个对外的接口,里面有函数可供外部客户调用(注意:里面同样有客户不可调用的函数).假若我们是服务端,我们写好了个webservice,然后把它给了客户(同时我们给了他们调用规则),客户就可以在从服务端获取信息时处于一个相对透明的状态.即是客户不了解(也不需要)其过程,他们只获取数据.webservice传递的数据只能是序列化的数据,典型的就是xml数据,这里我们也只讨论xml数据的传输.有了一些对xml webservice的初步了解后,我们将切入正题,即是用一个具体的webservice事例的形式来讲解具体的webservice用法,用具体的事例来讲解一个概念我想怎么也要比单纯的说理能让人容易理解吧.这里,我们将以一个简单的分布式课件搜索系统为例来讲解.使用VS2003为编译环境,C#为语言,SqlServcer2000为数据库.(这个例子来源于一位网上朋友的文章的启发,觉得很能代表webservice的特点,就按那个想法做了这么个系统来示例了)首先,明确我们要做什么.我们需要一个对客户的接口,也就是个站点,我们把它称做ServiceGatherSite,它是何种形式都无所谓,甚至它本身并不需要数据库,它只是提供给用户一个查询的接口,真正的服务,普通用户是不接触到的.然后,这里我们还需要若干个提供服务的站点,我们可以称它们为资源站,这里为简单起见,假设有两个资源站,分别叫WebSiteA,WebSiteB,它们可以是不对外公布的,只是为了丰富查询数据而存在.最后,是我们最需要关注的东西---资源站提供给ServiceGatherSite的服务.两个资源站,就有两个服务,我们称为SiteAService和SiteBService.两个服务间没有任何关系,内部提供的方法也完全没关联,只是需要把方法如何使用告诉ServiceGatherSite,意思是,服务只提供查询接口,返回的数据如何处理,服务本身并不管,全由使用服务的站点分配.写了这么多,算是简要的介绍了下有关xml webservice的概念和我们这个例子的结构,下篇文章,我们将开始真正进入代码的设计阶段.上篇文章介绍了些webservice的基本特性和我们例子的结构,这篇文章我们将开始具体的代码编写工作.这个专题主要讲述的是webservice,因此这里我们的代码以Webservice相关为主,而其他工程,例如:ServiceGatherSite,WebSiteA等,只将简略介绍.在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){XmlDataDocument xd=new XmlDataDocument(); //DataSet ds=new DataSet();CStoreProc cp=new CStoreProc("SearchAssign");cp.AddParIn("@keywords",SqlDbType.VarChar,30,AssignName);cp.AddParOut("@res",SqlDbType.Int);if(cp.SelectProc()) //如果执行成功,存储过程{cp.myData.EnforceConstraints=false; //不进行格式严格检查if((int)cp.GetReturnValue("@res")==-1){string xml="<NewDataSet></NewDataSet>";xd.LoadXml(xml);return xd;}xd=new XmlDataDocument(cp.myData);XmlNode root1=xd.DocumentElement;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 xd;}else return null;}这是获取资源站点信息的一个接口函数.里面大部分的代码,我想对于有一定基础的朋友来说,都应该是一看就明白,这里只说明下CStoreProc,这是我封装的一个存储过程类,主要功能是执行各种类型的存储过程.细心的朋友可能会发现这个函数的返回类型似乎比较特殊,是个xml的文档.我们在前面已经说过,webservice只能传输序列化数据,xml显然满足条件,但比如hash表之类的非序列化数据,是不能传输的,xml使用最为广泛,而且考虑到跨平台应用,所以这里我们只以xml 数据的传输来示例.在下篇文章,我们将深入解析webservice的精髓---xml 数据传输.今天不早了,早点睡了:)接上篇文章,我们先简单解释下GetSiteAData(string AssignName)函数.函数功能很简单,只是要返回查询结果,其数据格式是XmlDataDocument.当查询失败时(无匹配查询结果),我们构造一个xml,返回一个空记录.否则,我们把查询后的dataset生成一个XmlDataDocument,接下来,由于该项目的需要,我加入了一个循环,添加dataset里所没有的节点,站点名称.在这之后,算是完成了一个符合我们期望格式的xml数据文档,我们把它返回.好了,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=newSiteA.Service1();(Service1是服务的类名).完成了这一步,service的调用似乎变的那么简单,我们已经实现了远程实例化,接下来的远程调用也是一样的容易.下面给出资源采集站ServiceGatherSite的绑定代码(只采集A 站点的信息)//绑定数据public void BindData(){serviceA=new SiteA.Service1();DataSet ds=new DataSet();XmlNode xmlNode1;XmlDataDocument xd=new XmlDataDocument();StringBuilder xmlString1;xmlNode1=serviceA.GetSiteAData(strSearch);if(xmlNode1==null) //--存储过程执行失败return;xmlString1=new StringBuilder(xmlNode1.OuterXml);if(xmlString1.ToString().Equals("<NewDataSet xmlns=\"\"></NewDataSet>"))return ;xd.LoadXml(xmlString1.ToString());ds.ReadXml(new XmlNodeReader(xd));DataGrid1.DataSource=ds.Tables["list"].DefaultView;DataGrid1.DataBind();}此段代码给出了xml转化成dataset的解决方案,虽然这不是必须的,但毕竟在 里,dataset占的作用之重,谁都知道的.其他的请朋友们先看(呵呵,个中高手就免了),在下篇文章中将会有对它的一些解释与及多服务分布调用的解决方案,写了三篇了,发现似乎还是有些朋友看的,那我就献丑继续写下去好了,大家有什么意见也希望提出,在下的理解存在偏驳也再所难免,希望谅解:)好了,时候不早了,休息去了,下次有时间继续:)架设webservice简单实例2009-08-24 19:22具体步骤如下:一、打开VS。
webservice接口实例

webservice接口实例WebService接口实例是一种在不同的操作系统和编程语言之间进行通信的技术,它通过利用XML(可扩展标记语言)来实现跨平台的数据交换。
不同的Web应用程序可以通过SOAP(简单对象访问协议)协议来在网络中发送和接收消息。
下面,我们将通过以下步骤来介绍如何使用WebService接口。
第一步:创建Web服务首先,我们需要在.NET环境中创建一个Web服务应用程序。
使用Visual Studio中的文件菜单选项,在应用程序中添加一个新的Web服务。
我们可以通过添加Web服务引用来使用Web服务。
在Visual Studio中选中“添加引用”,选择“Web引用”,并输入WebService的URL链接。
此时,您将可以通过“命名空间”引用Web服务。
第二步:添加Web服务引用在Visual Studio中,通过添加Web服务引用来使用Web服务。
选中“添加引用”,选择“Web引用”,并输入WebService的URL链接。
此时,您将可以通过“命名空间”引用Web服务。
第三步:实现Web服务方法在Web服务应用程序中,我们必须实现Web服务方法,该方法将处理请求并返回数据。
在方法中,必须定义相关的参数,包括:请求参数、响应参数及返回值。
为了调用Web服务方法,必须发送一条请求并等待Web服务响应。
第四步:测试Web服务在Visual Studio中,可以通过单元测试工具来测试Web服务是否正常运行。
您可以创建一个单元测试项目,以测试Web服务是否返回与预期的结果相同的结果。
第五步:使用WebService接口通过添加Web服务引用,并调用Web服务方法,可以在应用程序中使用WebService接口。
通过使用相关的命名空间,Web服务中的方法可以在应用程序中 freely地调用。
综上所述,在使用WebService接口时,我们需要创建一个Web 服务应用程序,添加Web服务引用,实现Web服务方法,测试Web服务并最终在应用程序中使用WebService接口。
web.xml文件配置详解以及实例说明

web.xml⽂件配置详解以及实例说明1、web.xml学名叫部署描述符⽂件,是在Servlet规范中定义的,是web应⽤的配置⽂件。
2、部署描述符⽂件就像所有XML⽂件⼀样,必须以⼀个XML头开始。
这个头声明可以使⽤的XML版本并给出⽂件的字符编码。
DOCYTPE 声明必须⽴即出现在此头之后。
这个声明告诉服务器适⽤的servlet规范的版本(如2.2或2.3)并指定管理此⽂件其余部分内容的语法的DTD(Document Type Definition,⽂档类型定义)。
所有部署描述符⽂件的顶层(根)元素为web-app。
请注意,XML元素不像HTML,他们是⼤⼩写敏感的。
因此,web-App和WEB-APP都是不合法的,web-app必须⽤⼩写。
web.xml样例:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application //EN" "/dtd/web-app_2_3.dtd"><web-app></web-app>3、web.xml中XML 元素不仅是⼤⼩写敏感的,⽽且它们还对出现在其他元素中的次序敏感。
例如,XML头必须是⽂件中的第⼀项,DOCTYPE声明必须是第⼆项,⽽web- app元素必须是第三项。
在web-app元素内,元素的次序也很重要。
服务器不⼀定强制要求这种次序,但它们允许(实际上有些服务器就是这样做的)完全拒绝执⾏含有次序不正确的元素的Web应⽤。
这表⽰使⽤⾮标准元素次序的web.xml⽂件是不可移植的。
元素顺序列表:元素标签详解:元素1:<icon>含义icon元素包含small-icon和large-icon两个⼦元素.⽤来指定web站台中⼩图标和⼤图标的路径.<small-icon>/路径/smallicon.gif</small-icon>small-icon元素应指向web站台中某个⼩图标的路径,⼤⼩为16 X 16 pixel,但是图象⽂件必须为GIF或JPEG格式,扩展名必须为:.gif或.jpg.<large-icon>/路径/largeicon-jpg</large-icon>large-icon元素应指向web站台中某个⼤图表路径,⼤⼩为32 X 32 pixel,但是图象⽂件必须为GIF或JPEG的格式,扩展名必须为; gif或jpg.范例<icon><small-icon>/images/small.gif</small-icon><large-icon>/images/large.gif</large-icon></icon>元素2、3:<display-name>,<description>含义<display-name>应⽤名称</display-name>定义应⽤的名称。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XMLWebService完全实例详细解析
首先,我们必须了解什么是webservice.就概念上来说,可能比较复杂,不过我们可以有个宏观的了解:webservice就是个对外的接口,里面有函数可供外部客户调用(注意:里面同样有客户不可调用的函数).假若我们是服务端,我们写好了个webservice,然后把它给了客户(同时我们给了他们调用规则),客户就可以在从服务端获取信息时处于一个相对透明的状态.即是客户不了解(也不需要)其过程,他们只获取数据.
webservice传递的数据只能是序列化的数据,典型的就是xml数据,这里我们也只讨论XML数据的传输.
有了一些对XML webservice的初步了解后,我们将切入正题,即是用一个具体的webservice事例的形式来讲解具体的webservice用法,用具体的事例来讲解一个概念我想怎么也要比单纯的说理能让人容易理解吧.
这里,我们将以一个简单的分布式课件搜索系统为例来讲解.使用VS2003为编译环境,C#为语言,SqlServcer2000为数据库.(这个例子来源于一位网上朋友的文章的启发,觉得很能代表webservice的特点,就按那个想法做了这么个系统来示例了)
首先,明确我们要做什么.我们需要一个对客户的接口,也就是个站点,我们把它称做ServiceGatherSite,它是何种形式都无所谓,甚至它本身并不需要数据库,它只是提供给用户一个查询的接口,真正的服务,普通用户是不接触到的.然后,这里我们还需要若干个提供服务的站点,我们可以称它们为资源站,这里为简单起见,假设有两个资源站,分别叫WebSiteA,WebSiteB,它们可以是不对外公布的,只是为了丰富查询数据而存在.最后,是我们最需要关注的东西---资源站提供给ServiceGatherSite的服务.两个资源站,就有两个服务,我们称为SiteAService和 SiteBService.两个服务间没有任何关系,内部提供的方法也完全没关联,只是需要把方法如何使用告诉ServiceGatherSite,意思是,服务只提供查询接口,返回的数据如何处理,服务本身并不管,全由使用服务的站点分配.
写了这么多,算是简要的介绍了下有关XML webservice的概念和我们这个例子的结构,下篇文章,我们将开始真正进入代码的设计阶段.
上篇文章介绍了些webservice的基本特性和我们例子的结构,这篇文章我们将开始具体的代码编写工作.
这个专题主要讲述的是webservice,因此这里我们的代码以Webservice相关为主,而其他工程,例如:ServiceGatherSite,WebSiteA等,只将简略介绍.
在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)
{
XmlDataDocument xd=new XMLDataDocument(); //
DataSet ds=new DataSet();
CStoreProc cp=new CStoreProc("SearchAssign");
cp.AddParIn("@keywords",SqlDbType.VarChar,30,AssignName);
cp.AddParOut("@res",SqlDbType.Int);
if(cp.SelectProc()) //如果执行成功,存储过程
{
cp.myData.EnforceConstraints=false; //不进行格式严格检查
if((int)cp.GetReturnValue("@res")==-1)
{
string XML="";
xd.LoadXml(XML);
return xd;
}
xd=new XMLDataDocument(cp.myData);
XMLNode root1=xd.DocumentElement;
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 xd;
}
else return null;
}
这是获取资源站点信息的一个接口函数.里面大部分的代码,我想对于有一定基础的朋友来说,都应该是一看就明白,这里只说明下CStoreProc,这是我封装的一个存储过程类,主要功能是执行各种类型的存储过程.
细心的朋友可能会发现这个函数的返回类型似乎比较特殊,是个xml的文档.我们在前面已经说过,webservice只能传输序列化数据,xml显然满足条件,但比如hash表之类的非
序列化数据,是不能传输的,xml使用最为广泛,而且考虑到跨平台应用,所以这里我们只以XML数据的传输来示例.
接上篇文章,我们先简单解释下GetSiteAData(string AssignName)函数.
函数功能很简单,只是要返回查询结果,其数据格式是XmlDataDocument.当查询失败时(无匹配查询结果),我们构造一个xml,返回一个空记录.否则,我们把查询后的dataset 生成一个XmlDataDocument,接下来,由于该项目的需要,我加入了一个循环,添加dataset里所没有的节点,站点名称.在这之后,算是完成了一个符合我们期望格式的XML数据文档,我们把它返回.
好了,webservice的方法函数介绍完了(这里还有个web服务方法,稍后介绍),接下来我们的任务是怎么调用它了.首先把webservice的项目编译完成,假定我们这个服务是针对资源站点A的,我们不妨称其为ServiceA.先单独运行asmx文件,执行GetSiteAData (string AssignName)方法,将提示你输入参数,你输入要搜索的内容,点确认,将返回给你一个XML数据,并在ie上显示出来,这就是你搜索到的内容拉.。