webservice接口是什么?它有什么作用?

webservice接口是什么?它有什么作用?,第1张

webService接口是一种常用的短信群发提交接口,使用时可以象调用一般函数一样调用WebService的方法。

作用是:该接口主要用于客户自身的软件、网站或其他产品,需要将短信群发功能集成于软件、网站内作为产品整体功能的一部分,在这种情况下可以使用WebService接口来提交短信。实现WebService接口的短信群发功能需要有一定的基本编程能力。如VC++、Delphi、ASP等。

扩展资料:

WebService接口技术支持

1、XML

可扩展的标记语言(标准通用标记语言下的一个子集)为Web Service平台中表示数据的基本格式。XML是由万维网协会(W3C)创建,W3C制定的XML SchemaXSD定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。

2、SOAP

SOAP用于交换XML(标准通用标记语言下的一个子集)编码信息的轻量级协议。它有三个主要方面:XML-envelope为描述信息内容和如何处理内容定义了框架,将程序对象编码成为XML对象的规则,执行远程过程调用(RPC)的约定。SOAP可以运行在任何其他传输协议上。

3、WSDL

Web Service描述语言WSDL,就用机器能阅读的方式提供的一个正式描述文档而基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web Service及其函数、参数和返回值。

-短信平台接口

-webService

1、下载soap

2、解压到c:\gsoap-27

3、将c:\gsoap-27下的soapcpp2exe,wsdl2hexe,stdsoap2h,stdsoap2cpp拷贝到C:\wstest\client\gsoap27目录下

4、在C:\wstest\client\gsoap27目录下执行soapcpp2 -C -x testh -I "C:/gsoap-27/gsoap/import"

5、在C:\wstest\client\gsoap27目录下执行wsdl2h -I "C:/gsoap-27/gsoap/WS" -s

-o testh http://19216881191:5000//CWSCrmasmxwsdl

6、将C:\wstest\client\gsoap27目录下文件拷贝到C:\wstest\client\test\目录下

7、新建立qt5项目,testpro文件:

QT += core gui

QT +=network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = test

TEMPLATE = app

SOURCES += maincpp\

mainwindowcpp \

stdsoap2cpp \

soapCcpp \

soapClientcpp

HEADERS += mainwindowh \

stdsoap2h \

soapHh \

stdsoap2h \

soapStubh

FORMS += mainwindowui

LIBS += -L -l ws2_32

mainwindowcpp

#include "mainwindowh"

#include "ui_mainwindowh"

#include <QHBoxLayout>

#include "CWSCrmSoapnsmap"

#include "soapCWSCrmSoapProxyh"

#include "soapHh"

wsdl2h常用选项

-o 文件名,指定输出头文件

-n 名空间前缀 代替默认的ns

-c 产生纯C代码,否则是C++代码

-s 不要使用STL代码

-t 文件名,指定type map文件,默认为typemapdat

-e 禁止为enum成员加上名空间前缀

soapcpp2常用选项

-C 仅生成客户端代码

-S 仅生成服务器端代码

-L 不要产生soapClientLibc和soapServerLibc文件

-c 产生纯C代码,否则是C++代码(与头文件有关)

-I 指定import路径

-x 不要产生XML示例文件

-i 生成C++包装,客户端为xxxxProxyh(cpp),服务器端为xxxxServiceh(cpp)。

 首先 我们必须了解什么是webservice 就概念上来说 可能比较复杂 不过我们可以有个宏观的了解 webservice就是个对外的接口 里面有 函数可供外部客户调用(注意 里面同样有客户不可调用的函数) 假若我们是服务端 我们写好了个webservice 然后把它给了客户(同时我们给了他 们调用规则) 客户就可以在从服务端获取信息时处于一个相对透明的状态 即是客户不了解(也不需要)其过程 他们只获取数据

 webservice传递的数据只能是序列化的数据 典型的就是xml数据 这里我们也只讨论xml数据的传输

 有了一些对xml webservice的初步了解后 我们将切入正题 即是用一个具体的webservice事例的形式来讲解具体的webservice用法 用具体的事例来讲解一个概念我想怎么也要比单纯的说理能让人容易理解吧

 这里 我们将以一个简单的分布式课件搜索系统为例来讲解 使用VS 为编译环境 C#为语言 SqlServcer 为数据库 (这个例子来 源于一位网上朋友的文章的启发 觉得很能代表webservice的特点 就按那个想法做了这么个系统来示例了)

 首先 明确我们要做什么 我们需要一个对客户的接口 也就是个站点 我们把它称做ServiceGatherSite 它是何种形式都无所谓 甚至它本身 并不需要数据库 它只是提供给用户一个查询的接口 真正的服务 普通用户是不接触到的 然后 这里我们还需要若干个提供服务的站点 我们可以称它们为资源 站 这里为简单起见 假设有两个资源站 分别叫WebSiteA WebSiteB 它们可以是不对外公布的 只是为了丰富查询数据而存在 最后 是我们 最需要关注的东西——资源站提供给ServiceGatherSite的服务 两个资源站 就有两个服务 我们称为SiteAService和 SiteBService 两个服务间没有任何关系 内部提供的方法也完全没关联 只是需要把方法如何使用告诉ServiceGatherSite 意思 是 服务只提供查询接口 返回的数据如何处理 服务本身并不管 全由使用服务的站点分配

 写了这么多 算是简要的介绍了下有关xml webservice的概念和我们这个例子的结构 下篇文章 我们将开始真正进入代码的设计阶段

 上篇文章介绍了些webservice的基本特性和我们例子的结构 这篇文章我们将开始具体的代码编写工作

 这个专题主要讲述的是webservice 因此这里我们的代码以Webservice相关为主 而其他工程 例如 ServiceGatherSite WebSiteA等 只将简略介绍

 在VS 中 开发一个webservice并不是件困难的事 首先 我们新建一个webservice项目(文件 >新建 >项目 >C# >Web服务应用程序

 建完这个工程 我们将看到一个叫Service a x的文件 这就是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 AssignName); cp AddParOut( @res SqlDbType Int); if(cp SelectProc()) //如果执行成功 存储过程 { cp myData EnforceConstraints=false; //不进行格式严格检查 if((int)cp GetReturnValue( @res )== ) { string xml= ; xd LoadXml(xml); return xd; } xd=new XmlDataDocument(cp myData); XmlNode root =xd DocumentElement; XmlNodeList roots=root 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数据的传输来示例

 [NextPage]

 接上篇文章 我们先简单解释下GetSiteAData(string AssignName)函数

 函数功能很简单 只是要返回查询结果 其数据格式是XmlDataDocument 当查询失败时(无匹配查询结果) 我们构造一个xml 返回一个空记 录 否则 我们把查询后的dataset生成一个XmlDataDocument 接下来 由于该项目的需要 我加入了一个循环 添加dataset里所 没有的节点 站点名称 在这之后 算是完成了一个符合我们期望格式的xml数据文档 我们把它返回

 好了 webservice的方法函数介绍完了(这里还有个web服务方法 稍后介绍) 接下来我们的任务是怎么调用它了 首先把webservice的 项目编译完成 假定我们这个服务是针对资源站点A的 我们不妨称其为ServiceA 先单独运行a x文件 执行GetSiteAData (string AssignName)方法 将提示你输入参数 你输入要搜索的内容 点确认 将返回给你一个xml数据 并在ie上显示出来 这就是你搜索到的内容拉

 这里对ServiceA的工作再做点介绍 在我们这个项目里 它是资源站点A提供的服务 意思是 它查询的数据将全来源于站点A 而站点A资源添加在本项目也有专门的工程实现

 好了 回到正题 这里我介绍vs调用webservice的方法 其实其他平台的调用方法也是大同小异 首先我们介绍web引用方式 这种方式我强烈建议 调试时使用 非常方便 右击引用 点添加web引用 输入你的webservice地址 如 //localhost/aspxproject/WebServiceSolution/SiteBService/service a x 你必 须保证你输入的webservice存在 然后引用即可 注意 web引用名将作为你加入的webservice的名字空间 比如你输入了 SiteA 那服务的实例化将是这样 SiteA Service serviceA=new SiteA Service () (Service 是服务的类名)

 完成了这一步 service的调用似乎变的那么简单 我们已经实现了远程实例化 接下来的远程调用也是一样的容易 下面给出资源采集站ServiceGatherSite的绑定代码(只采集A站点的信息)

 

 //绑定数据 public void BindData() { serviceA=new SiteA Service (); DataSet ds=new DataSet(); XmlNode xmlNode ; XmlDataDocument xd=new XmlDataDocument(); StringBuilder xmlString ; xmlNode =serviceA GetSiteAData(strSearch); if(xmlNode ==null) // 存储过程执行失败 return; xmlString =new StringBuilder(xmlNode OuterXml); if(xmlString ToString() Equals( )) return ; xd LoadXml(xmlString ToString()); ds ReadXml(new XmlNodeReader(xd)); DataGrid DataSource=ds Tables[ list ] DefaultView; DataGrid DataBind(); }

 此段代码给出了xml转化成dataset的解决方案 虽然这不是必须的 但毕竟在里 dataset占的作用之重 谁都知道的 其他的请 朋友们先看(呵呵 个中高手就免了) 在下篇文章中将会有对它的一些解释与及多服务分布调用的解决方案 写了三篇了 发现似乎还是有些朋友看的 那我就献 丑继续写下去好了 大家有什么意见也希望提出 在下的理解存在偏驳也再所难免 希望谅解 )

 接上篇文章 我们先简单说明下绑定函数 首先实例化ServiceA 这个和一般类的实例化并没有不同……接下来用xmlNode 来接受函数的返回值 接下来是构造xml 并将其转化为dataset 这是通用的方法 如果是刚接触不久的朋友 最好能记下这种方法

 接下来给出异步调用两个服务的代码

 

 //绑定数据 public void BindData() { IAsyncResult ar ; IAsyncResult ar ; serviceA=new SiteA Service (); serviceB=new SiteB Service (); DataSet ds=new DataSet(); XmlNode xmlNode xmlNode ; XmlDataDocument xd=new XmlDataDocument(); StringBuilder xmlString xmlString ; // 简单的异步调用 ar =serviceA BeginGetSiteAData(strSearch null null); ar =serviceB BeginGetSiteAData(strSearch null null); xmlNode =serviceA EndGetSiteAData(ar ); xmlNode =serviceB EndGetSiteAData(ar ); // if(xmlNode ==null&&xmlNode ==null) // 存储过程执行失败 return; xmlString =new StringBuilder(xmlNode OuterXml); xmlString =new StringBuilder(xmlNode OuterXml); xmlString =MakeNewXmlString(xmlString xmlString ); //生成新的xml if(xmlString ToString() Equals( )) return ; xd LoadXml(xmlString ToString()); ds ReadXml(new XmlNodeReader(xd)); DataGrid DataSource=ds Tables[ list ] DefaultView; DataGrid DataBind(); } //生成新XML public StringBuilder MakeNewXmlString(StringBuilder str StringBuilder str ) { str =str Replace( ); str =str Replace( ); str Append(str ToString()); return str ; }

 这有两个需要注意的地方 一个是xml构造 还有就是异步调用的实现 请读者 自己理解

 下面讲下通过dll来引用webservice的方法 我只把流程介绍下

 首先 在ie输入服务的地址 如

 然后写输入?wsdl

 打开后 另存为xxx wsdl

 然后用vs的命令提示符来编译 wsdl /namespace SiteA ServiceA wsdl

 生成名字空间为sitea的代理类

 最后csc /out ServiceA dll /t library Service cs 其中service cs为代理类文件

lishixinzhi/Article/program/net/201311/13199

从表面上看,Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。对Web service 更精确的解释: Web services是建立可互 *** 作的分布式应用程序的新平台。作为一个Windows程序员,你可能已经用COM或DCOM建立过基于组件的分布式应用程序。COM是一个非常好的组件技术,但是我们也很容易举出COM并不能满足要求的情况。Web service平台是一套标准,它定义了应用程序如何在Web上实现互 *** 作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。不管你的Web service是用什么工具,什么语言写出来的,只要你用SOAP协议通过HTTP来调用它,总体结构都一致。通常,你用你自己喜欢的语言(如VB 6或者VBNET)来构建你的Web service,然后用SOAP Toolkit或者NET的内建支持来把它暴露给Web客户。于是,任何语言,任何平台上的客户都可以阅读其WSDL文档,以调用这个Web service。客户根据WSDL描述文档,会生成一个SOAP请求消息。Web service都是放在Web服务器 (如IIS) 后面的,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到Web服务器来。Web服务器再把这些请求转发给Web service请求处理器。对VB 6程序来说,Web service请求处理器是一个与SOAP Toolkit组件协同工作的ASP页面或ISAPI extension。而对VBNET程序来说,Web service请求处理器则是一个NET Framework自带的ISAPI extension。请求处理器的作用在于,解析收到的SOAP请求,调用Web service,然后再生成相应的SOAP应答。Web服务器得到SOAP应答后,会再通过HTTP应答的方式把它送回到客户端。2 基本概念SOAPWeb service建好以后,其他人就会去调用它。简单对象访问协议(SOAP)提供了标准的远程过程调用( RPC)方法来调用Web service。SOAP规范定义了SOAP消息的格式,以及怎样通过HTTP协议来使用SOAP。SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。客户端和服务端之间的方法调用请求和结果返回值都放在这些消息里。XML和XSD可扩展的标记语言(XML)是Web service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的。XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么16位,32位,还是 64位这些细节对实现互 *** 作性都是很重要的。W3C制定的XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。Web service平台就是用XSD来作为其数据类型系统的。当用某种语言(如VBNET或C#)来构造一个Web service时,为了符合Web service标准,所有使用的数据类型都必须被转换为XSD类型。WSDL(Web Services Description Language)用于描述服务端所提供服务的XML格式。WSDL文件里,描述了服务端提供的服务,提供的调用方法,以及调用时所要遵循的格式,比如调用参数和返回值的格式等等。WSDL 很像COM编程里的IDL(Interface Description Language),是服务器与客户端之间的契约,双方必须按契约严格行事才能实现功能。WSML(Web Services Meta Language)用于描述WSDL里提供的方法与实现该方法的COM对象之间的映射关系。该文件是Microsoft的实现中特有的,不是SOAP标准的一部分。一般情况下,该文件只在服务端存在。3Webservice的技术特点长项一: 跨防火墙的通信 如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服务器。在这种情况下,使用DCOM就不是那么简单,通常也不便于把客户端程序发布到数量如此庞大的每一个用户手中。传统的做法是,选择用浏览器作为客户端,写下一大堆ASP页面,把应用程序的中间层暴露给最终用户。这样做的结果是开发难度大,程序很难维护。举个例子,在应用程序里加入一个新页面,必须先建立好用户界面(Web页面),并在这个页面后面,包含相应商业逻辑的中间层组件,还要再建立至少一个ASP页面,用来接受用户输入的信息,调用中间层组件,把结果格式化为HTML形式,最后还要把“结果页”送回浏览器。要是客户端代码不再如此依赖于HTML表单,客户端的编程就简单多了。如果中间层组件换成Web Service的话,就可以从用户界面直接调用中间层组件,从而省掉建立ASP页面的那一步。要调用Web Service,可以直接使用Microsoft SOAP Toolkit或NET这样的SOAP客户端,也可以使用自己开发的SOAP客户端,然后把它和应用程序连接起来。不仅缩短了开发周期,还减少了代码复杂度,并能够增强应用程序的可维护性。同时,应用程序也不再需要在每次调用中间层组件时,都跳转到相应的“结果页”。从经验来看,在一个用户界面和中间层有较多交互的应用程序中,使用Web Service这种结构,可以节省花在用户界面编程上20%的开发时间。另外,这样一个由Web Service组成的中间层,完全可以在应用程序集成或其它场合下重用。最后,通过Web Service把应用程序的逻辑和数据“暴露”出来,还可以让其它平台上的客户重用这些应用程序。长项二: 应用程序集成 企业级的应用程序开发者都知道,企业里经常都要把用不同语言写成的、在不同平台上运行的各种程序集成起来,而这种集成将花费很大的开发力量。应用程序经常需要从运行在IBM主机上的程序中获取数据;或者把数据发送到主机或UNIX应用程序中去。即使在同一个平台上,不同软件厂商生产的各种软件也常常需要集成起来。通过Web Service,应用程序可以用标准的方法把功能和数据“暴露”出来,供其它应用程序使用。例如,有一个订单登录程序,用于登录从客户来的新订单,包括客户信息、发货地址、数量、价格和付款方式等内容;还有一个订单执行程序,用于实际货物发送的管理。这两个程序来自不同软件厂商。一份新订单进来之后,订单登录程序需要通知订单执行程序发送货物。通过在订单执行程序上面增加一层Web Service,订单执行程序可以把“Add Order”函数“暴露”出来。这样,每当有新订单到来时,订单登录程序就可以调用这个函数来发送货物了。Web Service是B2B集成成功的关键。通过Web Service,公司可以把关键的商务应用“暴露”给指定的供应商和客户。例如,把电子下单系统和电子发票系统“暴露”出来,客户就可以以电子的方式发送订单,供应商则可以以电子的方式发送原料采购发票。当然,这并不是一个新的概念, EDI(电子文档交换)早就是这样了。但是,Web Service的实现要比EDI简单得多,而且Web Service运行在Internet上,在世界任何地方都可轻易实现,其运行成本就相对较低。不过,Web Service并不像EDI那样,是文档交换或B2B集成的完整解决方案。Web Service只是B2B集成的一个关键部分,还需要许多其它的部分才能实现集成。长项四: 软件和数据重用 软件重用是一个很大的主题,重用的形式很多,重用的程度有大有小。最基本的形式是源代码模块或者类一级的重用,另一种形式是二进制形式的组件重用。当前,像表格控件或用户界面控件这样的可重用软件组件,在市场上都占有很大的份额。但这类软件的重用有一个很大的限制,就是重用仅限于代码,数据不能重用。原因在于,发布组件甚至源代码都比较容易,但要发布数据就没那么容易,除非是不会经常变化的静态数据。Web Service在允许重用代码的同时,可以重用代码背后的数据。使用Web Service,再也不必像以前那样,要先从第三方购买、安装软件组件,再从应用程序中调用这些组件;只需要直接调用远端的Web Service就可以了。举个例子,要在应用程序中确认用户输入的地址,只需把这个地址直接发送给相应的Web Service,这个Web Service 就会帮你查阅街道地址、城市、省区和邮政编码等信息,确认这个地址是否在相应的邮政编码区域。Web Service 的提供商可以按时间或使用次数来对这项服务进行收费。这样的服务要通过组件重用来实现是不可能的,那样的话你必须下载并安装好包含街道地址、城市、省区和邮政编码等信息的数据库,而且这个数据库还是不能实时更新的。另一种软件重用的情况是,把好几个应用程序的功能集成起来。例如,要建立一个局域网上的门户站点应用,让用户既可以查询联邦快递包裹,查看股市行情,又可以管理自己的日程安排,还可以在线购买**票。现在Web上有很多应用程序供应商,都在其应用中实现了这些功能。一旦他们把这些功能都通过Web Service “暴露”出来,就可以非常容易地把所有这些功能都集成到你的门户站点中,为用户提供一个统一的、友好的界面。将来,许多应用程序都会利用Web Service,把当前基于组件的应用程序结构扩展为组件/Web Service 的混合结构,可以在应用程序中使用第三方的Web Service 提供的功能,也可以把自己的应用程序功能通过Web Service 提供给别人。两种情况下,都可以重用代码和代码背后的数据。

webservice有很多种,只有SOAP类型的webservice才使用SoapClient调用。

其实SoapClient是对soap请求的封装。你也可以使用底层的接口来访问,不过这需要你了解SOAP协议,而且非常麻烦。

有一个叫nusoap的库,可以方便地编写SOAP服务和SOAP请求,你可以了解一下。

望采纳,谢谢支持!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13491852.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存