加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

基础拾遗之WebService详解

发布时间:2020-12-16 22:02:29 所属栏目:安全 来源:网络整理
导读:(点击 上方蓝字 ,可快速关注我们) 来源: kmonkey 链接:cnblogs.com/kmonkeywyl/p/5726035.html 前言 工作当中常用的服务接口有三个WCF,WebService和WebAPI.首先第一个接触的就是 WebService ,今天大致总结一下。 1. WebService 概念相关 1.1.Web Servic

(点击上方蓝字,可快速关注我们)


来源:kmonkey

链接:cnblogs.com/kmonkeywyl/p/5726035.html


前言


工作当中常用的服务接口有三个WCF,WebService和WebAPI.首先第一个接触的就是WebService,今天大致总结一下。


1.WebService概念相关


1.1.Web Service也叫XML Web Service WebService


是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在 Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。


1.2.XML:(Extensible Markup Language)扩展型可标记语言。


面向短期的临时数据处理、面向万维网络,是Soap的基础。它被设计的宗旨是描述数据(XML),而非显示数据(HTML)。后面单独博客进行详细介绍。


1.3.Soap:(Simple Object Access Protocol)简单对象存取协议。


是XML Web Service 的通信协议。其指导理念是“唯一一个没有发明任何新技术的技术”。


当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的 调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。


<?xml version="1.0"?>

<soap:Envelope

xmlns:soap="http://www.w3.org/2001/12/soap-envelope"

soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>

? <m:Trans xmlns:m="http://www.w3schools.com/transaction/"

? soap:mustUnderstand="1">234

? </m:Trans>

</soap:Header>

<soap:Body>

? <m:GetPrice xmlns:m="http://www.w3schools.com/prices">

? ? <m:Item>Apples</m:Item>

? </m:GetPrice>

</soap:Body>

</soap:Envelope>


1.4.WSDL:(Web Services Description Language) Web服务描述语言


WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。


Types?- 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。


Message?- 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。


Operation?- 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。


PortType?- 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。


Binding?- 特定端口类型的具体协议和数据格式规范的绑定。


Port?- 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。


Service- 相关服务访问点的集合。



WSDL?描述了 Web服务的三个基本属性:


(1)服务所提供的操作


(2)如何访问服务


(3)服务位于何处(通过 URL 来确定就 OK 了)


1.5.UDDI (Universal Description,Discovery,and Integration)


是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服 务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。


UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览 以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。


2. .net webservice


上面的理论知识就算您不清楚,想要使用webservice还是没有任何难度的,不信您往下看。


2.1.创建webservice(vs2013)


2.1.1.新建一个webservice项目(文件->新建->项目->C#->Web服务应用程序)


建完这个工程,我们将看到一个叫ServiceDome.asmx的文件,就先常见webfrom一样它类似与aspx,我们直接打开cs代码文件即可,asmx文件至今没考虑过他有什么用.如果你什么都还没做的话,将看见一个被注释掉的helloworld的WebMethod,把注释去掉,在运行,你就可以得 到最简单的webservice运行实例了.点击"helloworld"将执行其方法.显然,这个函数对我们的意义只在于宏观的了解了下web服务的写 法.


2.1.2.WebMethodAttribute详解


[WebMethod(Description="备注信息")] ??

? public string HelloWorld() ??

? { ??

? ?return "Hello World"; ??

? }?


如上,WebMethodAttribute此特性是表示可以从远程 Web 客户端调用该方法。

其中WebMethod包括以下6个属性


(1)Description:?


是对webservice方法描述的信息。就像webservice方法的功能注释,可以让调用者看见的注释。


(2).EnableSession:


指示webservice否启动session标志,主要通过cookie完成的,默认false。


public static int i=0;

[WebMethod(EnableSession=true)]

public int Count()

{

i=i+1;

return i;

}


如上Count()回和保存的session类似把信息保留下来。


(3)MessageName:


主要实现方法重载后的重命名.


[WebMethod]

public int Add(int i,int j) {

return i + j;

}

[WebMethod(MessageName="Add2")]

return i + j + k;

}


(4).TransactionOption:


指示 XML Web services 方法的事务支持。


(5).CacheDuration:


Web支持输出高速缓存,这样webservice就不需要执行多遍,可以提高访问效率,而CacheDuration就是指定缓存时间的属性。


[WebMethod(EnableSession=true,CacheDuration=30)]

}


(6).BufferResponse:


配置WebService方法是否等到响应被完全缓冲完,才发送信息给请求端。普通应用要等完全被缓冲完才被发送的!只有当已知 XML Web services 方法将大量数据返回到客户端时,才需要将 BufferResponse 设置为 false。对于少量数据,将 BufferResponse 设置为 true 可提高 XML Web services 的性能。当 BufferResponse 为 false 时,将对 XML Web services 方法禁用 SOAP 扩展名。


2.2.实现webservice


特性说完就要说我们的webserviece服务接口的实现了,其实对于他的实现和我们实现一个类没有太大的区别。


public string SynCardToDreams(int start,int end)

? ? try

? ? ? {

? ? ? ? ?DateTime begin = DateTime.Now;

? ? ? ? ?UserSignService userService = new UserSignService();

? ? ? ? ?bool ret = userService.SynChroCardToDreams(start,end);

? ? ? ? ?DateTime endTime = DateTime.Now;

? ? ? ? ?double total = (endTime - begin).TotalMinutes;

? ? ? ? ?string retmsg = ret ? "同步成功" : "同步失败";

? ? ? ? ?return "本次同步用时 " + total + "分钟;" + retmsg;

? ? ? ? }

? ? ? ?catch (Exception ex)

? ? ? ?{

? ? ? ? ? ? ? return "同步失败:" + ex.ToString();

}


2.3.调用webservice


在要使用服务的项目处右击添加服务引用



然后在程序当中直接实例化调用此方法即可:


//调用方法

TestServiceReference.TestServiceSoapClient testService = new TestServiceReference.TestServiceSoapClient();

int result = testService.Add(1,2);


前端调用


<script type="text/javascript">

? ? $(function () {

? ? ? ? $.ajax({

? ? ? ? ? ? type: 'POST',

? ? ? ? ? ? url: 'TestService.asmx/ADD',136); font-size: 12px;">? ? ? ? ? ? data: '{ A: 4,B:4}',136); font-size: 12px;">? ? ? ? ? ? dataType: 'json',136); font-size: 12px;">? ? ? ? ? ? contentType: "application/json",136); font-size: 12px;">? ? ? ? ? ? success: function (data) {

? ? ? ? ? ? ? ? alert(data.d);

? ? ? ? ? ? }

? ? ? ? });

? ? });

</script>


3.修改webservice服务地址:


3.1修改配置文件


<?xml version="1.0" encoding="utf-8" ?> ?

<configuration> ?

? ? <configSections> ?

? ? </configSections> ?

? ? <system.serviceModel> ?

? ? ? ? <bindings> ?

? ? ? ? ? ? <basicHttpBinding> ?

? ? ? ? ? ? ? ? <binding name="PointStoreServiceSoap" /> ?

? ? ? ? ? ? </basicHttpBinding> ?

? ? ? ? </bindings> ?

? ? ? ? <client> ?

? ? ? ? ? ? <endpoint address="http://localhost:25548/WebServiceDom.asmx" ?

? ? ? ? ? ? ? ? binding="basicHttpBinding" bindingConfiguration="PointStoreServiceSoap" ?

? ? ? ? ? ? ? ? contract="PointStoreService.PointStoreServiceSoap" name="PointStoreServiceSoap" /> ?

? ? ? ? </client> ?

? ? </system.serviceModel> ?

</configuration>

【今日微信公号推荐↓】

更多推荐请看值得关注的技术和设计公众号

其中推荐了包括技术设计极客?和?IT相亲相关的热门公众号。技术涵盖:Python、Web前端、Java、安卓、iOS、PHP、C/C++、.NET、Linux、数据库、运维、大数据、算法、IT职场等。点击《值得关注的技术和设计公众号》,发现精彩!

关注「DotNet」?

看更多精选 .Net 技术文章

↓↓↓

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读