1.SOAP:Simple Object Access Protocol ^{Symbolic Optimal Assembly Program}.
2.1.HTTP-GET 
2.2.HTTP-POST

Soap

定义:

SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。 这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。

特性:
这个定义确实体现了 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
定义:

HTTP-GET是超文本传输协议的一种,依靠唯一的URI把数据传输.

特点:
。将数据添加到URL 
。利用一个问号(”?”)代表URL地址的结尾与数据的开端。 
。每一个数据的元素以 名称/值 (name/value) 的形式出现(以&分割)。
。利用一个分号(“;”)来区分多个数据元素。

HTTP-POST
定义:

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请求如下函数:

<?php

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; 
    } 
  } 
}
?>

使用的时候:

echo(httpPostRequest('s','/myps/webs.asmx/IsLogin',array("Input"=>"my Input"),81));

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 两种基本传输协议相关推荐

  1. HTTP和SOAP完全就是两个不同的协议

    HTTP只负责把数据传送过去,不会管这个数据是XML.HTML.图片.文本文件或者别的什么.而SOAP协议则定义了怎么把一个对象变成XML文本,在远程如何调用等,怎么能够混为一谈.           ...

  2. 两种以太网 RDMA 协议: iWARP 和 RoCE

    本文是讲演 How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics[1]的摘要. 如果 NVMe 存储系统与主机是分离 ...

  3. IPsec协议的两种工作方式 协议三大部分 简介

    IPsec协议的两种工作方式: 隧道(tunnel)模式:用户的整个IP数据报被用来计算AH或ESP头,AH或ESP头以及ESP加密的用户数据被封装在一个新的IP数据包中.通常,隧道模式应用在两个安全 ...

  4. rsync文件同步的两种方式——ssh协议和守护进程(端口873)

    http://rickie622.blog.163.com/blog/static/2123881120131280153540/ 转载于:https://blog.51cto.com/zhukeqi ...

  5. 在Java中实现SFTP协议文件传输的两种解决方案

    在Java中实现SFTP协议文件传输的两种解决方案 1.1 背景 1.2 关于 FTP /FTPS 1.3 关于SFTP 解决方案一:使用 JSch 库 解决方案二:使用sshj 库 这篇博文来聊聊在 ...

  6. WebService的两种方式SOAP和REST比较 (转)

    由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑.如google map api采用了AJAX方式,通过javascript提供API, ...

  7. FTP的两种模式和在实际工作中应用

    FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard (也就是 Active,主动方式),一种是 Passive (也就是PASV,被动方式). Standard模式 FTP的客户端 ...

  8. FTP 服务搭建及常用的命令脚本及传输协议基础普及

    1.首先我们日常的日常工作会常遇到各种各样的传输问题,比如需要将更新的补丁上传到服务器,或者从服务器上下载一些资料,但是经常用到的协议就大致的归纳一下(资料来自百度百科): 首先是FTP ftp的语义 ...

  9. rtp 多媒体流同步控制 实时传输协议 简介

    RTP(Real-time Transport Protocol)是由IETF开发的实时传输协议,可以在面向连接或无连接的下层协议上工作,通常和UDP协议一起使用.RTP的工作机理与RSVP不同,主要 ...

最新文章

  1. Structured Streaming编程 Programming Guide
  2. 毕业论文中使用的技术—FileReader接口
  3. 【php】(转载)分享一个好用的php违禁词 处理类
  4. 利用源代码包搭建LAMP
  5. TopFreeTheme精选免费模板【20130701.特别版】
  6. Spring MVC请求处理流程
  7. 未能加载文件或程序集“Antlr3.Runtime”或它的某一个依赖项。参数错误。 (异常来自 HRESULT:0x80070057 (E_INVALIDARG))解决方法。...
  8. 蒲公英怎么加入别人的网络_挖蒲公英吃的,抓紧看看吧!
  9. 使用Spring Boot构建REST Web服务
  10. 数据草拟:使您的团队热爱数据的研讨会
  11. iphone控制电脑_这可能是首款能在电脑上控制iPhone的工具
  12. elasticsearch 学习须知
  13. 1090. Highest Price in Supply Chain (25)-PAT甲级真题
  14. MATLAB中pdetool工具求解泊松方程和Laplace方程
  15. JVM_0.5_小故事
  16. LED点阵屏中“鬼影”现象的分析与解决
  17. Html 和 CSS笔记
  18. Android与H5相互接口调用及Android端接口整理
  19. IDEA 出现问题:PSI and index do not match 解决方案
  20. Java 8计算一年前或一年后的日期

热门文章

  1. python常用内置模块-Python基础-22常用内置模块
  2. python创建txt文件-python创建txt文件
  3. python编程基础课后答案-中国大学慕课moocPython编程基础课后答案
  4. python快速编程答案-100+Python编程题带你快速上手(附答案)
  5. python上海培训哪里比较好-python培训机构上海哪里好?
  6. python菜鸟基础教程-Python3 面向对象
  7. python语法基础知识-python基础必学的语法知识
  8. c+和python先学哪个比较好-python和c,应该先学哪个?
  9. python和php-PHP和Python如何选择?或许可以考虑这三个问题
  10. python与php8-详解Python中Unicode和utf-8