SOAP和HTTP 两种基本传输协议
2.1.HTTP-GET
2.2.HTTP-POST
Soap
定义:
特性:
这个定义确实体现了 SOAP 现在的主旨。 SOAP 定义了一种方法以便将 XML 消息从 A 点传送到 B 点(参见图 1)。 为此,它提供了一种基于 XML 且具有以下特性的消息处理框架:
1) 可扩展,
2) 可通过多种底层网络协议使用
3) 独立于编程模型。
以下将分别详细讨论这三种特性。
简单的 SOAP 消息处理
1:SOAP 可扩展性是关键所在。 在这个缩写词还代表某些含义时,"S" 意味着“简单”。 如果我们从 Web 中学到了一样东西,那就是,简单性总是比效率和纯技术更重要,因而互操作性成败的关键,就在于必须绝对要求简单性。 简单性仍然是 SOAP 的主要设计目标之一,这一点的例证就是 SOAP 缺少分布式系统的很多特性(如安全性、路由和可靠性等)。 SOAP 定义了一种通信框架,允许以分层扩展的形式随着时间推移而加入这些特性。 Microsoft、IBM 和其他软件厂商正在积极开发一个 SOAP 扩展的通用套件,该套件将加入大多数开发人员期待的特性。 这一计划被称为全局 XML Web 服务结构 (GXA)Microsoft 已经发布了针对若干 GXA 规范的一个参考实现,并将其命名为 Web Services Enhancements 1.0 SP1 for Microsoft .NET (WSE)。
2:SOAP 可在任何传输协议(诸如 TCP、HTTP、SMTP,甚至是 MSMQ)上使用(参见图 1)。 然而,为了保持互操作性,需要定义一些标准协议绑定以便草拟用于每种环境的规则。 SOAP 规范提供了一种用于定义任意协议绑定的灵活框架,并且由于 HTTP 的使用极为广泛,它现已为 HTTP 提供了一种显式绑定。
3:SOAP 允许任何编程模型,并且不依赖于 RPC。 大多数开发人员立刻将 SOAP 与对分布式对象进行的 RPC 调用等效起来(因为 SOAP 最初就是关于“访问对象”的),但实际上,基本的 SOAP 模型更接近于传统的消息处理系统,如 MSMQ。 SOAP 定义了一种模型以便处理个别的单向消息。 你可以将多条消息组合成一条整体的消息交换。 图 1 说明了一种简单的单向消息,其中发送方不会收到响应。 但是,接收方可以向发送方发回一条响应(参见图 2)。 SOAP 允许使用任何数量的消息交换模式 (MEP),请求/响应只是其中一种。 其他示例包括要求/响应(与请求/响应相对)、通知和长期运行的点对点对话等。
请求/响应消息交换模式
开发人员经常将请求/响应与 RPC 混为一谈,而实际上二者之间的差别很大。 RPC 使用请求/响应,但请求/响应不一定就是 RPC。 RPC 是 一种允许开发人员进行方法调用的编程模型。 RPC 需要将方法签名转换成 SOAP 消息。 鉴于 RPC 的广泛应用,SOAP 草拟了一项协议,以便将 RPC 用于 SOAP。
具备这三种主要特性,SOAP 消息处理框架就促进了在异构环境中交换 XML 消息,而在这类环境中,互操作性长久以来都是极大的挑战。
HTTP
HTTP-GET
定义:
特点:
。将数据添加到URL
。利用一个问号(”?”)代表URL地址的结尾与数据的开端。
。每一个数据的元素以 名称/值 (name/value) 的形式出现(以&分割)。
。利用一个分号(“;”)来区分多个数据元素。
HTTP-POST
定义:
特点:
。将数据包括在HTTP主体中。
。同样的,数据的元素以 名称/值 (name/value) 的形式出现(以&分割)。
。但是每一个数据元素分别占用主体的一行
HTTP和SOAP
HTTP的优势(参考资料):
。 能够非常容易的创建正确的HTTP-GET 和 HTTP-POST消息,当面向的客户是不能使用SOAP的客户时,HTTP-GET 和 HTTP-POST是最好的选择。
。响应HTTP-GET 和 HTTP-POST的消息,并不需要复杂的XML处理。响应之中包括了XML,但它有一个简单的框架并能够轻易的利用一般的技术处理响应。这些特点使HTTP-GET 和 HTTP-POST对于不支持XML的平台来说,变的异常的有用。
。HTTP-GET 和 HTTP-POST消息比起SOAP消息来说,更为简单。这有利于提高整体的性能。
缺点(参考资料):
。不能够利用HTML调用XML Web Service中的以复杂数据类型为参数的方法。
。你可以调用XML Web Service中返回值为复杂数据类型的方法,但是响应将仅包括复杂数据类型中各个区域中的名字/值,并且返回的值并没有结构可言。你必须手动的将数据解压缩到WSDL文件。
。在HTTP中,你不能使用reference进行参数的传输。
。使用HTTP与XML Web Service进行交流,不是一个agreed-to工业标准技术。虽然HTTP会在ASP.NET Web Application中与XML Web Service正常工作,但不保证它在其它的环境下正常工作。
注意事项:
Cookie是依赖于Http传输协议的,如果说Soap可以读取Http产生的Cookie的话这是不可能的,Soap只能每次发送Cookie的库,获取才可以处理.
Soap相比HTtp协议较慢,如果不是非常有必要,不要其传输大数据块.
soap必定是符合W3C的XML文件,在C#中,发送的HttpWebRequest中:
Stream stm = req.GetRequestStream();
doc.Save(stm);
即可实现发送,如果需要获取:
WebResponse resp = req.GetResponse();
stm = resp.GetResponseStream();
StreamReader r = new StreamReader(stm);
发送一个Soap,在Web编程中,都是依靠于HTTP-POST的方式,Php中发送一个POST请求如下函数:
function httpPostRequest($host, $path, $arrPostvars, $port=80, $referer=""){
$arrEncodedPairs = array();
$res = "";
foreach ($arrPostvars as $var => $value)
$arrEncodedPairs[] = rawurlencode($var)."=".rawurlencode($value);
$postData = implode("&", $arrEncodedPairs);
$request = "POST $path HTTP/1.1\n".
"Host: $host\n".
(($referer) ? "Referer: $referer\n" : "").
"Content-type: application/x-www-form-urlencoded\n".
"Content-length: ".strlen($postData)."\n".
"Connection: close\n\n".
$postData."\n";
if ($fp = fsockopen($host, $port)) {
if (fputs($fp, $request)){
while(! feof($fp)){
$res .= fgets($fp, 128);
}
fclose($fp);
return $res;
}
}
}
?>
使用的时候:
Http是无状态的协议,比如:
private string MyName;
[WebMethod]
public void SetMyName(string Input){
this.MyName=Input;
}
[WebMethod]
public string GetMyName(){
return this.MyName;
}
如果你使用
Ws_App.SetMyName("cookies");
returnint.Text = Ws_App.GetMyName();
这是不能获取值的.可以参考:
[WebMethod (EnableSession=true,MessageName="SetSession")]
public void SetSession(string Input){
Context.Session["oop"]=Input;
}
[WebMethod (EnableSession=true,Description ="GetSession",MessageName="GetSession")]
public string GetSession(){
return Context.Session["oop"].ToString();
}
要熟练掌握Web服务,以上知识必须理情.
转载于:https://www.cnblogs.com/lin614/archive/2008/03/03/1089062.html
SOAP和HTTP 两种基本传输协议相关推荐
- HTTP和SOAP完全就是两个不同的协议
HTTP只负责把数据传送过去,不会管这个数据是XML.HTML.图片.文本文件或者别的什么.而SOAP协议则定义了怎么把一个对象变成XML文本,在远程如何调用等,怎么能够混为一谈. ...
- 两种以太网 RDMA 协议: iWARP 和 RoCE
本文是讲演 How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics[1]的摘要. 如果 NVMe 存储系统与主机是分离 ...
- IPsec协议的两种工作方式 协议三大部分 简介
IPsec协议的两种工作方式: 隧道(tunnel)模式:用户的整个IP数据报被用来计算AH或ESP头,AH或ESP头以及ESP加密的用户数据被封装在一个新的IP数据包中.通常,隧道模式应用在两个安全 ...
- rsync文件同步的两种方式——ssh协议和守护进程(端口873)
http://rickie622.blog.163.com/blog/static/2123881120131280153540/ 转载于:https://blog.51cto.com/zhukeqi ...
- 在Java中实现SFTP协议文件传输的两种解决方案
在Java中实现SFTP协议文件传输的两种解决方案 1.1 背景 1.2 关于 FTP /FTPS 1.3 关于SFTP 解决方案一:使用 JSch 库 解决方案二:使用sshj 库 这篇博文来聊聊在 ...
- WebService的两种方式SOAP和REST比较 (转)
由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑.如google map api采用了AJAX方式,通过javascript提供API, ...
- FTP的两种模式和在实际工作中应用
FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard (也就是 Active,主动方式),一种是 Passive (也就是PASV,被动方式). Standard模式 FTP的客户端 ...
- FTP 服务搭建及常用的命令脚本及传输协议基础普及
1.首先我们日常的日常工作会常遇到各种各样的传输问题,比如需要将更新的补丁上传到服务器,或者从服务器上下载一些资料,但是经常用到的协议就大致的归纳一下(资料来自百度百科): 首先是FTP ftp的语义 ...
- rtp 多媒体流同步控制 实时传输协议 简介
RTP(Real-time Transport Protocol)是由IETF开发的实时传输协议,可以在面向连接或无连接的下层协议上工作,通常和UDP协议一起使用.RTP的工作机理与RSVP不同,主要 ...
最新文章
- Structured Streaming编程 Programming Guide
- 毕业论文中使用的技术—FileReader接口
- 【php】(转载)分享一个好用的php违禁词 处理类
- 利用源代码包搭建LAMP
- TopFreeTheme精选免费模板【20130701.特别版】
- Spring MVC请求处理流程
- 未能加载文件或程序集“Antlr3.Runtime”或它的某一个依赖项。参数错误。 (异常来自 HRESULT:0x80070057 (E_INVALIDARG))解决方法。...
- 蒲公英怎么加入别人的网络_挖蒲公英吃的,抓紧看看吧!
- 使用Spring Boot构建REST Web服务
- 数据草拟:使您的团队热爱数据的研讨会
- iphone控制电脑_这可能是首款能在电脑上控制iPhone的工具
- elasticsearch 学习须知
- 1090. Highest Price in Supply Chain (25)-PAT甲级真题
- MATLAB中pdetool工具求解泊松方程和Laplace方程
- JVM_0.5_小故事
- LED点阵屏中“鬼影”现象的分析与解决
- Html 和 CSS笔记
- Android与H5相互接口调用及Android端接口整理
- IDEA 出现问题:PSI and index do not match 解决方案
- Java 8计算一年前或一年后的日期
热门文章
- python常用内置模块-Python基础-22常用内置模块
- python创建txt文件-python创建txt文件
- python编程基础课后答案-中国大学慕课moocPython编程基础课后答案
- python快速编程答案-100+Python编程题带你快速上手(附答案)
- python上海培训哪里比较好-python培训机构上海哪里好?
- python菜鸟基础教程-Python3 面向对象
- python语法基础知识-python基础必学的语法知识
- c+和python先学哪个比较好-python和c,应该先学哪个?
- python和php-PHP和Python如何选择?或许可以考虑这三个问题
- python与php8-详解Python中Unicode和utf-8