基础拾遗------webservice详解
基础拾遗
前言
工作当中常用的服务接口有三个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。
; [WebMethod(EnableSession=true)] public int Count() { i=i+; return i; }
如上Count()回和保存的session类似把信息保留下来。
(3)MessageName:
主要实现方法重载后的重命名.
[WebMethod] public int Add(int i, int j) { return i + j; } [WebMethod(MessageName="Add2")] public int Add(int i, int j, int k) { return i + j + k; } }
(4).TransactionOption:
指示 XML Web services 方法的事务支持。
(5).CacheDuration:
Web支持输出高速缓存,这样webservice就不需要执行多遍,可以提高访问效率,而CacheDuration就是指定缓存时间的属性。
; [WebMethod(EnableSession=)] public int Count() { i=i+; return i; }
(6).BufferResponse:
配置WebService方法是否等到响应被完全缓冲完,才发送信息给请求端。普通应用要等完全被缓冲完才被发送的!只有当已知 XML Web services 方法将大量数据返回到客户端时,才需要将 BufferResponse 设置为 false。对于少量数据,将 BufferResponse 设置为 true 可提高 XML Web services 的性能。当 BufferResponse 为 false 时,将对 XML Web services 方法禁用 SOAP 扩展名。
2.2.实现webservice
特性说完就要说我们的webserviece服务接口的实现了,其实对于他的实现和我们实现一个类没有太大的区别。、
[WebMethod] 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', data: '{ A: 4,B:4}', dataType: 'json', contentType: "application/json", 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>
基础拾遗------webservice详解的更多相关文章
- 基础拾遗------redis详解
基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...
- Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例)
Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑配置文件(pml.xml)(我 ...
- (转)总结之:CentOS 6.5 MySQL数据库的基础以及深入详解
总结之:CentOS 6.5 MySQL数据库的基础以及深入详解 原文:http://tanxw.blog.51cto.com/4309543/1395539 前言 早期MySQL AB公司在2009 ...
- python基础之函数详解
Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...
- Axis2开发webservice详解
Axis2开发webservice详解 标签: javawebserviceAxis2 2015-08-10 10:58 1827人阅读 评论(0) 收藏 举报 分类: JAVA(275) 服务器 ...
- java基础之:详解内部类(转载)
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...
- AngularJS语法基础及数据绑定——详解各种数据绑定指令、属性应用
AngularJS简单易学,但是功能强大.特别是在构建单页面应用方面效果显著.而 数据绑定 可以说是他被广泛使用的最主要的优点.他舍弃了对DOM的操作方式,一切都由AngularJS来自动更新视图,我 ...
- python 3.x 爬虫基础---http headers详解
前言 上一篇文章 python 爬虫入门案例----爬取某站上海租房图片 中有对headers的讲解,可能是对爬虫了解的不够深刻,所以老觉得这是一项特别简单的技术,也可能是简单所以网上对爬虫系统的文档 ...
- 深度学习基础(CNN详解以及训练过程1)
深度学习是一个框架,包含多个重要算法: Convolutional Neural Networks(CNN)卷积神经网络 AutoEncoder自动编码器 Sparse Coding稀疏编码 Rest ...
随机推荐
- Frida HOOK微信实现骰子作弊
由于微信摇骰子的功能在本地进行随机后在发送,所以存在可以hook掉判断骰子数的方法进行修改作弊. 1.frida实现hook java层函数1)写个用来测试的demo,当我们点击按钮的时候会弹出窗口显 ...
- input file限制上传文件类型
http://www.cnblogs.com/haocool/p/3431181.html http://www.haorooms.com/post/input_file_leixing http:/ ...
- juery实现贪吃蛇的游戏
今天用juery做了一个贪吃蛇的游戏,代码比较简陋,不过作为这些天学习juery的成果,非常有成就感.另外关于代码内容如有雷同不胜荣幸. 更改了下 让头和身子的颜色不一样 这样好区分些,虽然还是不怎么 ...
- 【12-26】go.js
var $ = go.GraphObject.make; // for conciseness in defining templates function buildAlarm(row,column ...
- 记录yii2-imagine几个常用方法
记录yii2-imagine几个常用方法: //压缩 Image::thumbnail('@webroot/img/test-image.jpg', 120, 120)->save(Yii::g ...
- 一些LINQ的使用
var list = from staff in staffList from extraRecord in extraList where staff.staffID == extraRecord. ...
- 码云以及git使用
码云的使用方法以及git的连用 创建公钥的方法 打开码云,点击个人资料---->SSH公钥---->点击怎样生成公钥 SSH Keys ssh keys可以让你在你的电脑和Git@OSC知 ...
- Netty里的设计模式
最近在撸 Netty 源码,发现了一些模式,顺手做个笔记. 分析版本是4.0 1. 构造器模式 ServerBootstrap 和 Bootstrap 的构建 2. 责任链设计模式 pipeline ...
- linux 下安装mongodb
1.初始化docker: -v 设置docker和host共享目录,格式hostPath:dockerContainerPath -p 端口映射 --name,容器名称 cen ...
- C++中的vector 用法解析
一.概述 vector 是C++标准模板库的部分内容,他是一个多功能的,能够操作多种 数据结构和算法 的模板类和函数库. vector 是一个容器,它能够存放各种类型的对象, ...