XML WebService完全实例详细解析

XML WebService完全实例详细解析,第1张

首先 我们必须了解什么是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

为此,俄罗斯方面日前取消了从2015年开始对盗版网站RuTracker的封锁,也使得让这家曾经全球最大的盗版资源网站重见天日。同时有消息称,俄罗斯或将对盗版软件网开一面,以缓解制裁的压力。甚至在目前传出的俄罗斯经济发展部相关文件中显示,“取消在俄罗斯联邦使用未经许可的软件的责任,这些软件由支持对俄制裁国家的版权所有者拥有。”

或许一些朋友对于RuTracker或者说俄罗斯的软件破解水准、黑客产业规模不甚了解,但是有一个事实却是不可忽视的。此前来自Web领域最为知名的信息提供者W3Techs,在2020年发布的“全球点击量最高的1000万个网站使用的语言”统计报告中呈现出了这样的结果,除了作为世界语言的英语拥有604%的网页之外,俄语网页(86%)的占比超过了法语、德语、日语、韩语网页之和,而中文网页则仅有15%。

要知道,全球以俄语为母语的人约为164亿,基本上都在传统意义的斯拉夫地区,人数仅为汉语使用者的九分之一左右,但在互联网上俄语的影响力却超过了汉语、西班牙语、法语等,在现实世界里覆盖面更为广泛的语言。全世界网民访问非母语的俄语网站,显然是原因的,甚至俄罗斯的黑客自上世纪90年代以来就是全球盗版资源最核心的分享者之一。

以此次的主角RuTracker为例,原名Torrents的Rutracker是俄罗斯最大的BT服务器,在这家网站上可以说是充斥着几乎一切你可以想象到的资源,其中包括从付费新闻到Windows、AutoCAD、EDA、Adobe全家桶等,到各种3A 游戏 ,再到来自全球各国的电视剧、**、音乐、 体育 赛事,乃至各种期刊论文、电子书、教材。换句话来说,就是在微软、甲骨文、Adobe宣布不再向俄罗斯市场提供产品和服务,Epic Games、任天堂、Valve不卖俄罗斯玩家 游戏 后,俄罗斯方面直接一步到位,既然不让我们用正版,那不如直接回到二十年前的“大盗版时代”。

事实上,说俄罗斯是全球盗版资源的源头之一并非没有道理,得益于苏联时代留下的信息教育遗产,俄罗斯的计算机教育水平相当之高。按照俄罗斯联邦教育标准(FES),该国中学信息技术课的内容就包括了理论基础、计算机运行原理、信息技术、网络技术、算法化、编程语言和方法、信息学与 社会 几个部分。

以全球知名的ACM国际大学生程序设计竞赛为例,自2000年开始参赛以来,在这20余年间俄罗斯大学的团队甚至获得了三分之二的冠军。与此同时,俄罗斯的IT行业发展却并不充分,除了卡巴斯基、Yandex等少数几家公司外,并没有太多的相关企业,因此也导致了人才供给过剩,大量的计算机相关人才进入了黑客行业。

而至于俄罗斯黑客的水平,相信许多老网民有话要说,当年各种软件注册机里标配的魔性BGM,也就是所谓的“Keygen Music ”就正是俄罗斯黑客的标志。并且俄罗斯的BALDMAN、skidrow 、code-gen也都是大名鼎鼎的破解小组,当年3DM、游侠网上的盗版 游戏 ,甚至大多数是在俄罗斯盗版的基础上进行汉化,以至于有时候汉化不到位会出现俄语的西里尔字母。并且俄罗斯黑客最为著名的“成绩”,就是率先破解了微软曾严防死守的Windows XP,最早盗版Windows XP都是需要俄罗斯黑客开发的算号器来得出CDKey。

此前在2015年,作为Netflix等流媒体平台进入俄罗斯市场的交换条件,俄罗斯监管机构取缔了Rutracker,并宣布追捕与该网站相关的黑客,使得其进入了静默状态。在有着悠久的盗版传统、且本身实力又极为强大的情况下,当年好不容易才在版权保护的大旗下将Rutracker“关进笼子”里,而如今俄罗斯此举也让诸多业内人士认为,或直接让互联网倒退了二十年。

在过去的二十年时间里,经过了全球版权方孜孜不倦的努力,保护版权几乎已经成为了全球的共识,而使用盗版内容的人,或是将盗版视为互联网共享精神缩影的支持者也已经越来越少。但此次微软、Epic Games、Adobe、Oracle等软件商制裁俄罗斯的举措,或是重新打开了潘多拉的盒子。

游戏 厂商拒绝向俄罗斯用户提供服务,几乎等于亲手毁灭了过去十余年里用低价“收买”俄罗斯用户的成果。相比于破解的盗版 游戏 来说,Valve的Steam、Epic Games、任天堂的eshop无疑提供了更加完善的服务,等于说俄区的玩家可以用相当低廉的价格获得更好的服务,自然就挤压了盗版的生存空间。

虽然盗版资源一直都在,但为什么全球消费者越来越多地消费者正版,只是因为他们不愿意去碰盗版,消费者并不需要购买才能享受到相应的服务,而是正版观念或者道德感促使他们拒绝使用盗版。而消费者为什么要购买正版 游戏 和软件,为的是支持创新以及获得更好的服务,但在 游戏 公司与软件厂商主动放弃了服务后,等于说消费者与他们之间的契约被撕毁。在破窗效应的影响之下,玩盗版 游戏 、使用盗版软件的负罪感,显然也会大幅降低。

更为重要的一点是,这或许还会打击国际版权保护。本来在今年1月,日本牵头成立了国际反盗版组织(IAPO),并且在积极游说俄罗斯电信监管机构Roscomnadzor加入,但现在的情况是俄罗斯方面已经开始反制,这就意味着即便在中国、美国、日本等地的反盗版取得了成效,但俄罗斯将再次成为全球盗版内容的源头,甚至未来将俄语汉化将成为新的方向。

不过,对于当下这个互联网精神几乎已经消失的世界来说,互联网倒退二十年或许并不是一件坏事。

您想问的是国内有免费的静态资源上传站点吗有。

国内有免费的静态资源上传站点是jsDelivr,是一个免费开源的CDN解决方案,用于帮助开发者和站长。包含JavaScript库、jQuery插件、CSS框架、字体等等Web上常用的静态资源。

静态资源,可以理解为前端的固定页面,这里面包含HTML、CSS、JS、等等,不需要查数据库也不需要程序处理,直接就能够显示的页面,如果想修改内容则必须修改页面,但是访问效率相当高。

PHP:网站建设中的PHP语言是一种嵌入HTML页面中的脚本语言。是当下主流网站开发语言之一,PHP源码是完全公开的,不断的有新函数库加入,以及不停地更新,使得PHP无论在UNIX或是WIN的平台都可以有更多新功能。它提供丰富的函数,使得在程序设计方面有着更好的资源。平台无关性以及安全就是PHP最大的优点。支持几乎所有流行的数据库以及 *** 作系统,功能强大,安全系数高,而且其效率高。当然还有一些小小的缺点,PHP提供的数据库接口支持彼此不统一。,但是作为应用最为广泛的一种后台语言,PHP的优点还是显于缺点。

JSP:JSP语言Sun公司推出的一种动态网页语言,以Java语言作为脚本语言,是一种服务器端的脚本语言。JSP技术平台和服务器是互相独立,同PHP一样也是开放的源码。JSP出现至今已经是一门很成熟的程序语言,其优点是开发效率高,所有的程序 *** 作均在服务器上执行,大大减低了对客户浏览器的要求,及时客户浏览器不支持Java,也可以访问JSP页面。虽然如此,JSP不利于维护,而且支持JAVA的主机也少于支持PHP的主机。

ASP语言是微软开发一种动态网页语言,以VB作为脚本语言,能够快速的完成网站的应用程序。开发快、易上手、效率高是ASP的优点,但是在安全隐患上,ASP存在的隐患是四种语言里最大的,他不能很好地支持跨平台语言。其次平台的局限性也限制了ASP的发展。

NET:相当于ASP的升级版本,提供了一种新的编程模型结构,可以生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。但是也由于是微软的产品,那么平台就有了限制。还有数据库的链接复杂。

出微信discuz论坛。使用discuz论坛作为后端生成微信、QQ、支付宝、头条抖音及百度小程序,并支持安卓或苹果APP。修改配置文件config_oauthsphp, 将申请好的小程序 appkey appsecret填入并保存

。把mobile目录覆盖discuz网站的source/plugin/mobile目录,进入论坛后台,进入应用,找到掌上论坛插件并启用, 点击更新即可,在discuz后台点击全局—手机访问—开启手机访问及注册登录,修改小程序源码dzmini下的configjs配置文件,将域名换成您网站域名

测试没问题 提交上传审核即可。dzmini_uni需使用uniapp的工具进行编译,目前还有问题所以,出微信discuz论坛。

一、整体规划

目标观众的计算机配置和浏览器版本。计算机硬件技术飞速发展,现在使用的计算机的配置都是比较高的!下面把访问本站的情况给大家帖到下面:

所以我们在设计网页时,其实已经不必要考虑计算机配置了。需要注意的是在设计中要在不同的浏览器中浏览自己的网页,看看有没有发生变化。

3插件问题。对于有些软件,比如Flash的插件,现在大部分浏览器都安装有这种插件了,如果网页上播放视频,那么就要考虑浏览器是否需要安装相应的插件,在这时最好在网站中说明并提供插件和播放器的下载。现在好多**站都做的比较好,它们都提供播放器和插件的下载!

二、新建站点

规划好站点之后,就可以用专门的网页开发软件创建站点了。在创建站点之前,我们应该首先在我们的磁盘上创建一个文件夹,用于存放站点内的所有资源,当然如果你的站点资源比较丰富这是可以建立子文件夹存放站点内相应的资源。例如:站点文件夹为myweb,子文件夹images用于存放站点内用到的,upfiles用于存放上传的文件,admin用于存放站点后台程序等等。创建站点在Dreamweaver软件中 *** 作比较简单,本站也已经提供了相应的视频教程,如果您不熟悉可以去查看下。刚建立起的站点是空的文件夹,用户首先要设计站点结构。制作专业网站之前要有一个详细的计划,这样虽然会花费一些人力和物力,但总比出现了问题之后再修改要好得多。

在网站规划中一个很重要的问题就是确定站点结构。设计站点结构,就得确定站点子栏目;设计站点结构,就得确定、多媒体文件的存放位置;设计站点结构,就得导航条。专业网站中,必须要有导航条。

三、收集资源

确定好站点目标和结构之后,接下来要做的就是收集有关网站的资源,其中包括以下资源:

1文字资料:文字是网站的主题。无论是什么类型的网站,都要离不开叙述性的文字。离开了文字即使再华丽,浏览者也不知所云。所以要制作一个成功的网站,必须要提供足够的文字资料。

3动画资料:在网页上插入动画可以增添页面的动感效果。现在Flash动画在网页上应用的相当多,所以建议大家应该学会Flash制作动画的一些知识。

4其它资料:例如网站上的应用软件,音乐网站上的音乐文件等等。

四、布局页面

设计站点结构和收集了足够的资源之后,就可以开始布局页面了。在Dreamweaver中,可以通过以下手段进行排版:

1利用表格进行排版:表格主要有三个元素-表格、行和列及单元格,而且表格还可以嵌套,不过在这里建议大家不要把所有的网页都放在一个大表格中,并且嵌套最好不要超过3层,因为如果你那样做了,浏览器解析的时间会增加了,那么当浏览者访问时速度就慢了。

2利用层排版:层很适合形式自由的排版,现在WEB标准建议排版时抛弃表格,不过如果初学者学习利用层排版时还要学习其它好多相关知识,其中最重要的是CSS和Javascript,使用CSS来辅助层可以对网页实现排版,可以解决表格给我们带来的烦恼。如果你对WEB标准感兴趣,那么你就该好好的学习CSS了!

3利用布局视图进行排版:在DreamweaverMX2004中有专门的布局视图,我们初学网页设计时可以使用它进行排版。

4利用框架进行排版:它是一种用浏览器窗口,显示多个网页的形式,前几天记得有人在论坛中求,网页格式的课件,网页格式的课件大部分是用框架做出来的。

五、编辑文档与超级连接

经过上面的几个步骤之后,一切准备工作都已经就绪,现在可以象装箱一样把收集到的资料及制作的组件放到页面布局中为它们指定的位置上了。

插入到网页布局之后,文字都是同一种字号,同一种风格,同一种颜色;有大有小。所以这时就要对各种元素进行编辑了,例如,改变文本字体、字号、颜色、大小等,对进行大小,表格的调整,按钮行为的调整等等!

连接是网页的灵魂。浏览者在浏览网页时,单击网页设置的超级连接可以跳转到相关页面,所以一个好的网页是离不开连接的。

六、发布站点站点的发布

网站发布就是把网站上传到因特网上,以提供浏览者浏览。上传之前必须检查你的域名和主页空间的申请情况,以及网页和站点的连接情况等。建议大家最好安装IIS,本站内都提供了iis501、iis60、iis50的安装程序。

上传软件一般都使用用FTP,上传到服务器中申请的域名下(具体要看看你申请空间时,人家给你的开通信啊!),上传软件一般有CuteFTP、LeadFTP等站点的维护

站点发布之后还要经常对站点进行维护。站点维护是指不断优化网站功能和更新网页内容。维护网站的目的是使网站的结构规划合理、内容与形式统一、主题鲜明,经常更新网页内容,让网站与时俱进。

以上就是关于XML WebService完全实例详细解析全部的内容,包括:XML WebService完全实例详细解析、盗版资源站RuTracker解封,游戏厂商要自食其果、[程序员]国内有免费的静态资源上传站点吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9630096.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存