ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>成人p站proumb入口,av最新在线,在线观看av网http://www.aygfsteel.com/clant/category/17825.htmlzh-cnWed, 28 Feb 2007 18:36:09 GMTWed, 28 Feb 2007 18:36:09 GMT60 Oracle 产品白皮ä¹?/title><link>http://www.aygfsteel.com/clant/articles/85168.html</link><dc:creator>BPM </dc:creator><author>BPM </author><pubDate>Sun, 03 Dec 2006 03:13:00 GMT</pubDate><guid>http://www.aygfsteel.com/clant/articles/85168.html</guid><wfw:comment>http://www.aygfsteel.com/clant/comments/85168.html</wfw:comment><comments>http://www.aygfsteel.com/clant/articles/85168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/clant/comments/commentRss/85168.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/clant/services/trackbacks/85168.html</trackback:ping><description><![CDATA[ <a >http://www.oracle.com/global/cn/documentation/index.html</a> <img src ="http://www.aygfsteel.com/clant/aggbug/85168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/clant/" target="_blank">BPM </a> 2006-12-03 11:13 <a href="http://www.aygfsteel.com/clant/articles/85168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web services 规范http://www.aygfsteel.com/clant/articles/85154.htmlBPM BPM Sun, 03 Dec 2006 02:32:00 GMThttp://www.aygfsteel.com/clant/articles/85154.htmlhttp://www.aygfsteel.com/clant/comments/85154.htmlhttp://www.aygfsteel.com/clant/articles/85154.html#Feedback0http://www.aygfsteel.com/clant/comments/commentRss/85154.htmlhttp://www.aygfsteel.com/clant/services/trackbacks/85154.htmlhttp://www-128.ibm.com/developerworks/cn/webservices/ws-spec/index.html

]]>
多端�Web 服务http://www.aygfsteel.com/clant/articles/85003.htmlBPM BPM Sat, 02 Dec 2006 05:27:00 GMThttp://www.aygfsteel.com/clant/articles/85003.htmlhttp://www.aygfsteel.com/clant/comments/85003.htmlhttp://www.aygfsteel.com/clant/articles/85003.html#Feedback0http://www.aygfsteel.com/clant/comments/commentRss/85003.htmlhttp://www.aygfsteel.com/clant/services/trackbacks/85003.html http://www.chinaitpower.net/2006Aug/2006-08-30/213163.html

]]>
˜qç”¨Web Services安全机制对SOAP消息加密http://www.aygfsteel.com/clant/articles/85000.htmlBPM BPM Sat, 02 Dec 2006 05:18:00 GMThttp://www.aygfsteel.com/clant/articles/85000.htmlhttp://www.aygfsteel.com/clant/comments/85000.htmlhttp://www.aygfsteel.com/clant/articles/85000.html#Feedback0http://www.aygfsteel.com/clant/comments/commentRss/85000.htmlhttp://www.aygfsteel.com/clant/services/trackbacks/85000.htmlã€€ã€€å®‰å…¨å·²ç»è¢«å…¬è®¤äØ“æ˜¯ç”µå­å•†åŠ¡å¸‚åœºæˆåŠŸä¸Žå¦çš„å…³é”®å› ç´ ä¹‹ä¸€åQŒå°¤å…¶æ˜¯åœ¨åˆ†å¸ƒå¼¾pȝ»Ÿä¸­çš„Web Services应用。WebSphere Information Integrator Content Edition(以下½Ž€¿UîCØ“WebSphere IICE)ä½œäØ“ä¼ä¸šä¿¡æ¯é›†æˆé¢†åŸŸçš„é¢†å¯ÆD€…,提供了若òq²åŸºäºŽSOAP消息的服务ã€?/p>

  本文介绍了如何对WebSphere IICE SOAP消息机制˜q›è¡Œæ”¹è¿›åQŒä»¥æä¾›æ¶ˆæ¯å®Œæ•´æ€§å’Œä¿å¯†æ€§ã€‚è¿™¿Uæœºåˆ¶åŒ…括ä‹É用XML æ•°å­—½{‘֐å¯ÒŽ(gu¨©)¶ˆæ¯è¿›è¡Œç­¾åæ¥è¾‘Öˆ°æ¶ˆæ¯å®Œæ•´æ€§ï¼Œå’Œä‹É用XML加密å¯ÒŽ(gu¨©)¶ˆæ¯è¿›è¡ŒåŠ å¯?解密来达到消息的保密性。本文还解释了如何把WebSphere IICE现有的安全机制整合到Web Services安全实现中来。同æ—Óž¼Œæœ¬æ–‡ä¹Ÿæ˜¯å®žçްWeb Services安全机制的一‹Æ¡éžå¸¸å¥½çš„实è·üc€‚它不仅能便æïLš„实现安全模型、安全算法的随意扩展而且本文的实现原理能方便的移植到IBM所有需要实现Web Services安全的äñ”品中ã€?/p>

  1. 背景介绍和动�/strong>

  WebSphere IICEä½œäØ“ä¼ä¸šä¿¡æ¯é›†æˆçš„é¢†å¯ÆD€…,其基于J2EE框架的结构通过扩展SOAP消息接口实现了对Web Services的支持。它主要提供了三¿USOAP服务åQŒåÆˆæŠŠå®ƒä»¬å‘½åäØ“WebSphere IICE Web Services。这些服åŠ?Web Services 接口、SOAP 客户端代理和SOAP CONNECTOR代理-使得WEBSPHERE IICE能容易的部çÖv在因特网中,òq¶èƒ½è¢«å› ç‰¹ç½‘中的其他服务讉K—®ã€‚正是WebSphere IICE的这些特性不仅ä‹É得其各个分布式部件能异步的交互,而且˜q˜èƒ½ä½¿å¾—WebSphere IICE各个分布式部件能无状态的交互åQŒä»Žè€Œçœç•¥äº†ä¼šè¯çŠ¶æ€ç®¡ç†ï¼ŒåŒæ—¶å¯ä»¥ä¸å¿…è€ƒè™‘å®žçŽ°æœåŠ¡çš„åè®®å’ŒæœåŠ¡çš„ä½¾|®ã€?/p>

  不幸的是åQŒè¿™¿Uç»“构松散、协议开攄¡š„环境很容易被潜在的安全威胁所æ”Õd‡»ã€‚一个Web Services消息在到辄¡›®çš„地之前要在很多个中间介质中传递,˜q™æ ·æ‹¥æœ‰ä¸€ä¸ªæˆç†Ÿçš„æ¶ˆæ¯å±‚面的安全机制就变得格外重要ã€?/p>

  现在的WebSphere IICE提供的解决SOAP消息在现实电子商务网¾lœçŽ¯å¢ƒä¸­ä¼ è¾“å®‰å…¨é—®é¢˜çš„æŠ€æœ¯æ–¹æ¡ˆè¿˜å­˜åœ¨ä¸€äº›ä¸­‘»I¼Œè­¬å¦‚安全½Ž—法½Ž€å•,加密¾l“构灉|´»æ€§æœ‰é™ç­‰ã€?/p>

  SOAP规范使得ä»ÖM½•安全机制(æ•°å­—½{‘֐ã€ä¿¡æ¯å®Œæ•´æ€§ä¿æŠ¤ã€åŠ å¯?解密½{?能方便的应用åˆîC“Q何的åŸÞZºŽWeb Services的应用程序中ã€?/p>

  IBM已经提供了一个完整的技术策ç•?WS-Security。这æ äh•´ä¸ªè¡Œä¸šå°±èƒ½å„自实现此åŸÞZºŽæ ‡å‡†çš„结构来满èƒö现实商业中复杂的、灵‹zȝš„Web Services安全需求。通过提升Web Service核心模块的可扩展性,我们可以获得åŸÞZºŽè¯¸å¦‚SOAP、WSDL、XMLæ•°å­—½{‘֐ã€XML加密/解密和SSL/TLS½{‰æ ¸å¿ƒæŠ€æœ¯çš„解决æ–ÒŽ(gu¨©)¡ˆã€‚这样ä‹Éå¾—Web Services的提供者和需求者能æ ÒŽ(gu¨©)®å„自的应用程序安全需求来开发解å†Ïx–¹æ¡ˆã€‚这些解å†Ïx–¹æ¡ˆå’Œæ ‡å‡†ä½¿å¾—我们能够方便的把Web Services安全解决æ–ÒŽ(gu¨©)¡ˆå’ŒWebSphere IICE Web Services部äšg整合在一赗÷€?/p>

  2. 实现原理

  2.1 WebSphere IICE Web Servives概述

  现在WebSphere IICE提供两个层次的Web Services部äšgåQŒä¸€ä¸ªæ˜¯SOAP客户端代理、SOAP connector代理和Web Services APIåQŒæˆ‘们把˜q™éƒ¨åˆ†å«åšWebSphere IICE Web Services客户ç«?另外一部分是作为WebSphere IICE Web模块发布的服务器端SOAP实现。此Web模块把IICEæŽ¥å£ä½œäØ“Web Services发布出去òq¶æŠŠ˜q™äº›æŽ¥å£å’Œå…¶ä»–模块整合在一赗÷€‚从技术角度来è®ÔŒ¼ŒWebSphere IICE Web Services部äšg利用了Apache Axis工具包。我们可以简单的把WebSphere IICE的两部分理解为Axis客户端和Axis服务器端。下面讲˜qîCº†WebSphere IICE Web Services部äšg的细节ã€?/p>

  SOAP客户代理å±?如图1部äšg1)应用SOAPä½œäØ“WebSphere IICE标准APIå’ŒACCESSSERVICES部äšg交互协议ã€?/p>

  SOAP connector代理å±?如图1部äšg2)应用SOAPä½œäØ“ACCESSSERVICE EJB¾l„äšg和已¾léƒ¨¾|²çš„CONNECTOR EJB部äšg的交互协议。此实现机制和SOAP客户代理层的实现机制非常相象ã€?/p>
å›?:WebSphere IICE Web Services部äšg

  Web Services调用接口(如图1部äšg3)通过SOAP接口提供了WebSphere IICE整合接口的绝大部分内宏V€‚它包括一个WSDLæ–‡äšgåQŒæ­¤æ–‡äšgå®šä¹‰äº†è°ƒç”¨æŽ¥å£åÆˆä¸”æä¾›äº†ä¸€¿Uè¯­­a€æ— å…³çš„æ–¹å¼æ¥è®‰K—® Internet 中非¾l“构化的数据ã€?br />2.2 WebSphere IICE密文ç™Õd½•原理

  WebSphere IICE加密机制是对BLOWFISH½Ž—法的一¿Uå®žçŽ°ã€‚ä¸€æ—¦å®‰è£…æˆåŠŸï¼ŒWebSphere IICE会ä‹É用此½Ž—法产生一个密钥文件同时要保证此文件在客户端和CONNECTOR端的CLASSPATH中。如下是应用BLOWFISH˜q›è¡ŒåŠ?解密的一个过½E‹ç¤ºä¾‹ã€?/p>

  列表1:应用blowfish˜q›è¡ŒåŠ ã€è§£å¯†è¿‡½E?/p>

客户端的加密˜q‡ç¨‹åQ?/font>

   //Create and encrypt an AuthBundle.
   AuthBundle aB = new AuthBundle(user, password);
   try {
      //Encrypt the auth bundle
      (new BlowfishSealer()).seal(aB);
   } catch(KeyNotFoundException knfe) {
      ...
   }
  

服务器端的解密过½E‹ï¼š
...use the sealed bundle to logon to a chosen repository.
      ..
      // Unseal the auth bundle if sealed.
      if(authBundle.isSealed()) {
         // Instantiate an unsealer proxy.
         UnsealerProxy uP = new UnsealerProxy();
         try {
            // Attempt to unseal the bundle.
            // The UnsealerProxy will delegate unsealing
// to a new instance of "my.magic.Unsealer"
            uP.unseal(authBundle);
         } catch(UnsealerNotFoundException unfe) {
            throw new LogonException("Unable �unsealer.", unfe);
         } catch(KeyNotFoundException knfe) {
            throw new LogonException("Unable �", knfe);
         } catch(InvalidKeyClassException ikce) {
            throw new LogonException("Invalid decryption...", ikce);
         } catch(EncryptionException ee) {
            throw new LogonException("An error �", ee);
         }
      }
      ...

  2.3 WebSphere IICE Web Services SOAP消息安全概述

  ç”׃ºŽWebSphere IICE使用Axisä½œäØ“SOAP引擎åQŒæˆ‘们首先需要了解一下Axis的机制。可以说åQŒAxisçš„ä“Q务就是处理消息。当Axis的核心处理逻辑启动æ—Óž¼Œä¸€¾pÕdˆ—的句柄会被顺序的调用。调用的™åºåºæ˜¯ç”±ä¸¤ä¸ªå› ç´ æ¥å†³å®šçš„--部çÖvæ–‡äšg和此引擎为客æˆïL«¯˜q˜æ˜¯æœåŠ¡å™¨ç«¯ã€?/p>

  WebSphere IICE Web Services会被一¾pÕdˆ—的客æˆïL«¯å’ŒæœåŠ¡å™¨ç«¯Axis/JAX-RPCå¥æŸ„å¤„ç†ã€‚äØ“äº†èƒ½ä½¿æ­¤å®‰å…¨è§£å†³æ–ÒŽ(gu¨©)¡ˆæ­£å¸¸å·¥ä½œåQŒè¿™äº›å¥æŸ„å¿…™å»è¢«å®‰è£…òq¶ä¸”要保证安装顺序正¼‹®ã€‚本文提供了两套句柄分别实现消息的加å¯?解密和消息完整性验证功能,同时要保证这四个句柄被正¼‹®çš„安装在客æˆïL«¯å’ŒæœåŠ¡å™¨ç«¯çš„WSDD配置文äšg中,˜q™æ ·æ‰èƒ½ä¿è¯å¯¹äºŽæ¯ä¸€ä¸ªä»Žå®¢æˆ·ç«¯å‘出的消息都被客户端的证书加密和签名,同时才能保证服务器端接受到的每一个消息都是被验证的而且每一个消息都¾lè¿‡äº†è§£å¯†ã€‚è¿™æ ähˆ‘们就实现了SOAP消息的完整性和机密性ã€?/p>

  同时åQŒç”¨æˆ·å¯ä»¥é€‰æ‹©æ˜¯å¦ä½¿ç”¨æ­¤å®‰å…¨æœºåˆ¶ã€‚如果用户們֐‘于非安全机制åQŒä»–所需要做的就是注释客æˆïL«¯å’ŒæœåŠ¡å™¨ç«¯çš„WSDD配置文äšgã€?/p>

2.4 WEBSPHERE IICE WEB SERVICE SOAP消息安全实现¾l†èŠ‚

  A. 配置

  WebSphere IICE Web Services安全机制的配¾|®å·¥ä½œæ˜¯ç”±å®¢æˆïL«¯å’ŒæœåŠ¡å™¨ç«¯ä¸¤éƒ¨åˆ†¾l„成的。就如下面的配置文äšg实例说描˜q°çš„ä¸€æ øP¼ŒSOAP消息会在它被发送到目标服务器之前分别被不同的句柄签名和加密。相对应的,它也会在服务器端被验证和解密ã€?/p>

  列表2:AXIS客户端配¾|®æ–‡ä»¶ç¤ºä¾?/p>

<globalConfiguration>
      <requestFlow>    
      <handler
   type="java:com.venetica.vbr.webservices.handler.X509SignHandler"/>
      <handler
   type="java:com.venetica.vbr.webservices.handler.EncryptHandler"/>     
   </requestFlow>  
   <responseFlow>
    <handler
 type="java:com.venetica.vbr.webservices.handler.X509SignHandler"/>
    <handler
 type="java:com.venetica.vbr.webservices.handler.DecryptHandler"/>
   </responseFlow>  
 </globalConfiguration>

  服务器端的配¾|®æ–‡ä»¶å’Œå®¢æˆ·ç«¯çš„配置文äšg非常相像ã€?/p>

  B. ½{‘֐å’ŒåŠ å¯?解密˜q‡ç¨‹:

  SOAP消息的签名和加密/解密˜q‡ç¨‹å¦‚图2所½C?



å›?:SOAP消息的签名和加密/解密˜q‡ç¨‹

  列表3: XML½{‘֐½CÞZ¾‹ä»£ç 

public Message signSOAPEnvelope(SOAPEnvelope unsignedEnvelope) throws Exception
   {  // WSSignEnvelope signs a SOAP envelope according to the
      // WS Specification (X509 profile) and adds the signature data
      // to the envelope.
      WSSignEnvelope signer = new WSSignEnvelope();
      String alias = "username";
      String password = "password";
      signer.setUserInfo(alias, password);
      Document doc = unsignedEnvelope.getAsDocument();    
      Document signedDoc = signer.build(doc, crypto);
      // Convert the signed document into a SOAP message.
      Message signedSOAPMsg =         (org.apache.axis.Message)AxisUtil.toSOAPMessage(signedDoc);
      return signedSOAPMsg;
   }

  列表3昄¡¤ºäº†XML½{‘֐çš„过½E?首先得到SOAP信封åQŒæŽ¥ä¸‹æ¥æ˜¯èŽ·å¾—ç”¨æˆ¯‚¯ä¹¦ä¿¡æ¯ã€äñ”生签名对象,然后是用此签名对象对信封˜q›è¡Œ½{‘֐åQŒæœ€åŽæ˜¯ä»Žè¢«½{‘֐çš„ä¿¡ž®ä¸­äº§ç”Ÿæ–°çš„SOAP消息ã€?/p>

  列表4:XML加密½CÞZ¾‹ä»£ç 

public Message encryptSOAPEnvelope(
      SOAPEnvelope unsignedEnvelope, Message axisMessage)
      throws Exception
   {
      WSEncryptBody encrypt = new WSEncryptBody();
      // build the encrypted SOAP part
      Document doc = unsignedEnvelope.getAsDocument();
      Document encryptedDoc = encrypt.build(doc, crypto);
      // Convert the document into a SOAP message
      Message encryptedMsg =
         (Message)AxisUtil.toSOAPMessage(encryptedDoc);
      // Retrieve the desired SOAP part
      String soapPart = encryptedMsg.getSOAPPartAsString();
      ((SOAPPart)axisMessage.getSOAPPart()). setCurrentMessage(soapPart, SOAPPart.FORM_STRING);
      encryptedDoc =axisMessage.getSOAPEnvelope().getAsDocument();
      // Convert the document into a SOAP message
      Message encryptedSOAPMsg = Message)AxisUtil.toSOAPMessage(encryptedDoc);
      return encryptedSOAPMsg;
   }
列表4昄¡¤ºäº†åŠ å¯†è¿‡½E?首先获得加密前的SOAP信封åQŒæŽ¥ä¸‹æ¥èŽ·å¾—ç”¨æˆ·çš„è¯ä¹¦ä¿¡æ¯åÆˆä»¥æ­¤äº§ç”ŸåŠ å¯†å¯¹è±¡åQŒç„¶åŽæ˜¯åº”用此加密对象对获得的SOAP信封˜q›è¡ŒåР坆åQŒæœ€åŽäØ“æ ÒŽ(gu¨©)®è¢«åŠ å¯†ä¹‹åŽçš„SOAP消息产生新的SOAP消息òq¶å‘下传递ã€?p>  C. 消息å¯ÒŽ(gu¨©)¯”:

  å›?和图4分别昄¡¤ºäº†ç­¾åæ¶ˆæ¯å’ŒåŠ å¯†æ¶ˆæ¯çš„å¯¹æ¯”æƒ…å†üc€?/p>


 å›?:应用数字½{‘֐å‰åŽSOAP消息å¯ÒŽ(gu¨©)¯”


 å›?:应用安全加密前后SOAP消息å¯ÒŽ(gu¨©)¯”

  3. 益处

  •   A 本实践不仅有效的提高了WebSphere IICE Web Services SOAP消息的安全性,而且满èƒö了对用户å…ähœ‰å¾ˆå¤§æ„ä¹‰çš„æ–°éœ€æ±‚ã€?
  •   B 本实跉|ä¾›äº†ä¸€ä¸ªå®žçŽ°å½“å‰æœ€æ–°çš„ã€ç‚™æ‰‹å¯çƒ­çš„Web Services安全标准òq¶æŠŠå®ƒåº”用于IBM产品的示例ã€?
  •   C 本实跉|ä¾›äº†æ€Žæ ·æŠŠå½“前较新的技术和IBM已有的解å†Ïx–¹æ¡ˆæ•´åˆåœ¨ä¸€èµäh¥æ»¡èƒö用户新的需求的½CÞZ¾‹ã€?
  •   D 本实践很好的昄¡¤ºäº†æ€Žæ ·åœ¨ä‹É用Web Services技术的IBM产品中应用Web Services安全ã€?
  •   E WebSphere IICE安全实现机制拥有良好可扩展性ã€?/li>

  4. ¾l“论

  本实践对WebSphere IICEçš„Web Services SOAP消息安全机制˜q›è¡Œäº†æ”¹è‰¯ã€‚同时提供了一个把最新技术标准应用于IBM产品的示例。这样不仅满­‘³äº†ç”¨æˆ·æ–°çš„需求而且很好的扩展了IBM产品的应用场景ã€?/p>

]]>
WS-Reliability 处理Web服务可靠性问é¢?/title><link>http://www.aygfsteel.com/clant/articles/84999.html</link><dc:creator>BPM </dc:creator><author>BPM </author><pubDate>Sat, 02 Dec 2006 05:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/clant/articles/84999.html</guid><wfw:comment>http://www.aygfsteel.com/clant/comments/84999.html</wfw:comment><comments>http://www.aygfsteel.com/clant/articles/84999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/clant/comments/commentRss/84999.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/clant/services/trackbacks/84999.html</trackback:ping><description><![CDATA[随着Web服务的应用不断增多,对很多项目来è¯ß_¼Œåªè§£å†›_¼‚æž„åã^台的分布式通信问题已经不够了。尽½Ž¡äº’æ“ä½œæ€§æ˜¯å¾ˆå¤šäºø™€ƒè™‘Web服务时的首要选择åQŒä½†åˆ†å¸ƒå¼ç³»¾lŸè¿˜å¸¦æ¥äº†å¾ˆå¤šéš¾é¢˜ä‹É得互操作性不那么å®ÒŽ(gu¨©)˜“实现。在下面的文章中åQŒæˆ‘们将看看如何解决Web服务中的另一个分布式技术问é¢?可靠性ã€? <p>  可靠性一个关键概念,在涉及到金融相关数据时尤其如此。天气预报的Web服务代理信息与提供股¼œ¨å¸‚场定单的WebæœåŠ¡æ˜¯ä¸èƒ½ç›¸æåÆˆè®ºçš„ã€‚å‰è€…å¯ä»¥å¿å—ç½‘¾lœå¤±è´¥åƈ且接受新的请求而不产生大的影响åQŒè€Œå¦‚果后者没有必要的手段来处理这些问题就会äñ”生严重的后果。基于此åQŒåœ¨OASIS的赞助下出现了一个专门处理可靠性问题的Web服务说明ä¹?WS-Reliability .</p><p>  与其它WebæœåŠ¡è¯´æ˜Žä¹¦ä¸€æ øP¼ŒWS-Reliability体现出可¾l„合性的特点åQŒå®ƒå…è®¸ä½ æŒ‰ç…§éœ€æ±‚æØœåˆåŒ¹é…å„¿USOAPè¡ŒäØ“ã€‚é€šè¿‡˜q™ç§æ–¹å¼åQŒä“Q何基于SOAP的应用都可以获得该可靠性层的好处,只需½Ž€å•地æ·ÕdŠ SOAP头信息就能ä‹É用WS-Reliability中的ä»ÖM½•规则。例å¦?</p><ul><li>  保证传送至ž®‘一‹Æ¡â€”—发送的消息必须传送到接受端,要么¾l™å‘送端一个发送失败的说明ã€? </li><li>  删除重复信息——最多发送一‹Æ¡ï¼Œ‹‚€‹¹‹é‡å¤ä¿¡æ¯åƈ在接受端删除ã€? </li><li>  保证消息™åºåºâ€”—消息按照顺序被发é€?/li></ul><p>  ž®½ç®¡WS-ReliabilityåŸÞZºŽSOAP提供协议以某¿Uæ–¹å¼ä¼ é€æœ‰æ•ˆè´Ÿè½½ç­‰å¯é æ•°æ®åQŒä½†˜q˜æ˜¯è¦é€šè¿‡ä¸€ä¸ªé«˜å±‚栈的翻译或处理来决定是否执行一个可靠通信。在WS-Reliability's中,高层栈是指能够进行è{化的一¿Uç‰¹ŒDŠçŽ¯å¢ƒï¼Œå®ƒå¯ä»¥æ˜¯ESB或折like PHP/PEARã€?Java/Axis½{‰Web服务框架ã€?/p><p>  ˜q™è¯´æ˜Žï¼Œž®Þq®—用WS-Reliability实现的服务能够无¾~åœ°ä¸Žå…¶å®ƒæœåŠ¡äº¤äº’ï¼Œä½†å”¯ä¸€ä½¿ç”¨˜q™äº›ä¿¡æ¯åQŒè¿˜å¿…须学习一个特ŒDŠçš„Web服务栈。有个例子,Apache Software Foundation创徏的名为Sandesha çš„WS-Reliability实现被加入了Axis框架中。而Axis框架是该基金会创建的一个Java Web服务栈ã€?/p><p>  现在åQŒæˆ‘们来看看Sandesha如何利用Axis框架创徏可靠的WebæœåŠ¡ã€‚æˆ‘ä»¬åÆˆä¸æ·±å…¥åˆ°¾l†èŠ‚åQŒä½ å¯ä»¥æŸ¥é˜…Sandesha的文档来看看它是如何加入到Axis架构中的。或者好好阅读Axis文档åQŒå¦‚何你对它不熟æ‚(zh¨¨n)‰çš„话ã€?/p><p>  我们的情景是一个Web服务客户端向一个股¼œ¨æŠ¥ä»ïL³»¾lŸå‘å‡ÞZ¸€ä¸ªå¯é è¯·æ±‚。表å?.1昄¡¤ºäº†æˆ‘们的客户端如何ä‹É用Sandesha/Axisã€?/p><p>  Listing 1.1</p><p></p><table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"><tbody><tr><td style="WORD-WRAP: break-word" bgcolor="#f3f3f3"><p><font face="Verdana" color="#000000">import org.apache.axis.client.Service;<br />import org.apache.axis.client.Call;<br />import org.apache.axis.encoding.XMLType;</font></p><p><font face="Verdana" color="#000000">import org.apache.sandesha.Constants;<br />import org.apache.sandesha.SandeshaContext;</font></p><p><font face="Verdana" color="#000000">import javax.xml.namespace.QName;<br />import javax.xml.rpc.ParameterMode;</font></p><p><font face="Verdana" color="#000000">public class StockQuoteClient {</font></p><p><font face="Verdana" color="#000000">   private static String targetURL = "http://acmestockquote.com/axis/services/StockQuote";</font></p><p><font face="Verdana" color="#000000">   public static Double stockQuote(String symbol) {<br />        Double priceObject = new Double(0.0); <br /> try {<br />         Service service = new Service();<br />  Call call = (Call) service.createCall();<br />  SandeshaContext ctx = new SandeshaContext();<br />     ctx.initCall(call, targetURL,"urn:wsrm:stockQuotePrice",Constants.ClientProperties.IN_OUT);<br />               call.setOperationName(new QName("acmestockquote.com", "stockQuotePrice"));<br />         call.addParameter("Text", XMLType.XSD_STRING, ParameterMode.IN);<br />         call.addParameter("Seq", XMLType.XSD_STRING, ParameterMode.IN);<br />         call.setReturnType(org.apache.axis.encoding.XMLType.XSD_DOUBLE);<br />      ctx.setLastMessage(call);<br /> priceObject = (Double) call.invoke(new Object[]{"StockQuote", symbol});<br />        ctx.endSequence();<br /> } catch (Exception e) { <br />            e.printStackTrace();<br /> }<br />        return priceObject; <br />   }<br />   <br />    public static void main(String[] args) {<br />        StockQuoteClient.stockQuote("SLB"); <br /> StockQuoteClient.stockQuote("BCA"); <br /> StockQuoteClient.stockQuote("SNY"); <br />    }<br />}</font></p></td></tr></tbody></table><p>      StockQuoteæ–ÒŽ(gu¨©)³•包括我们的业务逻辑。首先,使用了Serviceå’ŒCall¾c»ï¼Œæ¯ä¸ªå¯¹è±¡å®žä¾‹å¯ä»¥è¢«åŸºäºŽJava Axisçš„WebæœåŠ¡å®¢æˆ·ç«¯æ­£å¸æ€‹É用。在上面的例子中åQŒå®ƒä»¬éƒ½è¢«ä¿è¯å¯é æ€§çš„层SandeshaContext使用ã€?/p><p>  SandeshaContext用来¾l´æŠ¤åœ¨å®¢æˆïL«¯å’ŒæœåŠ¡å™¨ç«¯ä¹‹é—´äº¤äº’çš„çŠ¶æ€ã€‚è¿™ž®±æ˜¯ä¸ÞZ»€ä¹ˆCallæ–ÒŽ(gu¨©)³•在ctx.initCallå’Œctx.endSequence之间被嵌套的原因。而它们正代表了Sandesha启动和结束一个可靠的˜q‡ç¨‹ã€‚实际上åQŒCallæ–ÒŽ(gu¨©)³•产生了一个不能被标准Web服务操作探测到的错误åQŒä¾‹å¦‚被¼‹®ä¿çš„传送或者重复的è¯äh±‚。Sandesha能够通过它的上下文来军_®šå¦‚何输出ã€?/p><p>  在表单中åQŒä½ ˜q˜èƒ½çœ‹åˆ°åœ¨ctx.initCallæ–ÒŽ(gu¨©)³•中有urn:wsrm:stockQuotePrice的命名空间。它代表了被加入到客æˆïL«¯è¯äh±‚中的额外SOAP头信息,它能被Web服务提供者识别用来完成可靠性过½E‹ã€‚在Axis/Sandesha的例子中åQŒå°½½Ž¡äºŒè€…çš„¾l“合提供了对构徏å…ähœ‰¾˜»è¯‘WS-Reliability客户端能力的服务提供者的支持åQŒä½†å®ƒè¿˜å…ähœ‰æœ¬æ–‡æ²¡æœ‰æåˆ°çš„其它功能。不˜q‡ï¼Œä½ åº”该注意到Axis/Sandesha框架已经与WS-Reliability˜q›è¡Œäº†æˆåŠŸçš„‹¹‹è¯•åQŒåŒ…括不同的Web服务栈上的客æˆïL«¯ä¸ŽæœåŠ¡å™¨ç«¯ï¼ŒåŒ…æ‹¬IBM、Microsoft å’ŒSystinetã€?/p><p>  è‡Ïx­¤åQŒæˆ‘们对Sandeshaå’ŒWS-Reliability下一个结论。在解释了如何利用Web服务的可靠性特征后åQŒä½ çŽ°åœ¨å¯ä»¥è€ƒè™‘å®žçŽ°å…¶å®ƒçš„ä¼ä¸šæ¶ˆæ¯æŠ€æœ¯ï¼Œä¾‹å¦‚è‡³ä»Šå¯é çš„åˆ†å¸ƒå¼é€šä¿¡äº§å“JMS (Java Messaging Service)åQŒåƈ且用WS-Reliability提供同样的可靠性,但要¾l§æ‰¿òq›_°æ— å…³çš„Web服务的所有优炏V€?/p><img src ="http://www.aygfsteel.com/clant/aggbug/84999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/clant/" target="_blank">BPM </a> 2006-12-02 13:14 <a href="http://www.aygfsteel.com/clant/articles/84999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在面向服务的体系¾l“构中管理状æ€?/title><link>http://www.aygfsteel.com/clant/articles/84998.html</link><dc:creator>BPM </dc:creator><author>BPM </author><pubDate>Sat, 02 Dec 2006 05:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/clant/articles/84998.html</guid><wfw:comment>http://www.aygfsteel.com/clant/comments/84998.html</wfw:comment><comments>http://www.aygfsteel.com/clant/articles/84998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/clant/comments/commentRss/84998.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/clant/services/trackbacks/84998.html</trackback:ping><description><![CDATA[      <font style="BACKGROUND-COLOR: #ffffff" size="1">一个有å…?Web 服务的最常见误解是,它们只适合于支持基于同步请æ±?响应 SOAP(½Ž€å•对象访问协è®?的交互ã€?造成˜q™ç§è¯¯è§£çš„主要原因之一是,许多 Web 服务是ä‹É用不可靠的无状态传输协è®?å¦?HTTP)实现的ã€?/font><p><font style="BACKGROUND-COLOR: #ffffff" size="1">  因此åQŒè®¸å¤šç»„¾l‡æ­£é¿å…ç”?Web 服务来处理复杂的业务交互(在复杂业务交互中åQŒæœåŠ¡ä‹É用者可能同时与同一服务˜q›è¡Œå¤šä¸ªäº¤äº’åQŒæˆ–同时与多个服务进行多个交äº?ã€?OASIS(¾l“构化信息标准促˜q›ç»„¾l?ž®†æ­¤¾cÖMº¤äº’ç§°ä½?Web 服务会话åQŒåƈž®†æ”¯æŒä¼šè¯çš„ Web 服务¿UîC½œä¼šè¯å¼?Web 服务ã€?会话å¼?Web 服务是异æ­?Web 服务的基¼‹€åQŒåœ¨å®žçŽ°æŒç®‹é•¿æ—¶é—´ä¸šåŠ¡äº‹åŠ¡æ–¹é¢è“v着臛_…³é‡è¦çš„作用ã€?/font></p><p><font style="BACKGROUND-COLOR: #ffffff" size="1">  本文ž®†ä»‹¾lå¦‚何ä‹É用显式状态标识符支持会话å¼?Web 服务ã€?此外åQŒè¿˜ž®†æ¦‚˜q°å¦‚何ä‹Éç”?Oracle JDeveloper 10g 10.1.3 J2EE 开发äh员预览版(ä¸?J2EE 1.4 JAX-RPC 提供了内¾|®çš„æ”¯æŒ)实现该种æ–ÒŽ(gu¨©)³•ã€?/font></p><p><font style="BACKGROUND-COLOR: #ffffff"><font size="1">  <strong>会话å¼?Web 服务½Ž€ä»?/strong></font></font></p><p><font style="BACKGROUND-COLOR: #ffffff" size="1">  服务使用者与服务提供者之间的大多æ•îCº¤äº’是 Web 服务会话åQŒä¾‹å¦‚,某个服务端点可能同时从多个客æˆïL«¯æ”¶åˆ°å¤šç§¾cÕdž‹çš„æ–‡æ¡£ï¼Œå¤„理˜q™äº›æ–‡æ¡£òq¶ä‹É用相应的响应联系使用者ã€?在这æ ïLš„应用½E‹åºä¸­ï¼Œç‰¹åˆ«è¦æ±‚正确识别每个客户端的交互åQŒè¿™ä½¿å¾— Web 服务实现更加复杂ã€?ä¸ÞZº†é¿å…˜q™ç§å¤æ‚性,许多公司ž®?Web 服务实现局限于½Ž€å•的单一è¯äh±‚/响应¾cÕdž‹çš„交äº?AuthorizeUser、CalculateTax、ConvertFunds ½{?ã€?/font></p><p><font style="BACKGROUND-COLOR: #ffffff" size="1">  但就其理æƒÏxƒ…形而言åQŒWeb 服务应支持服务ä‹É用者和支持提供者之间的单一交互和复杂交互ã€?无论传输协议如何åQŒåŒæ­¥æˆ–异步 Web 服务都应能够代表单个客户端或在跨多个交互的特ŒDŠä¸šåŠ¡çŽ¯å¢ƒä¸­ä¿å­˜çŠ¶æ€æˆ–èµ„æºã€?/font></p><p><font style="BACKGROUND-COLOR: #ffffff" size="1">  长期以来åQŒè§£å†?Web 服务中的状态性问题的需要一直是标准¾l„织和主要供应商的焦炏V€?䏸™§£å†›_…³é”®ä“Q务和冗长业务‹¹ç¨‹ä¸­çš„状态性问题,涌现了多ä¸?Web 服务规范草案åQŒå¦‚ WS-Addressing、WS-Resources å’?WS-Coordinationã€?最重要的是åQŒä¸šåŠ¡æµ½E‹æ‰§è¡Œè¯­­a€ (BPEL) 1.0 规范已经整合äº?WS-* æ ‡å‡†å»ø™®®çš„许多特性来处理持箋旉™—´è¾ƒé•¿çš„业务事务ã€?但也应看到新标准和解å†?Web 服务会话问题的相关供应商技术的òq¿æ³›é‡‡ç”¨ã€?/font></p><p><font style="BACKGROUND-COLOR: #ffffff" size="1">  æ€ÖM¹‹åQŒå®žçŽîC¼šè¯å¼ Web 服务仍是一个相当大的设计挑战ã€?当面临依èµ?Web 服务的复杂应用程序时åQŒåº”用程序开发äh员别无选择åQŒåªèƒ½æž„建定制的解决æ–ÒŽ(gu¨©)¡ˆã€?/font></p><p><font style="BACKGROUND-COLOR: #ffffff"><font size="1">  <strong>会话å¼?Web 服务的工作方å¼?/strong></font></font></p><p><font style="BACKGROUND-COLOR: #ffffff" size="1">  会话å¼?Web 服务(本质上是异步çš?有两个重要的服务元素¾cÕdž‹: 可调用方法和响应æ–ÒŽ(gu¨©)³•(通常¿UîC½œå›žè°ƒ)ã€?会话å¼?Web 服务中的每个可调用方法和回调æ–ÒŽ(gu¨©)³•¼‹®å®šè¯¥æœåŠ¡ã€å…¶å®¢æˆ·ç«¯ä»¥åŠè¯¥æœåŠ¡æ‰€ä½¿ç”¨çš„ä“Q何执行控ä»?例如åQŒJava 控äšg)ä¹‹é—´çš„é€šä¿¡è¡ŒäØ“ã€?可调用方法可以启动、ç‘ô¾l­æˆ–¾l“束会话;而回调可以ç‘ô¾l­æˆ–停止会话ã€?/font></p><p><font style="BACKGROUND-COLOR: #ffffff" size="1">  为更好地描述会话å¼?Web 服务åQŒæˆ‘ž®†ä»‹¾lä¸€ä¸ªåœºæ™¯ï¼Œåœ¨æœ¬æ–‡é€šç¯‡ž®†ä»¥è¯¥åœºæ™¯äؓ基础ã€?该示例采用两个会è¯? 一个是 Web 服务与它的客æˆïL«¯ä¹‹é—´çš„会话,另一个是两个 Web 服务之间的会è¯?参见å›?1)ã€?/font></p><p><font style="BACKGROUND-COLOR: #ffffff" size="1">  在本½CÞZ¾‹ä¸­ï¼ŒBestTermInsurance Web 服务通过使用另一个服åŠ?(InsuranceQuote) 代表客户查找各种保险提供å•?ã€?当客æˆïL«¯è¯äh±‚ BestTermInsurance 服务提供报ä­h(hu¨¢n)æ—Óž¼Œž®†å¯åŠ¨ç¬¬ä¸€ä¸ªä¼šè¯?å½?BestTermInsurance 服务调用 InsuranceQuote 服务è¯äh±‚报ä­h(hu¨¢n)æ—Óž¼Œž®†å¯åŠ¨ç¬¬äºŒä¸ªä¼šè¯ã€?å½?InsuranceQuote 服务扑ֈ°æœ€ä½ŽæŠ¥ä»äh—¶åQŒå®ƒ?y¨­u)®†å“å?BestTermInsurance 服务åQŒç¬¬äºŒä¸ªä¼šè¯éšå³å®Œæˆã€?然后åQŒBestTermInsurance 服务恢复与客æˆïL«¯çš„第一个会话ã€?br /><br /><img src="http://searchwebservices.techtarget.com.cn/imagelist/06/35/hzks1rq864m7.jpg" /><br /><br /><font size="3">å›?1: BestTermInsurance 服务</font></font></p><p>  Web 服务会话保存 Web 服务的状æ€?后者包括用于链æŽ?Web 服务、它的客æˆïL«¯å’Œå…¶ä»–资源之间的通信的相å…Ïx•°æ®ä»¥åŠåœ¨ä¼šè¯å®Œæˆä¹‹å‰ç”Þp¯¥æœåŠ¡ä¿å­˜çš„ä“Q何数据ã€?该状态信息称作会话状æ€?也称作关联状æ€?ã€?在本½CÞZ¾‹ä¸­ï¼ŒBestTermInsurance 服务保存客户端的每个报ä­h(hu¨¢n)以及兌™”的消息属性,直到扑ֈ°æœ€ä½ŽæŠ¥ä»—÷€?br /><br /><strong>½Ž¡ç†ä¼šè¯çжæ€?/strong></p><p>  使用昑ּçŠ¶æ€æ ‡è¯†ç¬¦æ˜¯åœ¨ Web 服务交互中管理会话状态的最½Ž€å•和最相当有效的方法ã€?ž®½ç®¡åç§°æš—示了单ä¸?IDåQŒä½†å®Œå…¨å—管理的会话需要更多的信息åQŒå°¤å…¶æ˜¯å½“与服务è¯äh±‚å…Œ™”æ—¶ã€?å› æ­¤åQŒçŠ¶æ€æ ‡è¯†ç¬¦å®žé™…ä¸Šæ˜¯ä¸€ä¸ªæŽ§åˆ¶ç±»åQŒå®ƒä¿å­˜ä»¥ä¸‹ä¸€¾l„é’ˆå¯ÒŽ(gu¨©)¯ä¸ªè¯·æ±?响应交互的与状态相关的信息:</p><ul><li>  Web 服务客户端的唯一标识½W? </li><li>ã€€ã€€ä¸ø™¯¥å®¢æˆ·ç«¯å¯åŠ¨çš„ Web 服务会话的标识符 </li><li>  该会话中服务è¯äh±‚的标识符 </li><li>  服务è¯äh±‚è€?客户ç«?与服务提供者之间的会话阶段指示器,服务使用该指½Cºå™¨˜q›è¡Œæ­£ç¡®çš„状态保æŒ? </li><li>  Web 服务基础架构的分发函æ•îC¸Žè°ƒç”¨æŽ¥å£ä¹‹é—´çš„交互状态指½Cºå™¨(在ä‹Éç”?Web 服务接口的晚期绑定进行动态调用方面很有帮åŠ?</li></ul><p>  å‡ÞZºŽæœ¬æ–‡çš„需要,我采用静æ€?Web 服务调用åQŒå› æ­¤å°†ä¸ä»‹¾lç¬¬ 5 ¿Uä¿¡æ¯ã€?/p><p>  一般说来,用于兌™”è¯äh±‚的技术解å†Ïx–¹æ¡ˆæ˜¯è®©æœåŠ¡è¯·æ±‚è€…å°†çŠ¶æ€æ ‡è¯†ç¬¦ä¿¡æ¯(服务è¯äh±‚的唯一标识½W?è¯äh±‚ ID)、会话标识符(会话 ID)和会话阶ŒD‰|Œ‡½Cºå™¨(阶段)æ·ÕdŠ åˆ°è¯·æ±‚æ¶ˆæ¯ä¸­åQŒåƈ让服务提供者将标识½W¦ä¿¡æ¯å¤åˆ¶åˆ°é€šè¿‡å›žè°ƒä¼ é€’的响应消息中,˜q™æ ·è¯äh±‚者可以将回复消息与请求消息相兌™”ã€?/p><p>  有多¿Uæ–¹æ³•可以将状态标识符信息包含在消息交换中åQŒå…·ä½“包æ‹?</p><ul><li>  ž®†æ ‡è¯†ç¬¦ä¿¡æ¯ä»¥é¢å¤–的参数形式传入 Web 服务æ–ÒŽ(gu¨©)³•;可以ž®?Web 服务接口设计ä¸ÞZ¸ä½†æŽ¥å?XML 文档消息åQŒè€Œä¸”接受其他代表状态标识符信息的参数ã€? </li><li>  ž®†æ ‡è¯†ç¬¦ä¿¡æ¯ä½œäØ“ XML 文档的一部分传é€?â€?XML 文档可以包嵌在其ä¸ÖM½“中的此种信息ã€? </li><li>  åœ?SOAP 消息标头中传递标识符信息ã€?/li></ul><p>  但无论是通过æ·ÕdŠ é¢å¤–çš„è¾“å…¥å‚æ•°å°†æ ‡è¯†½W¦ä¿¡æ¯åŒ…含在服务接口中的½W¬ä¸€¿Uæ–¹æ³•,˜q˜æ˜¯ž®†æ­¤¾cÖM¿¡æ¯åŒ…含在 XML 文档本èín中的½W¬äºŒ¿Uæ–¹æ³•,事实上都会ä‹É标识½W¦ä¿¡æ¯å¤„理成为服务结构一部分åQŒä»Žè€Œä‹É代码更难以维护ã€?此外åQŒå°†æ¥éšç€æ–?Web 服务标准被更òq¿æ³›åœ°æŽ¥å—,可能不再需要自定义解决æ–ÒŽ(gu¨©)¡ˆäº†ï¼Œä»Žè€Œå°†éš¾ä»¥ä»ŽæœåŠ¡å®žçŽîC¸­â€œæ‹†é™¤â€åµŒå…¥çš„、与标识½W¦ç›¸å…³çš„逻辑ã€?/p><p>  因此åQŒç¬¬ä¸‰ç§æ–ÒŽ(gu¨©)³•åQŒå³ž®†æ ‡è¯†ç¬¦ä¿¡æ¯åŒ…含åœ?SOAP 消息标头中是最合理的方法ã€?使用此方法时åQŒæœåŠ¡è¯·æ±‚è€…å°†æ ‡è¯†½W¦ä¿¡æ¯ä½œä¸ÞZ¸€¾l„新的子元素æ·ÕdŠ åˆ°æ¶ˆæ¯çš„ SOAP 标头中ã€?服务提供者拦截该 SOAP 消息åQŒç„¶åŽæå–标头中相应的状态标识符信息且不会破坏消息主体ã€?/p><p>  ½Ž€å•地è¯ß_¼Œž®†æ ‡è¯†ç¬¦ä¿¡æ¯æ·ÕdŠ åˆ?SOAP 标头中将使相关的代码与文档处理逻辑和关联的业务逻辑以及服务接口的具体实现相分离ã€?/p><p>  <strong>实现昑ּçš„状态标识符 - ½CÞZ¾‹</strong></p><p>  现在åQŒæˆ‘们将¾l§ç®‹ä»‹ç»½CÞZ¾‹åœºæ™¯ - BestTermInsurance 服务ã€?(请参见图 2 以获得该场景的说明ã€? 正如è¾ÒŽ(gu¨©)¡ä¸­æ˜q°çš„åQŒOracle 应用服务器提供了两个服务实现选项: 无状æ€?Java ¾c?可以部çÖvåˆ?Web 容器ä¸?或无状态会è¯?EJBã€?(该设计基于将 EJB 与一个服åŠ?fa ade â€?BestTermInsuranceServlet 一起ä‹Éç”?ã€?廸™®®æ‚(zh¨¨n)¨ä‹Éç”?fa?ade ž®†æœåŠ¡å®žçŽîCØ“ EJBåQŒè¿™æ˜¯å› ä¸ø™¿™æ ·åšä¸ä½†å…ähœ‰æ›´å¥½çš„æœåŠ¡å¯ç”¨æ€§å’Œå¯äŽ×¾~©æ€§ï¼Œ˜q˜å¯ä»¥å¼•å…?SOAP JAX-RPC 处理½E‹åº(½EåŽž®†å¯¹å…¶è¿›è¡Œè¯¦¾l†ä»‹¾l?ã€?br /><img src="http://searchwebservices.techtarget.com.cn/imagelist/06/35/b023q4bt3jl0.gif" /><br /><br />å›?2: ½CÞZ¾‹åœºæ™¯</p><p>  下面我们ž®†é€æ­¥ä»‹ç»æ­¤ç¤ºä¾‹åœºæ™¯åƈ了解该控件ã€?当客æˆïL«¯é€šè¿‡è°ƒç”¨ servlet çš?requestQuote æ–ÒŽ(gu¨©)³•(传递有兛_®¢æˆ·å¹´é¾„和健康状况的信æ?提交搜烦è¯äh±‚æ—Óž¼ŒWeb 服务交互ž®†å¯åЍã€?requestQuote() æ–ÒŽ(gu¨©)³•包含一ä¸?void ˜q”回å€û|¼Œòq¶ç«‹åŒ™¿”回,从而ä‹É客户端可以ç‘ô¾l­æ“ä½œï¼Œè€Œä¸å¿…等待稍后将通过 onBestQuote() 回调发送的实际¾l“æžœã€?æ˜¾è€Œæ˜“è§ï¼Œåº”å°†å®¢æˆ·ç«¯è®¾è®¡äØ“ä»Žå›žè°ƒæ–¹æ³•ä¸­æŽ¥å—æ¶ˆæ¯ã€?/p><p>      接下来,BestTermInsuranceServlet 调用 BestTermInsuranceEJB(用于保存客户òq´é¾„和健åºïLж冉|Œ‡½Cºå™¨)和一个所获得的报价列è¡?与客æˆïL«¯ ID 和请æ±?ID å…Œ™”åQŒä½œä¸ÞZ¸ŽçŠ¶æ€ç›¸å…³çš„æ•°æ®)ã€?BestTermInsuranceEJB 随后调用 InsuranceQuote 服务çš?obtainQuote() æ–ÒŽ(gu¨©)³•以从参与的保险äh那里获得报ä­h(hu¨¢n)ã€?(参见å›?3åQŒä¸€ä¸ªæ¼”½Cºæœ€é‡è¦çš„æœåŠ¡äº¤äº’çš„åºåˆ—å›¾ã€?<br /><br /></p><img src="http://searchwebservices.techtarget.com.cn/imagelist/06/35/g0dn17qe1212.gif" /><br />å›?3: 使用 JDeveloper Modeler 的示ä¾?UML 序列å›? <p>  InsuranceQuote 服务在特定客æˆïL«¯ä½œç”¨åŸŸå†…˜qè¡ŒåQŒå› æ­¤è¯¥æœåŠ¡éœ€è¦è®¿é—®å®¢æˆïL«¯ ID。在会话跟踪斚w¢åQŒInsuranceQuote 服务使用它自å·Þqš„会话和请æ±?IDã€?/p><p>  在根据给定的客户òq´é¾„和健åºïLж冉|Œ‡½Cºå™¨æ”‰™›†æ‰€æœ‰ä¿é™©æŠ¥ä»äh—¶åQŒInsuranceQuote 服务使用 onObtainQuoteComplete() 回调˜q”回其结果ã€?此回调完成第二个转换åQŒåƈ清除ç”?InsuranceQuote 服务保存的所有状态数据ã€?但由 BestInsuranceQuoteServlet 控制的第一个会话仍¾l§ç®‹æ‰§è¡Œ: BestTermInsurance 服务可能从客æˆïL«¯èŽ·å–å…¶ä»–è¯äh±‚åQŒä¾‹å¦‚,æ ÒŽ(gu¨©)®ç‰ÒŽ(gu¨©)®Šçš„保单条‹Æ?一òq´ã€åòq´ç­‰)提供最ä½ÏxХ仗÷€?¾l“果以消息åŞ式通过 onBestQuoteCallback() æ–ÒŽ(gu¨©)³•发送给客户端ã€?/p><p>  <strong>¾~–码技å·?/strong></p><p>  现在åQŒæˆ‘们来着重介¾lä»¥ä¸‹å®žçŽ°çŠ¶æ€æ ‡è¯†ç¬¦çš„å…·ä½“ç¼–ç æŠ€å·§ã€?遗憾地是åQŒç”±äºŽç¯‡òq…有限,ž®†åªåœ¨ä»£ç ä¸­ä»‹ç»ä¸Žæœ¬æ–‡ä¸»é¢˜ç›¸å…³çš„元素ã€?/p><p>  正如前面所介绍的,假设状态标识符信息已传å…?SOAP 消息标头中ã€?用于åŸÞZºŽ XML 的远½E‹è¿‡½E‹è°ƒç”¨çš„ Java API (JAX-RPC) 非常适于处理 SOAP 消息标头 - 具体而言ž®±æ˜¯é€šè¿‡ä½¿ç”¨ JAX-RPC 的某个最有意义的ç‰ÒŽ(gu¨©)€? 消息处理½E‹åºã€?消息处理½E‹åºä¸?Web 服务提供了附加的消息处理逻辑åQŒä»¥ä½œäؓ对这些服务的业务逻辑实现的扩展ã€?除了½Ž¡ç†íw«ä†¾éªŒè¯ã€åŠ å¯†å’Œè§£å¯†ã€æ—¥å¿—è®°å½•å’Œå®¡è®¡½{‰å¤–åQŒå¤„理程序还支持状态标识符的插入ã€?为此åQŒå¯ä»¥åˆ›å»ºå¤šä¸ªå¤„理程序来½Ž¡ç†æ¯ä¸ªå…·ä½“问题ã€?åœ?JAX-RPC 中,处理½E‹åºçš„è¿™¿Uç”¨æ³•称作处理程序链ã€?/p><p>  处理½E‹åºé“¾è¡¨½CÞZ¸€¾l„有序的处理½E‹åºã€?使用有序¾l„可以ä‹É应用½E‹åºå¼€å‘äh员能够定义处理程序调用策ç•?- 调用™åºåºã€ç›®æ ?“仅处理è¯äh±‚”或“仅处理响应”或两者都处理)½{‰ã€?处理½E‹åºé“„¡‘ô¾l­å¤„理处理程序,直到引发 SOAP 错误或调用策略指½Cºæ˜¾å¼åœæ­¢ç‚¹ã€?/p><p>  因此åQŒè¦ä½¿ç”¨ SOAP 标头内嵌的状态标识符实现 Web 服务åQŒå¾è®®ç”¨ä¸‰ä¸ªæ­¥éª¤æ¥è¿›è¡Œå¼€å?</p><ul><li>ã€€ã€€è®¾è®¡åŸºæœ¬çš„æœåŠ¡ç»„ä»¶åÆˆ˜q›è¡Œ¾~–码ã€? </li><li>  开å?SOAP 消息处理½E‹åºã€? </li><li>  用已开发的 J2EE ¾l„äšgæž„é€?Web 服务(公开)ã€?/li></ul><p>  使用 Oracle JDeveloper 10g J2EE 开发äh员预览版æ—Óž¼Œå¯ä»¥ä½¿ç”¨åº”用½E‹åºå¯ÆDˆªå™¨ä¸‹çš„类别“Business Tier”将已编译的 Java ¾cÀLˆ– bean 公开ä¸?Web 服务ã€?从该¾cÕdˆ«ä¸­ï¼Œå¼€å‘äh员可以选择一个上下文菜单™å¹â€œJava Web services”ã€?此菜单项包含两个选项“J2EE 1.4 (JAX-RPC) Web services”和“Oracle J2EE 1.3 Web services”ã€?选择“J2EE 1.4 (JAX-RPC) Web services”ã€?br /> 以下代码清单昄¡¤ºäº†ä¸€ä¸ªç¬¦åˆè¦æ±‚çš„ SOAP 消息格式åQŒå…¶ä¸­çš„æ ‡å¤´åŒ…含 BestTermInsurance 服务的外éƒ?客户ç«?服务)会话的状态标识符:<br /><br /><font face="Verdana"><SOAP-ENV:Envelope><br />  <SOAP-ENV:Header><br />          <ns:stateIdentifier xmlns:ns="http://xxxxx"><br />      <ns:ClientID>Client ID</ns:ClientID><br />      <ns:ConversationID>Conversation ID</ns:ConversationID><br />      <ns:RequestID>Request ID</ns:Request ID><br />      <ns:Phase>Phase</ns:Phase> <br /></stateIdentifier<br /></SOAP-ENV:Header><br /><SOAP-ENV:Body><br />     <ns:insuranceParms xmlns:ns="http://yyyyyyy"> <br />     <ns:Age>Age</ns:Age><br />     <ns:Health>Health</ns:Health><br />     <ns:Term>Term</ns:Term><br />     </ns:insuranceParms<br /></SOAP-ENV:Body><br /></SOAP-ENV:Envelope><br /><br />但在此进½E‹çš„å¼€å¤ß_¼Œè¯?SOAP 消息定义不包含状态标识符信息åQŒå¦‚下所½Cºï¼š<br /><SOAP-ENV:Envelope><br />  <SOAP-ENV:Header><br /></SOAP-ENV:Header><br /><SOAP-ENV:Body><br />     <ns:insuranceParms xmlns:ns="http://yyyyyyy"> <br />     <ns:Age>Age</ns:Age><br />     <ns:Health>Health</ns:Health><br />     <ns:Term>Term</ns:Term><br />     </ns:insuranceParms<br /></SOAP-ENV:Body><br /></SOAP-ENV:Envelope><br />˜q™æ­£æ˜?SOAP 处理½E‹åºçš„用途所åœ? 对将状态限定符插入到标å‡?SOAP 消息定义˜q›è¡Œå¤„理ã€?åœ?JAX-RPC 服务中,处理½E‹åºç”±å®žçŽ?handleRequest() å’?handleResponse() æ–ÒŽ(gu¨©)³•(用于修改è¯äh±‚和响应消æ?的处理程序类表示ã€?可以ž®†å¤„理程序类配置为在客户端或服务¾U§åˆ«å¤„理è¯äh±‚和响应ã€?处理½E‹åºä½¿ç”¨ javax.xml.soap.SOAPMessage ¾cÀL¥å¤„理 SOAP 消息ã€?SOAPMessage 对象包含一ä¸?SOAPPart 对象åQŒè¯¥å¯¹è±¡åŒ…含实际çš?SOAP XML æ–‡æ¡£å’Œä¸€ä¸ªè¢«åˆ†è§£ä¸ø™®¿é—?SOAP ä¸ÖM½“和标头的 SOAPEnvelope 对象ã€?/font></p><p>  以下代码清单演示了所描述的方æ³?<br /></p><p><font face="Verdana">package exp.oracle.jaxrrpc.headers;</font></p><p><font face="Verdana">.............</font></p><p><font face="Verdana">import javax.xml.rpc.*;<br />import javax.xml.soap.*;</font></p><p><font face="Verdana">public class BestTermInsuranceRequestHandler implements javax.xml.rpc.handler.Handler<br />{</font></p><p><font face="Verdana">...........................</font></p><p><font face="Verdana"> /*<br /> *The handleRequest method processes the request message.<br />  */<br />try {<br />SOAPMessageContext msg = (SOAPMessageContext) context;<br />SOAPEnvelope env = msg.getMessage().getSOAPPart().getEnvelope();<br />SOAPHeader hdr = env.getHeader();<br />exit=processRequestHeader(hdr);</font></p><p><font face="Verdana">       }<br />catch (Exception ex) {<br />ex.printStackTrace();<br /> }</font></p><p><font face="Verdana"> return exit;<br /> }</font></p><font face="Verdana"><p><br /> /*<br /> * This version of the process header method inserts the state identifier information.<br /> */<br />  private boolean processRequestHeader (SOAPHeader hdr) {<br />  boolean exit = false;<br />  <br />  SOAPFactory sFactory = SOAPFactory.newInstance();  <br />try {<br />SOAPElement he1 = sFactory.createElement("stateIdentifier",PREFIX,URI); <br />SOAPElement che11 = sFactory.createElement("ClientID",PREFIX,URI); <br />            che11.addTextNode("Cust1");<br />            ...............................  <br />            he1.addChildElement(che11);<br />            he1.addChildElement(che12);<br />            he1.addChildElement(che13);<br />            <br />            // add the state identifier information to the SOAP header object<br />            hdr.addChildElement(he1);<br />            exit = true;       </p><p>       }<br /> catch (Exception ex) {<br />     ex.printStackTrace();<br /> }</p><p> return exit;<br />    }<br />å¼€å?SOAP 处理½E‹åºåŽï¼Œå¯ä»¥ä½¿ç”¨ WSA 在相应的 webservices.xml æ–‡äšg中配¾|®å®ƒä»¬ã€?然后åQŒå¯ä»¥ç‘ô¾l­åˆ›å»ºéƒ¨¾|²æ˜q°æ–‡ä»¶åƈž®?Web 服务安装åˆ?OC4J 中ã€?/p><p>  <strong>¾l“论</strong></p><p>  显而易见,ž®†å•个请æ±?响应交互与无状态的 Web 服务¾l“合使用是最½Ž€å•的实现æ–ÒŽ(gu¨©)³•ã€?但伴随简单性而来的是一个很大的¾~ºç‚¹: 无法实现用于处理复杂和长期运行的业务事务çš?Web 服务ã€?/p><p>  本文介绍的状态管理方法所åŸÞZºŽçš„策略以更出色的æ–ÒŽ(gu¨©)³•寚w•¿æœŸè¿è¡Œçš„业务‹zÕdЍ˜q›è¡Œå»ºæ¨¡ã€?具体而言åQŒåœ¨æœ¬æ–¹æ³•中åQŒæœåŠ¡â€œæ³¨å†Œâ€åˆ°è‰¯å¥½æŽ§åˆ¶çš„ä¼šè¯?ž®†ç‰¹å®šçš„工作单元表示ä¸ÞZ¸šåŠ¡æ´»åŠ¨è¿›åº?ã€?此功能对于连接企业内部以及跨企业的、支æŒ?Web 服务的应用程序很重要åQŒåƈ包含一¾l„支持对˜qžæŽ¥çš„应用程序之间的交互˜q›è¡Œ½Ž¡ç†å’Œç›‘控的ç‰ÒŽ(gu¨©)€§ã€?br /><br /><br /><a >http://www.oracle.com/technology/global/cn/pub/articles/davydov_soa.html</a></p></font><img src ="http://www.aygfsteel.com/clant/aggbug/84998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/clant/" target="_blank">BPM </a> 2006-12-02 13:09 <a href="http://www.aygfsteel.com/clant/articles/84998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>普元软äšghttp://www.aygfsteel.com/clant/articles/84994.htmlBPM BPM Sat, 02 Dec 2006 04:42:00 GMThttp://www.aygfsteel.com/clant/articles/84994.htmlhttp://www.aygfsteel.com/clant/comments/84994.htmlhttp://www.aygfsteel.com/clant/articles/84994.html#Feedback0http://www.aygfsteel.com/clant/comments/commentRss/84994.htmlhttp://www.aygfsteel.com/clant/services/trackbacks/84994.html 摘要åQšäº”òq´çš„æ™®å…ƒ˜q˜å¾ˆž®ï¼Œä¹Ÿè¿˜å¾ˆè„†å¼±ï¼Œåœ¨é¢å‘构件的新èÊY件体¾pȝš„道èµ\上普元也才仅仅迈å‡ÞZº†å¼€å§‹çš„几步。但是我们相信在茫茫的èÊY件世界中åQŒä¸­å›½è¿˜æ˜¯æœ‰ç‹¬ç‰¹æœÞZ¼šåQŒæ™®å…ƒå°±åƒæ˜¯æ˜Ÿæ˜Ÿä¹‹ç«ã€‚äØ“äº†è¿™æ˜Ÿæ˜Ÿä¹‹ç«å¯ä»¥ç‡ŽåŽŸåQŒæ™®å…ƒè¿˜ž®†ä»˜å‡?span lang="EN-US">5òq´ã€?span lang="EN-US">10òq´æˆ–者更长时间的努力åQŒä½†æ˜¯æ²¡æœ‰ä»€ä¹ˆå°†å¯ä»¥é˜ÀL­¢æˆ‘们前进的步伐!

2 òq´å¤šä»¥å‰å½“搜索刚刚流行的时候,åœ?span lang="EN-US">Googel中敲˜q›æ™®å…ƒä¸¤ä¸ªå­—åQŒå‡ºæ¥çš„多半是和某种钢材相关的信息,今天出来çš?span lang="EN-US">58000多条信息中关于普元èÊY件的基本上在å‰?span lang="EN-US">30™åµéƒ½æ˜¯ã€‚普元用äº?span lang="EN-US">2òq´å¤šçš„æ—¶é—ß_¼ŒæŠŠæ™®å…ƒå’Œé¢å‘æž„äšg技术紧密地联系èµäh¥åQŒæ™®å…ƒä¹Ÿæˆäؓ软äšgæž„äšgåŒ–çš„ä»£åè¯ï¼ŒæˆäØ“ä¸–ç•Œé¢†å…ˆçš„æž„ä»‰™¢†åŸŸä¸“家企业ã€?/span>

å¾ˆå¤šäººå¯èƒ½è¿˜ä¸æ¸…æ¥šäØ“ä»€ä¹ˆæˆ‘ä»¬å…¬å¸çš„åç§°æ˜?span lang="EN-US">â€?/span>普元â€?/span>两个字。这个听èµäh¥åƒåº™å®‡åå­—一æ ïLš„â€?/span>普元â€?/span>是什么意思呢åQ?/span>

â€?/span> æ™?span lang="EN-US">â€?/span>意指普遍的,â€?/span>å…?span lang="EN-US">â€?/span>代表基本元素åQŒæ‰€ä»¥åˆèµäh¥çš„解释就æ˜?span lang="EN-US">â€?/span>普遍存在的基本元ç´?span lang="EN-US">â€?/span>ã€‚å°±åƒç‰©ç†ä¸–ç•Œå­˜åœ¨åŸºæœ¬ç²’å­äØ“ä»£è¡¨çš„åŸºæœ¬å…ƒç´ ä¸€æ øP¼Œæˆ‘ä»¬è®¤äØ“åœ¨èÊY件世界也存在基本元素åQŒè¿™äº›æ™®éå­˜åœ¨çš„基本元素的集合是有限的、是可数的,因此ž®±å†³å®šäº†æˆ‘们可以用一¾l„基本信息元素构建复杂而庞大的信息¾pȝ»ŸåQŒå°±åƒç‰©ç†ä¸–界复杂系¾lŸï¼ˆå¦‚分子、蛋白质、器官、ähåQ‰éƒ½æ˜¯ç”±ä¸€¾l„基本元素(电子、中子和质子åQ‰ç»„成的一栗÷€‚在此哲学思想的指å¯ég¹‹ä¸‹ï¼Œæˆ‘们ž®±å¯ä»¥æž„½{‘一个面向构件的新èÊY件体¾p…R€‚在˜q™ä¸ªæ–°çš„体系中,复杂的èÊYä»¶ç³»¾lŸå°†æœ€¾lˆå¯ä»¥åˆ†è§£æˆä¸ø™¿™äº›ç®€å•的元素åQˆåŸº¼‹€æž„äšgåQ‰ã€?/span>

ž®±åƒç‰©ç†å­¦å®¶å‡ ç™¾òq´æŽ¢ç´¢ç‰©ç†ä¸–界,å¯ÀL‰¾ç‰©ç†ä¸–ç•Œçš„æœ¬è´¨ä¸€æ øP¼Œæ™®å…ƒåœ¨æŽ¢ç´¢ä¿¡æ¯ä¸–界,å¯ÀL‰¾è½¯äšg世界的本质。今天的软äšg形态就åƒ?span lang="EN-US">19世纪的物理学的分支热力学åQŒåŸºæœ¬ä¸Šå±žäºŽçŽ°è±¡å­¦çš„ã€‚ähä»¬è§‚å¯ŸåÆˆæ€È»“了温度、压力等概念åQŒåƈ且找åˆîCº†ä¸€äº›è§„律。一直到åŸÞZºŽåˆ†å­˜qåŠ¨çš„ç»Ÿè®¡åŠ›å­¦å‡ºæ¥ä»¥åŽï¼ŒäºÞZ»¬æ‰æ˜Žç™½æ¸©åº¦ä¹ƒæ˜¯åˆ†å­è¿åŠ¨å¼ºåº¦çš„è¡¨çŽ°åQŒåŽ‹åŠ›æ˜¯å¼ºåº¦å’Œå¯†åº¦çš„é›†åˆè¡¨çŽ°½{‰ç­‰ã€‚由于历史的原因åQŒä»Šå¤©èÊY件的分类å¦?span lang="EN-US">CRMåQ?span lang="EN-US">ERP½{‰ç­‰éƒ½æ˜¯ä»Žç”¨æˆïLš„视角来进行的åQŒæ— è®ºæ˜¯å¼€å‘商˜q˜æ˜¯ç”¨æˆ·éƒ½è¿˜æ²¡æœ‰æ‹¥æœ‰ä¸€ä¸ªæž„造分析的视角åQŒèƒ½å¤Ÿç”¨åˆ†æžçš„视角看待èÊY件体¾pÕdªæœ‰åœ¨é¢å‘æž„äšgçš„æ—¶ä»£æ‰çœŸæ­£æˆäØ“å¯èƒ½ã€?/span>

˜q™ä¸ªåŸÞZºŽæœ‰é™æž„äšg集合的新软äšg体系必将取代旧的无序的基于代码的传统软äšg体系åQŒé»„博士的书《èÊY件的涅磐》就是阐˜q°è¿™ä¸ªæ€æƒ³ã€?/span>

企图用构件的思想来攻克èÊY件世界的òq¶ä¸æ˜¯æ™®å…ƒçš„原创åQŒäؓ什么这æ ïLš„æœÞZ¼šç•™ç»™äº†æ™®å…ƒï¼Ÿä¸ÞZ»€ä¹ˆèÊY件大国美国没有去做?软äšg大鳄IBM没有做?我们¾lå¸¸ä¼šé‡åˆ°è¿™æ ïLš„æé—®ã€‚回½{”这个问题需要两个方面的视角åQŒä¸€æ˜¯æŠ€æœ¯çš„视角åQŒå¦ä¸€ä¸ªæ˜¯å•†ä¸šçš„、市场的视角ã€?/span>

从技术的视角来看åQŒèÊY件构件思想虽然已经提出˜q‘四十年åQŒä½†æ˜¯æ˜‚è´‰|Š€æœ¯çš„å£åž’å’Œç”±æ­¤æ‰€å¸¦æ¥çš„æ ‡å‡†å£åž’ä‹Éå¾—è¿™æ ïLš„æ€æƒ³æ— æ³•åœ¨é€šç”¨çš„é¢†åŸŸå•†ä¸šä¸ŠæˆäØ“å¯èƒ½ã€‚å°±åƒç†è®ÞZ¸Šæˆ‘们今天可以用核聚变技术把‹¹äh°´å˜äØ“ç”µèƒ½ä¸€æ øP¼Œå•†ä¸šä¸Šåˆ©ç”¨æ“v水来发电˜q˜æ˜¯é¥ä¸å¯åŠçš„。即使是åœ?span lang="EN-US">10多年以前åQŒäh们对软äšg的功能企图不˜q‡æ˜¯ç›¸å¯¹½Ž€å•的客户½Ž¡ç†ã€ç”Ÿäº§æµ½E‹ç®¡ç†ã€å†…部审批等½{‰å†…容,基本限于部门¾U§åˆ«çš„ä‹É用,ž®‘数也可以在公司范围内ä‹É用。一台大型主机动辄几十万上百万美元,交换æœÞZ¹Ÿéžå¸¸æ˜‚è´µåQŒèÊY件接口没有标准,市面‹¹è¡Œç€35¿Uç”µè„‘之间的通讯协议åQŒåœ¨10多年前的那个时代˜q™äº›ä¹Ÿå°±­‘›_¤Ÿäº†ã€?/span>

随着互联¾|‘的出现åQŒæˆ‘们迎来了电子商务和一个数亿äh参与的信息互动时代。基于部门的非标准的软äšg¾pȝ»Ÿä¸èƒ½å†æ»¡­‘³äh们对信息¾pȝ»Ÿçš„要求了åQŒåŒæ—¶æŠ€æœ¯ä­h(hu¨¢n)格的在不断的急剧下降åQŒäº’联网电子商务的全民互动时代强制了标准的迅速徏立,TCP/IP¾lŸæ²»äº†ç½‘¾lœé€šè®¯åè®®åQŒèÊY件标准也在逐步形成。当2001òq?span lang="EN-US">4月普元把J2EE技术,WebService技术,XML技术和构äšg技术作为未来的标准技术集成在一èµïLš„æ—¶å€™ï¼Œåº”该说我们是先驱者之一。那个时候由于应用性能问题åQŒè¿™äº›æŠ€æœ¯åœ¨å®žè·µä¸­è¿˜æ˜¯éžå¸¸è°}慎采用的åQŒåƈ非主‹¹ã€‚因此,可以说互联网的普及ä‹Éå¾—èÊY件构件技术获得生命ã€?/span>

从市场的视角来看åQŒç¾Žå›½çš„大老们åˆîC»Šå¤©è¿˜åœ¨äؓ解决˜q‡åŽ»å‡ åòq´æ‰€ç•™ä¸‹çš„大量的æ•îC»¥ä¸‡äº¿¾ŸŽå…ƒè®¡ç®—的企业信息系¾lŸæ”¹é€ è€Œæ“å¿ƒï¼Œå› äؓ那是今天最大的一块饼åQŒç¾Žå›½äh拖上印度äºÞZ¸€èµ·åœ¨åŠªåŠ›çš„åˆ†å‰²è¿™ä¸€å—ä¼ ¾lŸèÊY件市场的最后一块蛋¾p•。他们无暇顾及这个在¾ŸŽå›½˜q˜éœ€è¦å¤šòq´æ—¶é—´æ‰èƒ½å¤Ÿå˜å¾—可观的市场。美国也曄¡»ç”Þp‹¥òq²ä¼ä¸šåœ¨é¢å‘æž„äšg技术的路上èµîCº†å‡ å¹´åQŒæœ€åŽåº”为市场的原因而倒闭和拍卖,发达国家的主‹¹å®¢æˆïLš„æœºæˆ¿é‡Œéƒ½å·²ç»å †æ»¡äº†åŽ†å²ä¸Šé—ç•™çš„å„¿Uä¿¡æ¯ç³»¾lŸï¼Œä»Žå•†ä¸šçš„角度看今天谁也不愿意ä¸ÞZ¸€ä¸ªæ–°çš„èÊY件体¾pÖM¹°å•ã€?/span>

å› æ­¤åQŒè¿™ä¸ªæœºä¼šç•™¾l™äº†åœ¨ä¸­å›½çš„æ™®å…ƒã€‚今天中国的企业软äšg市场不过是世界市场冰å±×ƒ¸€è§’,仅占全球市场çš?span lang="EN-US">3%左右。中国企业的信息化程度也不过仅有5%åQŒæœªæ¥çš„十年中国˜q˜æœ‰å¾ˆé•¿çš„èµ\要走。不˜q‡æˆ‘ä»¬æœ‰ç†ç”±ç›æ€¿¡åQŒä¸­å›½åœ¨æœªæ¥çš?span lang="EN-US">5åˆ?span lang="EN-US">10òq´å°†æˆäؓ全球信息化的ä¸ÀLµå¸‚场之一åQŒä¸­å›½å°†ä¸ÞZ¿¡æ¯åŒ–付出æ•îC¸‡äº¿äh民币的代仗÷€‚ç„¶è€Œï¼Œæˆ‘ä»¬ç›æ€¿¡˜q™ä¸€åˆ‡å°†åœ¨æ–°çš„以面向构äšg为核心的新èÊY件体¾pÖM¸‹˜q›è¡Œã€‚中国没有庞大的遗äñ”¾pȝ»ŸåŒ…袱åQŒä»¥çŽ°å®žçš„ã€å•†ä¸šçš„ç†ç”±æ¥çœ‹ä¸­å›½æ— æ³•é‡‡ç”¨çŽ°æœ‰çš„ã€ä¼ ¾lŸçš„国外软äšg体系åQŒå¿…™å»é‡æ–°å¾è®¾ã€?/span>

《èÊY件中国的æœÞZ¼šã€‹å°±æ˜¯åœ¨é˜è¿°˜q™ä¸ªæ€æƒ³ã€?/span>

五年的实践,我们通过市场的验证,证明了面向构件的软äšg思想是正¼‹®çš„åQŒèÊY件构件化商业上的应用是实际有价值的ã€?/span>

五年的普元还很小åQŒä¹Ÿ˜q˜å¾ˆè„†å¼±åQŒåœ¨é¢å‘æž„äšg的新软äšg体系的道路上普元也才仅仅˜qˆå‡ºäº†å¼€å§‹çš„几步。但是我们相信在茫茫的èÊY件世界中åQŒä¸­å›½è¿˜æ˜¯æœ‰ç‹¬ç‰¹æœÞZ¼šåQŒæ™®å…ƒå°±åƒæ˜¯æ˜Ÿæ˜Ÿä¹‹ç«ã€‚äØ“äº†è¿™æ˜Ÿæ˜Ÿä¹‹ç«å¯ä»¥ç‡ŽåŽŸåQŒæ™®å…ƒè¿˜ž®†ä»˜å‡?span lang="EN-US">5òq´ã€?span lang="EN-US">10òq´æˆ–者更长时间的努力åQŒä½†æ˜¯æ²¡æœ‰ä»€ä¹ˆå°†å¯ä»¥é˜ÀL­¢æˆ‘们前进的步伐!



]]>
通向SOAåQç¾Žå›½å’Œä¸­å›½ä¸åŒçš„道è·?/title><link>http://www.aygfsteel.com/clant/articles/84993.html</link><dc:creator>BPM </dc:creator><author>BPM </author><pubDate>Sat, 02 Dec 2006 04:40:00 GMT</pubDate><guid>http://www.aygfsteel.com/clant/articles/84993.html</guid><wfw:comment>http://www.aygfsteel.com/clant/comments/84993.html</wfw:comment><comments>http://www.aygfsteel.com/clant/articles/84993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/clant/comments/commentRss/84993.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/clant/services/trackbacks/84993.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">惌™“v宽带刚刚普及的时候,我在¼‹…谷的家中也ž®±å¼€å§‹å®‰è£…了åQŒä¸˜q‡éº»çƒ¦çš„事情是家中有<span lang="EN-US">5</span>个电脑分布在<span lang="EN-US">5</span>个不同的戉K—´ã€‚房子是å»ÞZºŽ<span lang="EN-US">1963</span>òq´çš„老房åQŒæ‰€ä»¥ç”¨¾|‘络¾U¿çš„˜qžæŽ¥ž®±æˆä¸ºé—®é¢˜ã€‚最快速且便宜的解å†Ïx–¹æ¡ˆæ˜¯å¸ƒè£¸¾U¿ï¼Œå¦åˆ™ž®Þp¦å¼€è…”凿‹zžã€‚因此,家中的墙角和戉K—¨å£çš„˜q‡é“均成为网¾U¿çš„的落脚之处,隄¡œ‹ä¹‹æžåQŒä½†˜q™æ˜¯å½“时最½Ž€å•的解决æ–ÒŽ(gu¨©)¡ˆã€‚直到无¾U¿å±€åŸŸç½‘的出玎ͼŒ˜q™ä¸ªé—®é¢˜æ‰å¾—以解冟ë€?span lang="EN-US"></span></span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">在中国的ž®åŒºå»ø™®¾ä¸­ï¼Œå®½å¸¦çš„连接成为基本配¾|®ï¼Œæ‰€ä»¥è€çš„½C‘ÖŒºæ›„¡»ä¹Ÿæœ‰åŒæ ·çš„é—®é¢˜ï¼Œè€Œå¤§é‡çš„æ–°ç¤¾åŒø™¿™ä¸ªé—®é¢˜å°±ä¸å­˜åœ¨äº†ã€‚即便有无线局域网的技术,有线宽带的接口还是都提供的。新½C‘ÖŒºçš„好处就是可以在一开始就部çÖv新技术,而不需要走老èµ\ã€?span lang="EN-US"></span></span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">如今åQŒå…¨ä¸–界都在嚷嚷<span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">SOA</font></u></i></b></a></span>åQŒé‚£æˆ‘们也需要考察¾ŸŽå›½äººæ€Žä¹ˆéƒ¨çÖv<span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">SOA</font></u></i></b></a></span>åQŒä¸­å›½äh怎么部çÖv。研½I¶è¿™ä¸ªé—®é¢˜ï¼Œå¯ÒŽ(gu¨©)ˆ‘们èÊY件公司还是对我们的客户都是有极大帮助的,以免再一‹Æ¡è¢«æˆ‘们çš?span lang="EN-US">â€?/span>ä¸ÀLµ<span lang="EN-US">â€?/span>厂商误导。因为,¾ŸŽå›½äººå¦‚何部¾|?span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">SOA</font></u></i></b></a></span>军_®š¾ŸŽå›½<span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">SOA</font></u></i></b></a></span>产品的特征,中国人怎么部çÖv军_®šä¸­å›½<span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">SOA</font></u></i></b></a></span>产品的特性ã€?span lang="EN-US"></span></span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <a target="_blank"> <b> <i> <u> <font color="#999966">SOA</font> </u> </i> </b> </a> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">的核心是把业务流½E‹åŠŸèƒ½æ¨¡å—æž„ä»¶åŒ–åQŒåƈ对外提供标准的服务,åŸÞZºŽ˜q™äº›æœåŠ¡åQŒä¼ä¸šå†…部的不同业务部门或是不同企业之间的业务整合就更加å®ÒŽ(gu¨©)˜“一些ã€?span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">SOA</font></u></i></b></a></span>的出现是ç”׃ºŽäº’联¾|‘技术的出现åQŒå°†åŽŸæ¥å„è‡ªä¸ºé˜µçš?span lang="EN-US">EAI</span>市场标准化ã€?span lang="EN-US"></span></span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">在美国由于多òq´çš„应用¾pȝ»Ÿå»ø™®¾åQŒä¼ä¸šçš„业务‹¹ç¨‹å¤§å¤šæ•îC»¥éžæ ‡å‡†çš„形式被掩藏在各种各样的应用系¾lŸä¹‹ä¸­ï¼Œæ¯”如<span lang="EN-US">CRM</span>¾pȝ»ŸåQ?span lang="EN-US">ERP</span>¾pȝ»ŸåQ?span lang="EN-US">HR</span>¾pȝ»ŸåQŒä¿¡ç”¨è¯„ä¼°ç³»¾lŸç­‰½{‰ã€‚所以实çŽ?span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">SOA</font></u></i></b></a></span>架构的第一步是ž®†é‚£äº›æŽ©è—åœ¨ä¸ªåº”用系¾lŸä¹‹ä¸­çš„ä¸šåŠ¡åŠŸèƒ½æ¨¡å—åˆ‡å‰²å¼€æ¥ï¼ŒåŠ ä»¥åŒ…è£…ä¹‹åŽæˆäØ“æ ‡å‡†çš„æœåŠ¡æž„ä»Óž¼Œç„¶åŽ˜q˜è¦ž®†åˆ†æ•£åœ¨ä¸åŒ¾pȝ»Ÿä¸­çš„æ•°æ®æ•´åˆåŒ…è£…æˆäØ“æ•°æ®æœåŠ¡åQŒæœ€åŽæ ¹æ®ä¸šåŠ¡çš„éœ€è¦åŒ˜q?span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">BPEL</font></u></i></b></a></span>ž®†åˆ†æ•£çš„æœåŠ¡˜qžæŽ¥æˆäؓ新的服务。所以美国实çŽ?span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">SOA</font></u></i></b></a></span>çš„æ–¹æ³•äØ“åQ?span lang="EN-US"></span></span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。对原有业务‹¹ç¨‹çš„æå–å’ŒåŒ…è£…æˆäØ“æœåŠ¡æž„äšgåQ?span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">SCA</font></u></i></b></a></span>åQ‰ï¼›<span lang="EN-US"></span></span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">2</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。对原有数据的整合包装成为数据服务(<span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">SDO</font></u></i></b></a></span>åQ‰ï¼›<span lang="EN-US"></span></span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">3</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">。用<span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">BPEL</font></u></i></b></a></span>实现新的‹¹ç¨‹ã€?span lang="EN-US"></span></span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">˜q™ä¸ªåšæ³•的可行性基于一个重要前提:原有的业务流½E‹å¯ä»¥è¢«åˆ‡å‰²åŒ…装åQˆä»£ä»·é—®é¢˜ï¼‰åQŒåŽŸæœ‰çš„æ•°æ®å¯ä»¥åœ¨ä¸€å®šç¨‹åº¦ä¸Šè¢«æ ‡å‡†åŒ–åŒ…è£…æˆäØ“æœåŠ¡åQŒå¦‚果所有的¾pȝ»Ÿéƒ½éœ€è¦é€šè¿‡äººå·¥åˆ‡å‰²å’ŒåŒ…装则代ä­h(hu¨¢n)太大åQŒå¿…™åÕd­˜åœ¨ä¸€‹Æ¡åˆ‡å‰²å¤š‹Æ¡å¤ç”¨çš„æƒ…况åQŒå¦åˆ™åˆ‡å‰²çš„环节无法产品化。由于美国企业的应用¾pȝ»Ÿå¤§é‡é‡‡ç”¨äº†æœ‰é™åŽ‚å•†çš„äº§å“æ¯”å¦‚<span lang="EN-US">SAP</span>åQ?span lang="EN-US">ORACLE</span>åQ?span lang="EN-US">SIEBLE</span>½{‰ï¼Œä¸€å®šç¨‹åº¦çš„æ ‡å‡†åˆ‡å‰²æ˜¯å­˜åœ¨çš„åQŒå°¤å…¶æ˜¯å¤šå¹´çš?span lang="EN-US">EAI</span>实践åQŒäؓ切割的标准化打下了基¼‹€ã€‚å°½½Ž¡å¦‚此,大量的基于äh工服务的切割˜q˜æ˜¯å¿…须的,所以,印度人有饭吃。而这些切割的工作与中国èÊY件外包企业多半无兟ë€?span lang="EN-US"></span></span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">å› æ­¤åQŒæˆ‘们可以预见美国制造的<span lang="EN-US"><a target="_blank"><b><i><u><font color="#999966">SOA</font></u></i></b></a></span>产品ž®†æŠŠå…ähœ‰æ ‡å‡†åˆ‡å‰²åŠæ‰“包功能作为重要的卖点åQŒä¹Ÿæ˜¯äñ”品的价值所在。市场决定äñ”品的特征åQŒå°±˜q™ä¹ˆ½Ž€å•的逻辑ã€?span lang="EN-US"></span></span> </p> <p> </p> <p class="MsoNormal" style="TEXT-ALIGN: left; 0cm: ; mso-pagination: widow-orphan" align="left"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span> </p> <p> </p> <p class="MsoNormal"> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中国çš?/span> <span lang="EN-US" style="FONT-SIZE: 12pt"> <a target="_blank"> <b> <i> <u> <font color="#999966">SOA</font> </u> </i> </b> </a> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如何实现呢?我们的预见是多半是把¾pȝ»ŸæŒ‰ç…§<a target="_blank"><b><i><u><font color="#999966">SOA</font></u></i></b></a>æä¾›çš„æ ‡å‡†æ¥å»ø™®¾åQŒä¸»‹¹æ˜¯æŠŠç³»¾lŸå¾è®¾æˆä¸?/span> <span lang="EN-US" style="FONT-SIZE: 12pt"> <a target="_blank"> <b> <i> <u> <font color="#999966">SOA</font> </u> </i> </b> </a> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标准的系¾lŸï¼Œè€Œä¸æ˜¯åˆ‡å‰²å’ŒåŒ…装åQŒé‚£äº›éœ€è¦åˆ‡å‰²å’ŒåŒ…装的系¾lŸç»å¤§å¤šæ•îC¾èµ–于服务而不是äñ”å“ã€‚ä½œå‡ø™¿™ä¸ªåˆ¤æ–­åŸº¼‹€ä¸¤ä¸ªå‰æåQ?/span> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <p class="MsoNormal"> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <p class="MsoNormal" style="TEXT-INDENT: -18pt; 0cm: ; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">1åQ?ã€?/span> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原有的系¾lŸå¾ˆž®‘ï¼›</span> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <p class="MsoNormal" style="TEXT-INDENT: -18pt; 0cm: ; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"> <span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">2åQ?ã€?/span> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那些已经存在的系¾lŸå¾ˆž®‘是能够被标准化切割的;</span> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <p class="MsoNormal"> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <p class="MsoNormal"> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">å› æ­¤åQŒåœ¨ä¸­å›½å¼€å?/span> <span lang="EN-US" style="FONT-SIZE: 12pt"> <a target="_blank"> <b> <i> <u> <font color="#999966">SOA</font> </u> </i> </b> </a> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">产品最重要的特征是如何在一个标准的òq›_°ä¸Šï¼ˆæ¡†æž¶å†…)构造企业所需要的所有标准服务,òq¶ä¸”å®ÒŽ(gu¨©)˜“½Ž¡ç†å’Œå‘展(变化åQ‰ã€‚中国市åœ?/span> <span lang="EN-US" style="FONT-SIZE: 12pt">(</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">客户</span> <span lang="EN-US" style="FONT-SIZE: 12pt">)</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">面äÍ的主要问题有如下几条åQ?/span> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <p class="MsoNormal"> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <ol> <li> <div id="wmqeeuq" class="MsoNormal" style="TEXT-INDENT: -18pt; 0cm: ; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt"> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">˜q˜æ²¡æœ‰é‡‡ç”?a target="_blank"><b><i><u><font color="#999966">SOA</font></u></i></b></a>架构标准åQ?/span> </div> </li> <li> <div id="wmqeeuq" class="MsoNormal" style="TEXT-INDENT: -18pt; 0cm: ; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt"> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原有的系¾lŸéš¾ä»¥åˆ‡å‰ÔŒ¼Œä¸šåŠ¡‹¹ç¨‹éš¾ä»¥æå–åQ?/span> </div> </li> <li> <div id="wmqeeuq" class="MsoNormal" style="TEXT-INDENT: -18pt; 0cm: ; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt"> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">复杂的数据难以整合;</span> </div> </li> <li> <div id="wmqeeuq" class="MsoNormal" style="TEXT-INDENT: -18pt; 0cm: ; mso-list: l1 level1 lfo2; tab-stops: list 18.0pt"> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">新徏的系¾lŸæ²¡æœ‰ç»Ÿä¸€çš„æŠ€æœ¯æž¶æž„,产生更多的标准化问题ã€?/span> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </div> </li> </ol> <p> </p> <p> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <p> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">考察中国的市场我们可以作出如下的预言åQ?/span> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <p> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <p> <span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">1åQ?ã€?/span> </span> <span lang="EN-US" style="FONT-SIZE: 12pt"> <a target="_blank"> <b> <i> <u> <font color="#999966">SOA</font> </u> </i> </b> </a> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">ž®†è¢«ä¸ÀLµå¸‚åœºæŽ¥å—æˆäØ“æ ‡å‡†çš„ä½“¾pȝ»“构;</span> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <p> <span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">2åQ?ã€?/span> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">¾ŸŽå›½ä¸ÀLµçš?a target="_blank"><b><i><u><font color="#999966">SOA</font></u></i></b></a>产品在中国会水土不服åQ?/span> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <p> <span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">3åQ?ã€?/span> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原有¾pȝ»Ÿž®†ä¸»è¦ä¾é æœåŠ¡æ¥åˆ‡å‰²åQŒæˆ–者推倒重来;</span> <span lang="EN-US" style="FONT-SIZE: 12pt"> </span> </p> <p> </p> <p> <span lang="EN-US" style="FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"> <span style="mso-list: Ignore">4åQ?ã€?/span> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">大量的新建系¾lŸå°†é‡‡ç”¨æ ‡å‡†çš„小颗粒构äšg构造流½E‹çñ”别的标准服务构äšgåQ?/span> </p> <p> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">5ã€?ã€‚æ™®å…ƒé¢å‘æž„ä»¶çš„ä¸­é—´ä»¶å°†æˆäØ“</span> <span lang="EN-US" style="FONT-SIZE: 12pt"> <a target="_blank"> <b> <i> <u> <font color="#999966">SOA</font> </u> </i> </b> </a> </span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">ä¸ÀLµä¸­çš„中国ä¸ÀLµã€?br /></span> <span lang="EN-US" style="FONT-SIZE: 12pt"> <br />引用:<br /><a >http://gocom.primeton.com/blog/index.php?op=ViewArticle&articleId=891&blogId=62</a></span> </p> <img src ="http://www.aygfsteel.com/clant/aggbug/84993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/clant/" target="_blank">BPM </a> 2006-12-02 12:40 <a href="http://www.aygfsteel.com/clant/articles/84993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web服务架构及其规范入门http://www.aygfsteel.com/clant/articles/84144.htmlBPM BPM Tue, 28 Nov 2006 13:37:00 GMThttp://www.aygfsteel.com/clant/articles/84144.htmlhttp://www.aygfsteel.com/clant/comments/84144.htmlhttp://www.aygfsteel.com/clant/articles/84144.html#Feedback0http://www.aygfsteel.com/clant/comments/commentRss/84144.htmlhttp://www.aygfsteel.com/clant/services/trackbacks/84144.html                                                            Web服务架构及其规范入门

作者:Luis Felipe Cabrera、Christopher Kurt、Don Box

    [摘要]本Web服务架构入门阐述了Web服务架构的基¼‹€è®¾è®¡åŽŸåˆ™å’ŒWeb服务的基¼‹€æŠ€æœ¯ã€‚此外还对其功能˜q›è¡Œäº†ä»‹¾lï¼Œòq¶æä¾›äº†å¯¹å…¶˜q›è¡Œæ­£å¼å®šä¹‰çš„规范链接。本文也是该架构所有规范的参考指南ã€?/p>

XMLå’ŒInfoset

    对于所有的消息传递系¾lŸæ¥è¯ß_¼Œé€‰æ‹©ä¿¡æ¯ä¼ è¾“单位是非帔R‡è¦çš„——简单地è¯ß_¼Œå¯ÒŽ(gu¨©)¶ˆæ¯çš„æž„成有个一般的认识是必不可ž®‘的。在Web服务中,一条消息就是一个XML文档信息™å¹ï¼Œå®ƒç”±XML信息集(XML Information SetåQŒå³InfosetåQ‰å®šä¹‰ã€‚Infoset是一个抽象的数据模型åQŒå®ƒå…¼å®¹åŸÞZºŽæ–‡æœ¬çš„XML 1.0åQŒä¹Ÿæ˜¯æ‰€æœ‰æœ€æ–°XML规范åQˆXML Schema、XML Queryå’ŒXSLT 2.0åQ‰çš„基础。由于Web服务架构是以XML InfosetåQŒè€Œä¸æ˜¯æŸä¸€ç‰¹å®šçš„表现åÅžå¼äØ“åŸºç¡€åQŒä‹É得该架构及其核心协议¾l„äšg可与其他¾~–码技术兼宏V€?/p>

    Infosetæ ÒŽ(gu¨©)®ä¸€¾l„‘信息项åQˆInformation ItemsåQ‰â€™å¯¹XML文档˜q›è¡Œå»ºæ¨¡ã€‚è¿™¾l„可能的信息™å¹ä¸€èˆ¬ä¼šæ˜ å°„到XML文档的不同功能部件上åQŒå¦‚元素、属性、命名空间和注解。每一信息™åšwƒ½æœ‰ä¸€ä¸ªå…³è”属性集åQŒç”¨äºŽæä¾›è¯¥™å¹çš„æ›´å®Œæ•´æ˜q°ã€‚附录B描述了XML文档中的11¾cÖM¿¡æ¯é¡¹ã€‚每一个结构严谨的XML文档都会包含一个文档信息项和至ž®‘一个元素信息项ã€?/p>

    除了åŸÞZºŽ¾U¯æ–‡æœ¬çš„Infoset¾~–码技术以外,Web服务架构˜q˜æ”¯æŒå¦å¤–一¿UInfoset¾~–码技术——即允许不透明的二˜q›åˆ¶æ•°æ®ä¸Žä¼ ¾lŸçš„åŸÞZºŽæ–‡æœ¬çš„æ ‡è®îCº¤¾l‡åœ¨ä¸€èµ—÷€‚W3C XML-binary Optimized PackagingåQˆå³XOPåQ‰æ ¼å¼ä‹É用多部分MIMEž®†åŽŸå§‹äºŒ˜q›åˆ¶æ•°æ®å¼•入到XML 1.0文档中,而不采用base64¾~–码。其配套规范——SOAP 消息 Transmission Optimization MethodåQŒå³MTOMåQŒåˆ™æŒ‡å®šå¦‚何ž®†è¯¥æ ¼å¼¾l‘定到SOAP。XOPå’ŒMTOM是将原始二进制数据与åŸÞZºŽæ–‡æœ¬çš„XML混合在一èµïLš„首选方法,它们取代了目前普遍遭到反对的SOAP with AttachmentsåQˆSwAåQ‰å’ŒWS-Attachments/DIMEã€?/p>

SOAP

    SOAP为在分散的分布式环境中ä‹É用XML在同½{‰ä½“之间交换¾l“构化分¾cÖM¿¡æ¯æä¾›äº†ä¸€¿Uç®€å•的轻量¾U§æœºåˆ¶ã€‚SOAP旨在最大限度地降低对基于不同åã^台构建的应用½E‹åº˜q›è¡Œé›†æˆçš„设计成本,òq¶è®¤ä¸ºæœ€ä½Žæˆæœ¬æŠ€æœ¯æœ€æœ‰å¯èƒ½èµ¢å¾—普遍接受。SOAP消息是包含三个元素的XML文档信息™å¹ï¼Œ˜q™ä¸‰ä¸ªå…ƒç´ æ˜¯åQ?lt;Envelope>ã€?lt;Header>å’?lt;Body>ã€?/p>

    Envelope是SOAP消息的根元素åQŒå®ƒåŒ…含一个可选的Header元素和一个必需的Body元素。Header元素是以分散方式增加SOAP消息功能的一¿Ué€šç”¨æ‰‹æ³•。Header的每个子元素都被¿UîCؓ一个Header块(Header BlockåQ‰ï¼ŒSOAP定义了几个知名的属性来指示应该ç”Þp°æ¥å¤„理Header块(roleåQ‰ä»¥åŠè¿™¿Uå¤„理是可选的˜q˜æ˜¯å¿…需的(mustUnderstandåQ‰ï¼Œä¸‹æ–‡ä¸­å¯¹˜q™ä¸¤ä¸ªå±žæ€§è¿›è¡Œäº†ä»‹ç»ã€‚目前,Header元素æ€ÀL˜¯Envelope的第一个子元素åQ›Body元素æ€ÀL˜¯Envelope的最后一个子元素åQŒä¹Ÿæ˜¯ä¾›æœ€¾lˆæ¶ˆæ¯æŽ¥æ”¶è€…ä‹É用的“有效负载”的容器。SOAP本èín没有定义内置的Header块,且只定义了一个有效负载,那就是用于报告错误的Fault元素ã€?/p>

    所有的Web服务消息都是SOAP消息åQŒå®ƒä»¬å……分利用了XML Infoset。消息有效负载和协议头都使用同一个模型,可以¼‹®ä¿åŸºç¡€æž¶æž„头Header和应用程序体的完整性。应用程序发送消息时可能会同时考虑Headerçš„å†…å®¹å’Œæ¶ˆæ¯ä¸­çš„æ•°æ®ã€‚äØ“XML数据模型开发的工具可以用于‹‚€æŸ¥å’Œæž„徏完整的消息。过去,˜q™äº›ç›Šå¤„在某些架构中是没有的åQŒå¦‚DCOM、CORBAå’ŒRMIåQŒå®ƒä»¬ä¹‹ä¸­çš„协议头是一些对应用½E‹åºä¸é€æ˜Žçš„基¼‹€æž¶æž„¾l†èŠ‚ã€?/p>

    SOAP消息是从发送者向接收者单向传送的。多个单向消息的¾l„åˆå¯ä»¥å½¢æˆè¾ƒäØ“å¤æ‚çš„æ¨¡å¼ã€‚ä¾‹å¦‚ï¼Œæ¯”è¾ƒå¸¸è§çš„æ¨¡å¼æ˜¯åŒæ­¥è¯äh±‚/响应消息寏V€‚发送或接收消息的ä“Q何一个èÊY件代理都被称ä¸ÞZ¸€ä¸ªSOAP节点åQˆSOAP NodeåQ‰ã€‚启动消息传输的节点¿UîCؓ原始发送节炏V€‚ä‹É用和处理消息的最后一个节点称为最¾lˆæŽ¥æ”¶èŠ‚ç‚V€‚在原始发送节点和最¾lˆæŽ¥æ”¶èŠ‚ç‚¹ä¹‹é—´å¤„ç†æ¶ˆæ¯çš„ä»ÖM¸€èŠ‚ç‚¹éƒ½å«åšä¸­ä»‹ï¼ˆIntermediaryåQ‰ã€‚中介用于模拟单个消息的分布式处理。消息经˜q‡çš„æ‰€æœ‰ä¸­ä»‹èŠ‚ç‚¹å’Œæœ€¾lˆæŽ¥æ”¶èŠ‚ç‚¹ç»Ÿ¿UîCؓ消息路径åQˆMessage Path.åQ‰ã€?/p>

    ä¸ÞZº†èƒ½å¤Ÿè¯†åˆ«æ¶ˆæ¯è·¯å¾„的各个部分,每个节点都担ä»ÖM¸€ä¸ªæˆ–多个角色。SOAP角色是一¿Uåˆ†¾cÀL¨¡å¼ï¼Œå®ƒå°†ä¸€ä¸ªåŸºäºŽURI的名¿UîC¸ŽæŸäº›æŠ½è±¡åŠŸèƒ½åQˆå¦‚¾~“存、验证、授权)兌™”在一赗÷€‚基¼‹€SOAP规范定义äº?个内¾|®è§’è‰ÔŒ¼šNextå’ŒUltimateReceiver。Next是一个通用角色åQŒå› ä¸ºé™¤äº†å‘送节点之外的每一个SOAP节点都属于Next角色。UltimateReceiver是消息èµ\径中¾lˆç«¯èŠ‚ç‚¹æ‰€æ‰®æ¼”çš„è§’è‰ŒÓ€‚它通常ž®±æ˜¯åº”用½E‹åºåQŒæˆ–在某些情况下是代表该应用½E‹åºæ‰§è¡Œä»ÕdŠ¡çš„åŸº¼‹€æž¶æž„ã€?/p>

    SOAP envelopeçš„Bodyæ€ÀL˜¯é’ˆå¯¹æœ€¾lˆæŽ¥æ”¶èŠ‚ç‚V€‚而SOAP header则可以针对中介,也可以针å¯ÒŽ(gu¨©)œ€¾lˆæŽ¥æ”¶èŠ‚ç‚V€‚äØ“äº†æä¾›ä¸€ä¸ªå®‰å…¨ä¸”ç‰ˆæœ¬å¯æŽ§çš„æ¶ˆæ¯å¤„ç†æ¨¡åž‹ï¼ŒSOAP定义äº?个属性,用于控制中介和最¾lˆæŽ¥æ”¶èŠ‚ç‚¹å¤„ç†æŸä¸€æŒ‡å®šHeader块的方式——role、relayå’ŒmustUnderstand。角色属性用于确定Header块所针对的节炏V€‚mustUnderstand属性用于指½Cºåœ¨Header块未被认出的情况下该节点是否可以忽略该Header块。带有mustUnderstand="true"标记的Header块叫做强制Header块(Mandatory Header BlockåQ‰ã€‚æ ‡è®îCØ“mustUnderstand="false"或没有mustUnderstand属性的Header块叫做可选Header块。relay属性指½Cø™¯¥èŠ‚ç‚¹æ˜¯å‘é€è¿˜æ˜¯æ”¾å¼ƒæœªè¢«è®¤å‡ºçš„å¯é€‰headerã€?/p>

    每一个SOAP节点都必™åÖM‹É用这3个属性来实现SOAP处理模型。以下步骤详¾l†è¯´æ˜Žäº†è¯¥æ¨¡åž‹ï¼š

  1. 使用角色属性(¾~ºçœè¯¥å±žæ€§è¡¨½CºHeader块针å¯ÒŽ(gu¨©)œ€¾lˆæŽ¥æ”¶èŠ‚ç‚¹ï¼‰¼‹®å®šž®†ç”¨äºŽå½“前SOAP节点的SOAP消息的所有Header块ã€?
  2. 验证当前SOAP节点是否能够使用SOAPmustUnderstand属性来处理步骤1中所¼‹®å®šçš„æ‰€æœ‰å¼ºåˆ¶Header块。如果有强制Header块不能被当前SOAP节点处理åQŒåˆ™å¿…须丢弃该消息,òq¶ç”Ÿæˆä¸€æ¡é†’目的错误消息ã€?
  3. 处理消息。可以忽略可选消息元素�
  4. 如果SOAP节点不是消息的最¾lˆæŽ¥æ”¶èŠ‚ç‚¹ï¼Œåˆ™æ­¥éª?中所¼‹®å®šçš„æ‰€æœ‰æ— æ³•分½E‹ä¼ é€çš„Header块都会被删除åQŒç„¶åŽæ¶ˆæ¯è¢«ä¼ é€åˆ°æ¶ˆæ¯è·¯å¾„中的下一个SOAP节点。下一个SOAP节点可以自由地将新的Header块插入到分程传送的消息中。其中的某些Header块可能是步骤1中所¼‹®å®šçš„Header块的副本ã€?

    SOAP处理模型旨在实现可扩展性和版本控制。mustUnderstand属性对新Header块的引入是中断变化还是非中断变化˜q›è¡ŒæŽ§åˆ¶ã€‚添加可选header块(如标è®îCØ“mustUnderstand="false"çš„headeråQ‰æ˜¯ä¸€¿Uéžä¸­æ–­å˜åŒ–åQŒå› ä¸ÞZ“Q何SOAP节点都可自由忽略它。添加强制header块(如标è®îCØ“mustUnderstand="true"çš„headeråQ‰æ˜¯ä¸€¿Uä¸­æ–­å˜åŒ–ï¼Œå› äØ“åªæœ‰çŸ¥æ™“Header块语法和语义的SOAP节点才能够处理SOAP消息。Role、relay以及mustUnderstand属性沿着消息路径传递这¿Uå¤„理模型ã€?/p>

消息交换模式

    SOAP所提供的消息传递灵‹zÀL€§ä‹ÉWeb服务能够以多¿Uæ¶ˆæ¯äº¤æ¢æ¨¡å¼è¿›è¡Œé€šä¿¡åQŒä»Žè€Œæ»¡­‘›_ˆ†å¸ƒå¼åº”用的需求。我们在该架构的核心构äšg中充分利用了其中一些模式,有几¿Uæ¨¡å¼å·²¾lè¢«è¯æ˜Žåœ¨åˆ†å¸ƒå¼¾pȝ»Ÿä¸­ç‰¹åˆ«æœ‰ç”¨ï¼Œæ¯”如使用˜qœç¨‹˜q‡ç¨‹è°ƒç”¨ž®×ƒ‹É同步è¯äh±‚/响应消息交换模式得到了普及。当消息传送潜伏时间失控时åQŒå°±éœ€è¦é‡‡ç”¨å¼‚步消息传递。当使用同步è¯äh±‚/响应模式æ—Óž¼Œæ˜‘Ö¼æ¶ˆæ¯ç›¸å…³æ€§åˆ™æˆäؓ必需ã€?/p>

    òq¿æ’­ä¼ è¾“åQˆBroadcast TransportåQ‰ä‹É一对多消息传输得到了普及。原始发送者将其消息强行发送给接收者的模式¿UîCؓ推模式(Push ModelåQ‰ã€‚å°½½Ž¡è¿™¿Uæ¨¡å¼åœ¨å±€åŸŸç½‘里很有效åQŒä½†åœ¨å¹¿åŸŸç½‘中则不太适用åQŒæŽ¥æ”¶è€…也无法调控消息‹¹ã€‚另一个有用的模式是以应用½E‹åºè¡¨è¾¾å¯ÒŽ(gu¨©)Ÿäº›ç‰¹å®šæ¶ˆæ¯ç±»åˆ«çš„å…´è¶£çš„èƒ½åŠ›äØ“åŸºç¡€çš„ï¼Œå®ƒä‹É发布/订阅模式大行光™“。通过昑ּè®¢é˜…消息源(或主题)åQŒåº”用程序可以更好地控制相关信息‹¹ã€‚接收者从消息源显式请求消息时使用拉模式(Pull ModelåQ‰ã€‚在˜q™ç§æ¨¡å¼ä¸‹ï¼Œæ¶ˆæ¯‹¹æ˜¯ç”±æŽ¥æ”¶è€…驱动的。拉模式也可以与发布/订阅模式¾l“合使用。这非常适合于接收者可能要与消息源间歇地断开˜qžæŽ¥çš„æƒ…å†üc€?/p>

传输的独立�/h2>

    æ ÒŽ(gu¨©)®SOAP的定义,它与所使用的底层消息传递机制无兟뀂它支持很多可用的消息交换传输机åˆÓž¼Œä¹Ÿæ”¯æŒåŒæ­¥å’Œå¼‚步消息传送与处理。既需要多¿Uä¼ è¾“又需要异步消息传递的¾pȝ»Ÿçš„一个例子是在基于陆地高速网¾lœå¹²¾U¿çš„Web服务与由¿UÕdŠ¨ç”µè¯æ‰˜ç®¡çš„é—´æ­‡è¿žæŽ¥çš„Web服务之间˜q›è¡Œé€šä¿¡çš„ç³»¾lŸã€‚è¿™æ ïLš„¾pȝ»Ÿè¦æ±‚一条消息经哪种传输¾pȝ»Ÿä¼ è¾“要以该消息在哪个¾|‘æ®µå†…ç§»åŠ¨äØ“ä¾æ®ã€‚è¿™æ ïLš„¾pȝ»Ÿ˜q˜æœ‰ä¸€ä¸ªå…¸åž‹ç‰¹ç‚¹ï¼ŒåÏx¶ˆæ¯ä¼ é€æ½œä¼æ—¶é—´æ— æ³•ç²¾¼‹®ç¡®å®šã€‚Web服务开发äh员不应力囄¡¡®å®šæˆ–界定消息传送潜伏时é—ß_¼Œè€Œåº”在假定异步消息传递已辑ֈ°æœ€å¤§æ•ˆèƒ½çš„前提下构建系¾lŸã€‚与使用˜qœç¨‹˜q‡ç¨‹è°ƒç”¨æ—¶çš„æƒ…况不同åQŒå¼‚步消息传递允许发送者在每一消息传输之后¾l§ç®‹˜q›è¡Œå¤„理åQŒè€Œä¸å¿…被˜q«é˜»å¡žåƈ½{‰å¾…响应。当ç„Óž¼ŒåŒæ­¥è¯äh±‚--响应模式也可以构建在异步消息传递的基础之上ã€?/p>

    既然Web服务协议完全独立于底层传输之外,适当机制的选择可能ž®Þp¦å»¶è¿Ÿåˆ°è¿è¡Œæ—¶ã€‚è¿™ž®×ƒØ“Web服务应用½E‹åºæä¾›äº†åœ¨å‘送消息时¼‹®å®šç›¸åº”传输机制的灵‹zÀL€§ã€‚此外,底层传输机制可能会随着消息在节点之间的发送而变化,相应圎ͼŒé’ˆå¯¹æ¯ä¸€¾|‘段而选择的传输机制也会随需发生变化ã€?/p>

    ž®½ç®¡å­˜åœ¨ç€˜q™ç§ä¸€èˆ¬çš„传输的独立性,大多数第一代Web服务都ä‹É用HTTP来进行通信åQŒå› ä¸ø™¿™æ˜¯SOAP规范内所包含的一¿Uä¸»è¦ç»‘定协议。HTTP以TCPä½œäØ“å…¶åº•å±‚ä¼ è¾“åè®®ã€‚ä½†æ˜¯ï¼ŒTCP在设计时引入了不必要的处理开销。有些应用协议模式与用户数据报协议(即UDPåQ?User Datagram ProtocolåQ‰çš„语义学比较匹配,˜q™äº›æ¨¡å¼å¯¹äºŽå—设备及其他资源¾U¦æŸçš„ç³»¾lŸç‰¹åˆ«æœ‰ç”¨ã€‚UDP不像TCP那样å…ähœ‰ä¼ è¾“保证åQ›å®ƒæä¾›æœ€å¤§é™åº¦çš„æ•°æ®æŠ¥æ¶ˆæ¯ä¼ é€’。与TCP相比åQŒå®ƒéœ€è¦çš„实施资源较少。此外,UDP˜q˜æä¾›äº†å¤šèµ\òq¿æ’­åŠŸèƒ½åQˆMulti-cast CapabilitiyåQ‰ï¼Œä½¿ä¸€ä¸ªå‘送者可以将消息同时发送给多个接收者ã€?/p>

å¯Õd€

    对于要在˜q™ç§å¤šä¼ è¾“情况下发送和å¯Õd€çš„æ¶ˆæ¯æ¥è¯ß_¼Œè¦è®©å…³é”®çš„æ¶ˆæ¯ä¼ é€’å±žæ€§äØ“å¤šä¸ªä¼ è¾“æ‰€æºå¸¦åQŒå°±éœ€è¦ä¸€¿Uå…±ç”¨æœºåˆ¶ã€‚äØ“æ­¤ï¼ŒWS-Addressing规范定义äº?¾l„SOAP Header块:

  • Action Header块用于说明消息的预期处理。该Header块包含一个URIåQŒæœ€¾lˆæŽ¥æ”¶è€…通常用它来分‹z¾è¦˜q›è¡Œå¤„理的消息ã€?
  • MessageIDå’ŒRelatesTo Header块用于识别和兌™”消息。MessageIDå’ŒRelatesTo header使用½Ž€å•çš„URI来唯一地识别消息——这些URI通常都是瞬态的UUIDã€?
  • To/ReplyTo/FaultTo Header块用于识别要处理消息及其回复的代理。这些Header依赖于WS-Addressing所定义的称为“端点引用(Endpoint ReferenceåQ‰â€çš„¾l“æž„åQŒå®ƒ?y¨­u)®†ä¸Žå¯¹SOAP消息˜q›è¡Œæ­£ç¡®å¯Õd€æ‰€éœ€çš„信息捆¾l‘在一赗÷€?

    端点引用是WS-Addressingçš„æœ€é‡è¦çš„æ–¹é¢ï¼Œå› äØ“ä¸Žä»…ä½¿ç”¨URI相比åQŒå®ƒä»¬å¯ä¸ºæ›´¾l†ç²’度的å¯Õd€æä¾›æ”¯æŒã€‚它们广泛用于整个Web服务架构。端点引用包å?条关键的信息åQšåŸºåœ°å€ã€å¯é€‰çš„引用属性集和引用参数。基地址是一个URIåQŒç”¨äºŽè¯†åˆ«ç«¯ç‚¹ï¼Œå‡ºçŽ°åœ¨æŒ‡å‘è¯¥ç«¯ç‚¹çš„æ¯ä¸€SOAP消息中的To Headerå—ä¸­ã€‚å¼•ç”¨å±žæ€§å’Œå¼•ç”¨å‚æ•°æ˜¯ç”¨äºŽäØ“è¯¥æ¶ˆæ¯æä¾›é™„åŠ å‘é€æˆ–å¤„ç†ä¿¡æ¯ä»¥è¡¥å……åŸºåœ°å€çš„ä“Q意XML元素的集合,它们以文字Header元素来表½Cºã€‚当使用端点引用来构建端ç‚ÒŽ(gu¨©)¶ˆæ¯æ—¶åQŒå‘送者负责提供作为Header块的所有引用属性和引用参数ã€?/p>

    引用属性和引用参数之间的区别在于它们如何关联服务元数据。Web服务½{–略和契¾U¦ä»…åŸÞZºŽå…¶åŸºåœ°å€å’Œå¼•用属性。通常åQŒåŸºåœ°å€å’Œå¼•用属性用于识别某一¾l™å®šçš„已部çÖv服务åQŒå¼•用参数用于识别该服务所½Ž¡ç†çš„特定资源ã€?/p>

    引用属性和参数是那些预期只被最¾lˆæŽ¥æ”¶è€…处理的½Ž€å•的不透明XML元素。它们有助于¼‹®ä¿å¯ç”¨äºŽåˆ†‹z¾ã€å‘送、烦引或其他发送端处理‹zÕdŠ¨çš„ä¿¡æ¯è¢«åŒ…å«åœ¨ç»™å®šçš„æ¶ˆæ¯ä¸­ã€‚å°½½Ž¡ä¸­ä»‹é¢„期不会对该信息进行处理,但某些中介(如防火墙或网å…ÏxœåŠ¡ç¨‹åºï¼‰å´æœ‰å¯èƒ½ä½¿ç”¨æŸäº›å¼•ç”¨å±žæ€§æˆ–å‚æ•°æ¥è¿›è¡Œæ¶ˆæ¯å‘é€ã€æ¶ˆæ¯å¤„ç†ã€‚å¼•ç”¨å±žæ€§æœ‰å¾ˆå¤šç”¨é€”ã€‚æœåŠ¡ç±»åQˆClasses of ServiceåQ‰å’Œä¸“用实体标识½W¦ï¼ˆPrivate Entity IdentifieråQ‰å°±æ˜¯ä¸¤ä¸ªä¾‹å­ã€‚在服务½{‰çñ”例子中,引用属性可以用于区分针å¯ÒŽ(gu¨©) ‡å‡†å®¢æˆïLš„Web服务和针对“黄金”客æˆïLš„Web服务åQŒåŽè€…提供了更高的服务质量和增强功能——可能是通过附加的操作或附加的绑定——在逻辑上åŞ成两个不同的端点。这些属性只在一个会话中讄¡½®ä¸€‹Æ¡ï¼Œç„¶åŽä¾¿åœ¨äº¤äº’的其余所有部分重复ä‹É用。引用属性另一个用途的例子是以一¿Uå¯¹¾pȝ»Ÿä¸å…¬å¼€å‘送消息的方式来识别客æˆïLš„æœºåˆ¶ã€‚这两种引用属性的¾l„合可以高效地将消息发送给一¾l„适当的服务器åQŒåƈ高效地确定与某一特定用户有关的应用状态。这些例子还展示了引用服务实例的数据和引用用户实例的数据如何用引用属性来表示ã€?/p>

    需要特别指出的是,引用属性还有助于对å…׃ín一个共同的URL和作用域的WSDL实体集合˜q›è¡Œå¯Õd€ã€‚WSDL是将Web服务描述为操作消息的一¾l„端点的XML格式åQŒå®ƒé¦–先抽象地指定其实体åQŒç„¶åŽå°†å…¶å…·ä½“地¾l‘定到特定实例。具体而言åQŒæ¶ˆæ¯å’Œæ“ä½œ¾læŠ½è±¡å®šä¹‰ä¹‹åŽï¼Œè¢«ç»‘定到带有¾|‘络传输和消息格式信息的一个端炏V€‚因此,从WSDL的角度来看,当针对不同的具体实体åQˆå¦‚输入或输出消息、portType¾l‘定、端口或Web服务中ä‹É用一个共同URL的服务)æ—Óž¼Œå¯¹åº”端点引用的引用属性应该不同ã€?/p>

    使用引用参数的两个例子是基础架构和应用水òqŸë€‚引用参数的基础架构例子可以是发送给某一事务处理监视器的事务/征募IDåQˆEnlistment IDåQ‰ã€‚在一个购书的场景中,书的ISBN号可能就是一个引用参数应用水òq³ä¾‹å­ã€?/p>

元数据(MetadataåQ?/h2>

    所有的Web服务交互都是通过交换SOAPæ¶ˆæ¯æ¥è¿›è¡Œçš„ã€‚äØ“äº†æä¾›ä¸€ä¸ªå¥å£®çš„å¼€å‘å’Œæ“ä½œçŽ¯å¢ƒåQŒæœåŠ¡æ˜¯ç”¨æœºå™¨å¯è¯Èš„元数据来描述的——元数据支持互操作性。Web服务元数据可以服务于若干个意图。它用于描述Web服务支持的消息互换格式和某一服务有效的消息交换模式。元数据˜q˜ç”¨äºŽæ˜q°æœåŠ¡çš„åŠŸèƒ½å’Œéœ€æ±‚ã€‚å…ƒæ•°æ®çš„æœ€åŽä¸€¿UåŞ式叫做“服务策略(Policy of Services.åQ‰â€ã€‚消息互换格式和消息交换模式用WSDL来表½Cºï¼Œ½{–略使用WS-Policy来表½Cºï¼Œå¥‘约åQˆContractåQ‰ç”¨ä¸Šè¿°ä¸‰ç§å…ƒæ•°æ®æ¥è¡¨ç¤ºã€‚契¾U¦æ˜¯ž®†åº”用程序与它们所依赖的服务的内部实现¾l†èŠ‚éš”ç¦»å¼€æ¥çš„æŠ½è±¡ã€?/p>

    Web服务描述语言åQŒå³WSDL——Web Service Description LanguageåQŒå®ƒæ˜¯è¢«òq¿æ³›ç”¨äºŽæè¿°Web服务基本特征的第一¿Uæ‰‹ŒDüc€‚用WSDLæè¿°çš„æ¶ˆæ¯è¢«å½’åÆˆä¸ºå®šä¹‰åŸºæœ¬æ¶ˆæ¯æ¨¡å¼çš„è‹¥å¹²æ“ä½œã€‚è¿™äº›æ“ä½œè¢«å½’åÆˆä¸ºç§°ä½œç«¯å£çš„è‹¥å¹²ä¸ªæŽ¥å£ï¼Œå®ƒä»¬è¯¦ç»†è¯´æ˜Žäº†æŠ½è±¡çš„æœåŠ¡å¥‘çº¦ã€‚ç«¯å£å’Œ¾l‘定则用于将portTypes与具体传输和physical 部çÖv信息兌™”在一赗÷€‚WSDL描述是自动识别目标服务的所有特征和启用软äšg开发工å…ïLš„½W¬ä¸€æ­¥ã€‚WSDL指定è¯äh±‚消息必须包含什么以及响应消息在使用无歧义符åäh—¶çš„æ˜¾½CÞZ¼šæ˜¯æ€Žæ ·ã€‚WSDLæ–‡äšg用于描述消息格式的符åäh˜¯åŸÞZºŽXML模式的。这意味着它既是编½E‹è¯­­a€ä¸­ç«‹çš„又是基于标准的åQŒè¿™ä½¿å¾—它很适合于描˜q°å¯é€šè¿‡å¤šç§òq›_°å’Œç¼–½E‹è¯­­a€æ¥è®¿é—®çš„æœåŠ¡æŽ¥å£ã€‚é™¤äº†æ˜q°æ¶ˆæ¯å†…容以外,WSDL˜q˜å¯ä»¥å®šä¹‰æœåŠ¡åœ¨ä½•å¤„æ˜¯å¯ç”¨çš„åQŒä»¥åŠå“ªäº›é€šä¿¡åè®®è¢«ç”¨äºŽä¸Žè¯¥æœåŠ¡äº¤è°ˆã€‚è¿™æ„å‘³ç€WSDLæ–‡äšg可以指定用于¾~–写与某一Web服务˜q›è¡Œäº¤äº’的程序的基本元素。有几种工具可用于读取WSDLæ–‡äšgåQŒä»¥åŠäØ“¾~–制句法正确的Web服务消息生成所需代码ã€?/p>

    ž®½ç®¡WSDL是一个不错的èµïL‚¹åQŒä½†å®ƒåƈ不èƒö以描˜q°Web服务的方斚w¢é¢ï¼ŒWSDL只能表示较少的一¾l„属性。Web服务所必需的更详细信息包括åQ?/p>

  • 操作特征åQšæ”¯æŒSOAP 1.2ã€?
  • 使用特征åQšä»…在早9点和下午5点之间可用ã€?
  • 安全特征åQšè¦è®‰K—®è¯¥æœåŠ¡å¿…éœ€ä½¿ç”¨Kerberos¼œ¨ã€?

    ½W¬ä¸€ä»£Web服务必须使用专有协议来交换带外(Out of BandåQ‰çš„元数据,˜q™ä¸€é—®é¢˜å¯ä»¥ä½¿ç”¨WS-Policy来解冟뀂WS-Policy提供了一¿Ué€šç”¨æ¨¡åž‹å’Œè¯­æ³•来描述和传达Web服务½{–略。它指定了一个概念基集,它可以被其他Web服务规范使用和扩展,以描˜q°æ›´ä¸ºå¹¿æ³›çš„æœåŠ¡éœ€æ±‚å’ŒåŠŸèƒ½ã€‚WS-Policy引入了一个简单的可扩展语法来表示½{–略断言åQˆPolicy AssertionåQ‰ï¼Œä»¥åŠä¸€ä¸ªå¤„理模型来解释它们。断­a€å¯ä»¥åˆåƈ到逻辑选项中ã€?/p>

    ½{–略断言使编½E‹äh员要么在开发时、要么在˜qè¡Œæ—¶å‘服务信息中添加适当的元数据。开发时½{–略的例子包括消息大ž®çš„æœ€å¤§å…è®¸å€¼æˆ–所支持规范的确切版本,˜qè¡Œæ—¶ç­–略的例子包括宕机时的必备服务或某一¾l™å®šçš„管理过½E‹ï¼ˆå®šæœŸçš„硬件维护)期间Web服务的不可用性。可以对单个的策略断­a€˜q›è¡Œåˆ†ç»„åQŒä»¥å½¢æˆ½{–略选项åQˆPolicy AlternativeåQ‰ã€‚策略是½{–ç•¥é€‰é¡¹çš„é›†åˆã€‚äØ“äº†ä¾¿äºŽè¿›è¡Œäº’æ“ä½œåQŒç­–略是æ ÒŽ(gu¨©)®å…¶XML Infosetè¡¨ç¤ºå½¢å¼æ¥å®šä¹‰çš„ã€‚äØ“äº†åœ¨ä¿æŒäº’æ“ä½œæ€§çš„åŒæ—¶å‡å°½{–略文档的大ž®ï¼Œåˆå®šä¹‰äº†½{–略的紧凑åŞ式ã€?/p>

    ½{–略用于传达两个Web服务端点之间的交互条件。满­‘³ç­–略中的断­a€é€šå¸¸ä¼šå¼•å‘åæ˜ è¿™äº›æ¡ä»¶çš„è¡ŒäØ“ã€‚å› æ­¤ï¼Œ½{–略断言评估是识别兼容行为的中心。当且仅当请求者满­‘Œ™¦æ±‚,åÏxä¾›äº†˜q™ä¸€åŠŸèƒ½ã€ä¸Žè¯¥æ–­­a€ç›¸ç¬¦æ—Óž¼Œè¯äh±‚者才支持½{–略断言——策略的构造块。一般而言åQŒè¿™¿Uå†³å®šè¦ä½¿ç”¨ç‰¹å®šé¢†åŸŸçš„知识来做出。请求者支持策略选项的条件是当且仅当è¯äh±‚者支持选项中的所有断­a€æ—Óž¼Œ˜q™ç§å†›_®šæ˜¯ä‹É用策略断­a€çš„ç»“æžœæœºæ¢°æ€§åœ°åšå‡ºçš„ã€‚åŒæ øP¼Œå½“且仅当è¯äh±‚者至ž®‘支持策略中的一个选项æ—Óž¼Œè¯äh±‚者才支持½{–略。一旦策略选项¾lè¿‡è¯„ä¼°åQŒè¯¥å†›_®šä¹Ÿæ˜¯æœºæ¢°æ€§åœ°åšå‡ºçš„。请注意åQŒè™½ç„¶ç­–略选项是互斥的åQŒä½†ä¸€èˆ¬æ¥è¯´è¦¼‹®å®šå¤šä¸ªé€‰é¡¹æ˜¯å¦å¯ä»¥åŒæ—¶å¾—到支持也是不太可能的ã€?/p>

    ä¸ÞZº†ä»¥äº’操作的åŞ式传辄¡­–略,½{–略表达式(Policy ExpressionåQ‰é‡‡ç”¨ç­–略的某种XML Infoset表示形式。普通åŞ式的½{–略表达式是最½Ž€å•çš„InfosetåQ›åŒæ øP¼Œå¯é€‰çš„Infoset允许通过大量构造来½Ž€‹zåœ°è¡¨è¾¾½{–略。策略表辑ּæ˜¯ç­–略的基础构造块。有两个˜qç®—½W¦ç”¨äºŽè¡¨è¾¾æ–­­a€åQšAllå’ŒExactlyOne。All˜qç®—½W¦è¡¨½Cºç­–略选项集中的所有断­a€éƒ½å¿…™å»é€‚用于要满èƒö的策略断­a€ã€‚ExactlyOne˜qç®—½W¦è¡¨½Cºç­–略选项集中只有一条断­a€å¿…须适用于要满èƒö的策略断­a€ã€?/p>

    ½{–略层位于WSDL描述之上åQŒåƈ对它˜q›è¡Œäº†æ‰©å……。策略与Web服务元数据(如WSDL定义或UDDI实体åQ‰çš„å…Œ™”是通过使用WS-PolicyAttachment来实现的。策略可以作为其定义所固有的一部分或独立地与资源关联在一赗÷€‚机制就是针对这些不同目的而定义的。需要特别指出的是,½{–略也可以与单个的SOAP消息一起ä‹Éç”¨ã€‚å¦‚æžœäØ“æŸä¸€å®žä½“åˆ¶ä½œäº†å¤šä¸ªç­–ç•¥é™„ä»Óž¼Œå®ƒä»¬ä¼šå…±åŒç¡®å®šè¯¥å®žä½“的有效策略(Effective PolicyåQ‰ã€‚在WSDL层次¾l“构的不同层‹Æ¡ä¸Šé€‰ç”¨½{–略时一定要ž®å¿ƒåQŒå› ä¸ºå±‚‹Æ¡ç»“构每一层次的最¾lˆç»“æžœå°±æ˜¯ä¸€ä¸ªæœ‰æ•ˆç­–ç•¥ã€‚ä½œä¸ø™‡ªæˆ‘描˜q°å’Œäººæ‰€èƒ½ç†è§£çš„æ˜Žç¡®æ€§çš„一般规则,在策略断­a€æ‰€é€‚用的层‹Æ¡ç»“构的每一层次上详¾l†åœ°é‡å¤è¯¥ç­–略断­a€åQŒæ¯”½Ž€å•地依赖于计½Ž—有效策略的机制更可取。在一个WSDL文档中,与部¾|²ç«¯ç‚¹çš„æ¶ˆæ¯äº¤æ¢å¯ä»¥åŒæ—¶åŒ…含所æœ?¾cÖM¸»é¢˜çš„æœ‰æ•ˆ½{–略。WS-Policyå’ŒWS-PolicyAttachment相结合可以提高应用程序来发现和推出其他服务所支持的策略的能力。添加策略的灉|´»æ€§æ˜¯å¯ÒŽ(gu¨©)˜q°æ¶ˆæ¯äº¤äº’çš„WSDL信息的一个重要补充ã€?/p>

    WSDLå’ŒWS-Policy都定义了元数据格式,但都没指定某一¾l™å®šæœåŠ¡èŽ·å¾—æˆ–è®¿é—®å…ƒæ•°æ®çš„æœºåˆ¶ã€‚ä¸€èˆ¬æ¥è¯ß_¼ŒæœåŠ¡å…ƒæ•°æ®å¯ä»¥é€šè¿‡ä½¿ç”¨è®¸å¤šæ–ÒŽ(gu¨©)³•æ¥èŽ·å–ã€‚äØ“äº†æ”¯æŒæœåŠ¡çš„è‡ªæˆ‘æè¿°åQŒWeb服务架构在WS-MetadataExchange中定义了åŸÞZºŽSOAP的元数据讉K—®åè®®ã€‚GetMetadata操作用于‹‚€ç´¢åœ¨è¯äh±‚的端点引用中扑ֈ°çš„元数据。Get操作¾cÖM¼¼åQŒä½†ç”¨äºŽ‹‚€ç´¢ä¸åŒçš„元数据:在元数据部分引用åQŒåƈ要在存储它的端点引用中检索的元数据ã€?/p>

    使用WS-MEX来交换的元数据可以描˜qîCؓ资源。资源即可由某一端点引用å¯Õd€çš„ä“Q何实体,òq¶ä¸”在该端点引用中,该实体可以提供一¿Uå…¶è‡ªèínçš„XML表示形式。资源构成了构徏Web服务中的状态管理所需的基¼‹€ã€?/p>

什么是互操作性概要(Interoperability ProfileåQ?br />    概要åQˆProfileåQ‰æ˜¯ä¸€¾l„指导原则,主要针对于核心协议以及Web服务规范的ä‹É用。这些指导原则对于规范的通用设计来说是必需的。在某些情况下,开发äh员需要额外的帮助来确定ä‹É用哪些Web服务ç‰ÒŽ(gu¨©)€§æ¥æ»¡èƒö某一特定需求。互操作性概要还用于解决Web服务规范不够明确的领域中的含¾pŠæ€§é—®é¢˜ï¼Œä»¥ç¡®ä¿æ‰€æœ‰å®žæ–½éƒ½ä»¥ç›¸åŒçš„æ–¹å¼æ¥å¤„理SOAP消息ã€?/p>

WS-I基本概要
½W¬ä¸€ä¸ªWeb服务概要是由Web服务-互操作性组¾l‡ï¼ˆWS-IåQŒWeb Services-Interoperability OrganizationåQ‰å‘布的。WS-I已经完成了其½W¬ä¸€ä¸ªæ¦‚要,òq¶ç®€å•地¿UîCؓ基本概要1.0。该概要主要åŸÞZºŽSOAP1.1å’ŒWSDL 1.0的互操作使用来提供指导原则ã€?/p>

安全�/h1>

    本节介绍Web服务架构中用于提供某一¾pȝ»Ÿå†…部的消息完整性、èín份验证和机密性、安全性ä×o牌交换、消息会话安全性、安全策略表½Cºå’ŒæœåŠ¡è”ç›Ÿå®‰å…¨æ€§çš„è§„èŒƒã€‚æä¾›è¿™äº›ç‰¹æ€§çš„è§„èŒƒæ˜¯WS-Security、WS-Trust、WS-SecureConversation、WS-SecurityPolicyå’ŒWS-Federationã€?/p>

    安全性是计算机系¾lŸçš„一个基本方面,ž®¤å…¶æ˜¯é‚£äº›ç”±Web服务¾l„成的系¾lŸã€‚安全性必™åÀL˜¯å¥å£®è€Œæœ‰æ•ˆçš„。因为系¾lŸåªå¯ÒŽ(gu¨©)¶ˆæ¯æ ¼å¼å’Œåˆæ³•的消息交换作出硬件假设,因此安全性必™åÕdŸºäºŽä¸€è‡´é€šè¿‡çš„æ˜Ž¼‹®æœºåˆ¶å’Œå‡è®¾ã€‚安全基¼‹€æž¶æž„˜q˜åº”该具有èƒö够的灉|´»æ€§ï¼Œä»¥æ”¯æŒä¸åŒç»„¾l‡æ‰€éœ€çš„不同安全策略ã€?/p>

    当安全传输可用于通信Web服务åQŒå¦‚安全套接层(SSLåQ‰å’Œä¼ è¾“层安全性(TLSåQ‰ä¹‹é—´æ—¶åQŒæž„建安全性解å†Ïx–¹æ¡ˆå°±å¾—到了简化。有了安全传输,˜q™äº›æœåŠ¡ž®×ƒ¸éœ€è¦å‚与单个消息的完整性和机密性的¾l´æŠ¤åQ›å®ƒä»¬å¯ä»¥ä¾èµ–于底层传输。不˜q‡ï¼ŒçŽ°æœ‰çš„ä¼ è¾“çñ”安全性是一个仅限于点对ç‚ÒŽ(gu¨©)¶ˆæ¯ä¼ é€’的解决æ–ÒŽ(gu¨©)¡ˆã€‚如果在使用安全传输时存在中介,则最初发送者和最¾lˆæŽ¥æ”¶è€…éœ€è¦ç›¸ä¿¡è¿™äº›ä¸­ä»‹èƒ½å¤Ÿå¸®åŠ©æä¾›ç«¯åˆ°ç«¯çš„å®‰å…¨æ€§ï¼Œå› äØ“æ¯ä¸ª¾|‘段都是安全的。除了要明确åœîC¿¡ä»ÀL‰€æœ‰ä¸­ä»‹å¤–åQŒè¿˜å¿…须考虑到其他风险,如消息的本地存储和中介受到损害的可能性ã€?/p>

    ä¸ÞZº†æœ€å¤§é™åº¦åœ°æ‰©å¤§Web服务的作用范å›ß_¼Œå½“通信端点不相信中介时åQŒå¿…™åÀLä¾›ç«¯åˆ°ç«¯çš„安全性,那就需要更高çñ”别的安全协议。作为另一¿Ué€‰æ‹©åQŒç«¯åˆ°ç«¯æ¶ˆæ¯å®‰å…¨æ€§æ¯”点对点传输çñ”å®‰å…¨æ€§å…·æœ‰æ›´ä¸°å¯Œçš„å†…æ¶µï¼Œå› äØ“å®ƒæ”¯æŒWeb服务所需的基于SOAP的松耦合、联合、多传输和可扩展环境。这¿UåŠŸèƒ½å¼ºå¤§è€Œåˆç‰|´»çš„基¼‹€æž¶æž„可以通过现有技术和Web服务协议的组合来开发,同时˜q˜å¯ä»¥ç¼“解与点对ç‚ÒŽ(gu¨©)¶ˆæ¯ä¼ é€’相兌™”的许多安全风险ã€?/p>

    ž®½ç®¡Web服务的安全需求很复杂åQŒä½†äºÞZ»¬˜q˜æ²¡æœ‰å‘明新的安全机制来满èƒöåŸÞZºŽSOAP的消息传递的需要。现有的分布式系¾lŸå®‰å…¨æ€§æ–¹æ³•,如Kerberos¼œ¨ã€å…¬é’¥åŠ å¯†æŠ€æœ¯ã€X.509证书½{‰å·²¾lå¤Ÿç”¨äº†ã€‚只有应用现有的SOAP安全æ–ÒŽ(gu¨©)³•æ—Óž¼Œæ–°æœºåˆ¶æ‰æ˜¯å¿…需的。这些新安全协议的设计充分考虑了可扩展性,以便ž®†æ¥èƒ½å¤ŸåŠ å…¥æ–°çš„æ–ÒŽ(gu¨©)³•。一个主要的设计目标是要提供自我描述安全性属性(为包括SOAP在内的Web服务架构而设计)机制ã€?/p>

    Web服务安全性的基础是输入消息要证实一¾l„关于发送者、服务或其他资源的断­a€˜q™ä¸€éœ€æ±‚ã€‚æˆ‘ä»¬ç§°ä¹‹äØ“æ–­è¨€æˆ–å®‰å…¨æ€§æ–­­a€ã€‚典型的安全性断­a€åŒ…括íw«ä†¾ã€å±žæ€§ã€å…³é”®èƒ¦äº§ã€æƒé™æˆ–功能。这些断­a€æ˜¯ç”¨åŒ…裹在XML中的二进制安全性ä×o牌编码的。在传统的安全性术语中åQŒè¿™äº›å®‰å…¨æ€§ä×o牌表½CºåŠŸèƒ½å’Œè®‰K—®æŽ§åˆ¶çš„æØœåˆã€‚很多方法都被用于创建安全性ä×o牌。Web服务可以从本åœîC¿¡æ¯æž„建定制的安全性ä×o牌。反˜q‡æ¥åQŒå®‰å…¨æ€§ä×o牌也可以从X.509认证机构或Kerberos域控制器½{‰ä¸“ä¸šæœåŠ¡æ£€ç´¢ã€‚äØ“äº†å®žçŽ°æœåŠ¡ä¹‹é—´çš„é€šä¿¡è‡ªåŠ¨åŒ–ï¼Œéœ€è¦ä¸€ä¸ªè¡¨è¾‘Ö®‰å…¨éœ€æ±‚çš„æ–ÒŽ(gu¨©)³•ã€?/p>

    服务可以使用WS-SecurityPolicy中所指定的策略断­a€æ¥è¡¨è¾‘Ö…¶å®‰å…¨éœ€æ±‚。通过‹‚€ç´¢è¿™äº›ç­–略断­a€åQŒåº”用程序可以构建符合目标服务需求的消息。断­a€ã€å®‰å…¨æ€§ä×o牌和½{–略所提供的这¾l„特性以及从Web服务‹‚€ç´¢å®ƒä»¬çš„能力非常强大。这¿Uæ™®é€šçš„Web服务安全模式支持一些更具体的安全模式,如基于èín份的授权、访问控制列表和åŸÞZºŽåŠŸèƒ½çš„æŽˆæƒã€‚å®ƒå…è®¸ä½¿ç”¨çŽ°æœ‰æŠ€æœ¯ï¼Œå¦‚X.509 公钥证书、基于XMLçš„ä×o牌、Kerberoså…׃ín的秘密票和密码摘要。这¿Uæ™®é€šæ¨¡åž‹å¯¹äºŽæž„å»ÞZ‹É用更复杂的方法来˜q›è¡Œæ›´é«˜¾U§åˆ«çš„密钥交换、èín份验证、基于策略的讉K—®æŽ§åˆ¶ã€å®¡æ ¸å’Œå¤„理复杂的信ä»Õd…³¾pȝš„¾pȝ»Ÿå·²ç»­‘›_¤Ÿã€‚也可以使用代理和中¾l§æœåŠ¡ã€‚ä¾‹å¦‚ï¼Œå¯ä»¥æž„å¾ä¸­ç‘ô服务来加å¼ÞZ½äºŽä¿¡ä»»è¾¹ç•Œçš„安全½{–ç•¥åQ›å‡ºç•Œçš„æ¶ˆæ¯è¢«åŠ å¯†ï¼Œè€Œç•Œå†…çš„æ¶ˆæ¯ä¸åŠ å¯†ã€‚ä»¥å‰çš„è§£å†³æ–ÒŽ(gu¨©)¡ˆæ²¡æœ‰æä¾›˜q™ç§ç‰|´»æ€§å’Œå®Œå–„½E‹åº¦ã€‚附录C中所描述的常见安全攻å‡ÕdŒ…含了¾pȝ»Ÿå¨èƒçš„基本分¾c»ï¼Œè€Œè¿™äº›ç³»¾lŸå¨èƒæ˜¯åœ¨é€‰æ‹©Web服务安全ç‰ÒŽ(gu¨©)€§æ—¶åº”认真加以考虑的ã€?/p>

    本节的余下部分将探讨Web服务安全模式的应用。两个重要主题是安全通信和安全应用。没有假定安全的消息传输åQŒè¿™ä¹Ÿä¸æ˜¯å®‰å…¨çš„Web服务所必需的ã€?/p>

消息完整性和机密�/h2>

    消息¾U§å®‰å…¨æ€§æ˜¯ç«¯åˆ°ç«¯å®‰å…¨æ€§çš„关键构造块。ä‹É用消息çñ”安全性时åQŒæ— éœ€ä¼ è¾“¾U§å®‰å…¨æ€§ã€‚对消息¾U§å®‰å…¨æ€§çš„要求是消息完整性、消息èín份验证和机密性。消息完整性确保消息不能在不知不觉中被更改。ä‹É用XMLSignature可确保消息的修改能够被察觉。消息èín份验证可识别发送消息的ä¸ÖM½“。如果ä‹É用了公钥加密åQŒå°±å¯ä»¥¼‹®å®šä¸ÖM½“的唯一íw«ä†¾ã€‚将公钥加密与经受信ä»ÀLºè®¤è¯çš„密钥一起ä‹É用可以实现这¿Uèín份验证。不˜q‡ï¼Œå¦‚果使用了对¿U°å¯†é’¥åŠ å¯†ï¼Œæƒ…å†µž®×ƒ¸ä¸€æ ·äº†â€”—只有知道共享密钥的ä¸ÖM½“才能被识别。消息机密性可¼‹®ä¿åœ¨ä¼ è¾“期间未¾læŽˆæƒçš„½W¬ä¸‰æ–¹ä¸èƒ½é˜…è¯ÀL¶ˆæ¯ã€‚SOAP消息是通过使用XMLEncryption [XMLENC]和安全性ä×o牌来保证机密性的ã€?/p>

    完整性、èín份验证和机密性机制将初始消息åQˆæˆ–该消息的某些部分åQ‰ä½œä¸ø™¾“入,ž®†ç”Ÿæˆçš„æ•°æ®åQˆå¦‚æ ¡éªŒå’Œï¼‰ä½œäØ“è¾“å‡ºã€‚ä¾‹å¦‚ï¼Œåœ¨æŸ¿Uç®€å•情况下åQŒXMLå…ƒç´ çš„ç­¾åå¯èƒ½ä¼šä½œäØ“XML元素所有字½W¦çš„æ•£åˆ—的非对称加密来实现。然后该加密散列可以存储在该消息中,òq¶åœ¨è¯¥æ¶ˆæ¯ä¸­ä¼ é€ã€‚可以将XML文档看作字符丌Ӏ‚就像XML½{‘֐ä¸€æ øP¼Œé€å­—½W¦åœ°æ¯”è¾ƒä¹Ÿæ˜¯éžå¸¸é‡è¦çš„å®‰å…¨æ€§æ“ä½œã€‚ä¸€å­—ä¹‹å·®ä¼šå¯ÆD‡´ä¸åŒçš„结果。串行化是用于表½Cºâ€œåœ¨¾UŽì€å¯¹è±¡çš„æ–ÒŽ(gu¨©)³•。例如,串行化可用于创徏SOAP消息的XML表示。不同串行化软äšgæ‰€å¯ÆD‡´çš„ä“Q何无关紧要的排字差异都会被消息处理èÊY件忽略,但会对安全性èÊYä»¶äñ”生很大媄响。XML消息的Infoset表示形式改进了这一问题。要使XML½{‘֐ç”Ÿæ•ˆåQŒæ¶ˆæ¯å¿…™å»è{换成一个对所有方都是一致的XML表单。规范化是一个术语,来描˜q°ç”¨äºŽç”Ÿæˆä¸€è‡´çš„æ¢è¡Œ½W¦ã€åˆ¶è¡¨é—´éš”、属性排序和¾l“束标签样式½{‰éžå…³é”®ä¿¡æ¯è§†å›¾çš„æ–¹æ³•。签名包含了用于使消息接收者能够完全像发送者那样处理安全信息的规范化方法。某一服务所使用的特定的规范化方法是要放¾|®åœ¨ä¸€ä¸ªWSDL portType¾l‘定或WSDL端口的有用的½{–略断言ã€?/p>

    WS-Security指定了消息完整性和机密性机制以及单一的消息èín份验证。对于消息完整性,该规范详¾l†æ˜qîCº†åР坆½{‘֐æ˜¯å¦‚何表½Cºåƈ与SOAP消息的特定部分关联的。该æ–ÒŽ(gu¨©)³•允许ä»ÀL„æ ¼å¼è‰¯å¥½çš„æ¶ˆæ¯ç‰‡ŒD‰|‹¥æœ‰å•独的½{‘֐ã€‚与之类ä¼û|¼Œæœºå¯†æ€§æ˜¯é€šè¿‡¾l“构良好的消息片ŒD늚„加密来实现。èín份验证是使用数字½{‘֐æ¥å®žçŽ°çš„ã€‚WS-Security规范描述了当前常用的安全机制åQŒä¹Ÿæ²¡æœ‰æŽ’除ž®†æ¥æ·ÕdŠ æ–°æœºåˆ¶çš„å¯èƒ½æ€§ã€‚å› ä¸ºSOAP处理模型使用Header元素来作出处理决定,所以是军_®šSOAP消息中的哪些元素需要加密时一定要多加ž®å¿ƒã€?/p>

    在决定要对哪些元素进行加密以及要使用哪些加密½Ž—法æ—Óž¼ŒWeb服务设计人员一定要清楚消息是如何处理的。当某些特定的Header元素需要由½W¬ä¸‰æ–ÒŽ(gu¨©)ˆ–中介来处理时åQŒè¿™äº›å†³å®šå°±æ›´äؓ重要了。如果这些参与者对适当的解密数据或对在加密XML元素时所使用的约定毫无所知,它们ž®†æ— æ³•实现正¼‹®æ“ä½œã€‚此外,每个处理节点å¯ÒŽ(gu¨©)¶ˆæ¯ä¸­åŒ…含的安全信息都必须有个一般的了解。加密某一Header中XML元素的一个自焉™€‰æ‹©ž®±æ˜¯å¯¹å®ƒ˜q›è¡Œå®Œå…¨åР坆åQŒç”¨åˆå§‹å…ƒç´ æ›¿ä»£åŠ å¯†æ•°æ®¾cÕdž‹çš„元素。这¿Uç®€å•çš„æ–ÒŽ(gu¨©)³•有些¾~ºç‚¹ã€‚例如,中介不太好确定必™åÕd¤„理哪些元素(带有mustUnderstand="1"属性的元素åQ‰ã€‚另外,当元素类型发生变化时åQŒç¡®å®šå…¶åˆå§‹¾cÕdž‹æ¯”较困难。另一¿Uæ–¹æ³•是对元素进行è{换,使得˜q›è¡Œæ­£ç¡®çš„SOAP处理所需的所有关键属性都保持不变åQŒä¸”对初始元素进行了加密åQŒåƈ攑֜¨ä¸€ä¸ªç‰¹ŒDŠçš„子元素中。这¿Uæ–¹æ³•的优点是即使不知道如何解密元素的中介也能实现正¼‹®çš„处理。这¿Uæ–¹æ³•的一个缺ç‚ÒŽ(gu¨©)˜¯å®ƒè¦æ±‚所有参与者都了解用于表示初始元素的约定。尽½Ž¡WS-Security目前没有对这¿Uæ–¹æ³•提供指å¯û|¼Œä½†æˆ‘们预期将来会提供的。相比之下这¿Uæ–¹æ³•æ›´å¥½ä¸€äº›ï¼Œå› äØ“å®ƒå¯å®žçŽ°æ‰€æœ‰SOAP Header元素的正¼‹®å¤„理ã€?/p>

    WS-Security的概要规范中描述了几¿Uå®‰å…¨æ€§ä×o牌。针对表½Cºç”¨æˆ·åçš„ä×o牌、X.509证书和基于XML的安全性ä×o牌的概要都已¾lå¼€å‘出来。基于XML的安全性ä×o牌包括安全性断­a€æ ‡è®°è¯­è¨€åQˆSAMLåQŒSecurity Assertion Markup LanguageåQ‰å’Œå¯æ‰©å±•权限标记语­a€/权限表达语言åQˆRELåQŒRights Expression LanguageåQ‰ã€‚Kerberos¼œ¨çš„使用规范˜q˜æœªæˆåž‹ã€?/p>

WS-I基本安全概要
    WS-Iž®†è¦å‘布的最新的互操作性概要之一是基本安全概要(BSPåQŒBasic Security ProfileåQ‰ã€‚该概要提供了WS-Security和各¿Uå®‰å…¨æ€§ä×o牌,如Usernameå’ŒX.509证书令牌的实现指对{€‚该概要用于补充和完善WS-I基本概要ã€?/p>

åŸÞZºŽå®‰å…¨ä»¤ç‰Œçš„ä¿¡ä»?/h2>

    安全性ä×o牌是提供端到端安全解å†Ïx–¹æ¡ˆæ‰€å¿…需的。这些安全性ä×o牌必™åÕdœ¨æ¶ˆæ¯å¤„理的参与者之间实现直接或间接å…׃ín。各参与者还必须¼‹®å®šæ–­è¨€çš„凭证是否可信。这些信ä»Õd…³¾pÖM»¥å®‰å…¨æ€§ä×oç‰Œçš„äº¤æ¢å’Œä»£ç†äØ“åŸºç¡€åQŒåƈ存在于已¾lç¡®å®šçš„æ”¯æŒä¿¡ä“Q½{–略中。例如,某一代理的ä×o牌有多少可信åQŒæ˜¯ç”Þq³»¾lŸç®¡ç†å‘˜å’Œä»–们确定的信ä“Q关系军_®šçš„。提供安全性ä×o牌的服务五花八门。这是各¿Uåº•å±‚å®‰å…¨æŠ€æœ¯é¦–å…ˆäØ“WebæœåŠ¡æ‰€ä½¿ç”¨çš„é¢†åŸŸã€‚äØ“äº†æä¾›ä¸€¿Uä¸Žå®‰å…¨æŠ€æœ¯æ— å…³çš„¾lŸä¸€æ ‡å‡†çš„è§£å†Ïx–¹æ¡ˆï¼Œæ–°åè®®æ˜¯ä¸ÞZ¿¡ä»ÕdŸŸä¹‹é—´çš„安全性ä×o牌交换而设计的ã€?/p>

    WS-Trust以用于请求、发出和代理安全性ä×o牌的协议对WS-Security˜q›è¡Œäº†è¡¥å……。需要特别指出的是,其中定义了用于获取、发行、更新和验证安全性ä×o牌的操作。该规范的另一个新ç‰ÒŽ(gu¨©)€§æ˜¯å»ºç«‹æ–îC¿¡ä»Õd…³¾pÈš„æœºåˆ¶ã€‚IPsec或TLS/SSL之类的网¾lœå’Œä¼ è¾“保护机制可以与WS-Trust¾l“合åQŒä»¥é€‚应不同的安全性需求和情况ã€?/p>

    安全性ä×o牌可以直接从某一适当的发行者处甌™¯·èŽ·å¾—åQŒæˆ–者通过委托某一受信ä»Èš„½W¬ä¸‰æ–ÒŽ(gu¨©)¥èŽ·å–ã€‚ä×o牌还可以å‡ÞZ¹Žæ„æ–™åœ°èŽ·å¾—ã€‚ä¾‹å¦‚ï¼Œä»¤ç‰Œå¯ä»¥ä»ŽæŸä¸€å®‰å…¨æƒå¨æœºæž„å‘é€åˆ°ä¸€ä¸ªåÆˆæœªæ˜Ž¼‹®ç”³è¯¯‚¯¥ä»¤ç‰Œçš„æŸä¸€æ–V€‚äØ“æ­¤ï¼Œ¾pȝ»Ÿ½Ž¡ç†å‘˜è¦¼‹®å®šåˆå§‹ä¿¡ä“Q关系åQŒå¦‚ž®†æŸä¸€¾l™å®šæœåŠ¡æŒ‡å®šä¸ÞZ¿¡ä»Èš„æ ÒŽ(gu¨©)œåŠ¡ã€‚è¿™¿Uæ–¹æ³•ç±»ä¼égºŽç›®å‰Web上用于自展安全性的æ–ÒŽ(gu¨©)³•。从该服务获得的所有ä×o牌受信ä“Q的程度与受信ä»Èš„æ ÒŽ(gu¨©)œåŠ¡æœ¬íw«ç›¸åŒã€‚例如,如果某根服务只有断言Aå’ŒB得到信ä“QåQŒä¸”某一消息包含断言A、Bå’ŒCåQŒåˆ™è¯¥æ¶ˆæ¯ä¸­åªæœ‰æ–­è¨€Aå’ŒB得到信ä“Q。配¾|®çµ‹zÀL€§æ˜¯é€šè¿‡ä¿¡ä“Qå…³ç³»æŽˆæƒæä¾›çš„ã€‚äØ“äº†å¤„ç†åœ¨é€€å›žæˆ–å‘å‡ºå®‰å…¨æ€§ä×o牌之前需要各方之间的一个交换集的情况,定义了用于验证、协商和交换的方法。一¿Uç§°ä¸ºâ€œchallenge”的ç‰ÒŽ(gu¨©)®Šå½¢å¼çš„äº¤æ¢äØ“æŸä¸€æ–¹è¯æ˜Žå®ƒæ‹¥æœ‰ä¸ŽæŸä¸€ä»¤ç‰Œå…Œ™”的密钥提供了一¿Uæ–¹æ³•。交换的其他¾cÕdž‹åŒ…括传统的协议隧道。WS-Trust详细说明了如何扩展该规范åQŒä»¥æ”¯æŒæ›´å¤šçš„ä×o牌交换协议,而不仅仅是所¾l™å‡ºçš„这两个例子ã€?/p>

    表示安全性断­a€çš„安全性ä×o牌是ç”׃¸€ä¸ªå—ä¿¡ä“Qæ ÒŽ(gu¨©)ˆ–一个通过一个授权链的根发行的。这些安全性断­a€ç”¨äºŽéªŒè¯æ¶ˆæ¯½W¦åˆæ­£åœ¨æ–½è¡Œçš„安全策略。它们还验证断言者的属性是通过½{‘֐æ¥æ ¡éªŒçš„。在代理的信ä»ÀL¨¡å¼ä¸­åQŒå³ç”±å—ä¿¡ä“Q的中介分配安全性ä×o牌的模式中,½{‘֐å¯èƒ½ä¸éªŒè¯æ–­­a€è€…çš„íw«ä†¾åQŒè€ŒéªŒè¯ä¸­ä»‹çš„íw«ä†¾ã€‚该中介可能只断­a€è€…çš„íw«ä†¾ã€?/p>

安全会话

    用于消息íw«ä†¾éªŒè¯å’Œæœºå¯†æ€§çš„æŸäº›æœºåˆ¶å¯èƒ½ä¼šè€—用大量的资源。需要特别指出的是,许多加密技术都会显著消耗处理能力。当消息的安全性是逐一得到保证æ—Óž¼Œ˜q™äº›ä»£ä­h(hu¨¢n)通常是无法避免的。不˜q‡ï¼Œå½“两个Web服务˜q›è¡Œè®¸å¤šæ¶ˆæ¯çš„交换时åQŒå¯ä»¥ä‹É用比WS-Security中定义的æ–ÒŽ(gu¨©)³•æ›´äØ“é«˜æ•ˆå’Œå¥å£®çš„æ¶ˆæ¯æœºå¯†æ€§æ–¹æ³•ã€‚è¿™äº›æ–¹æ³•æ˜¯åŸÞZºŽå¯¹ç§°åŠ å¯†çš„ï¼Œåœ¨ä¿è¯æ¶ˆæ¯ä¼šè¯çš„å®‰å…¨æ—¶åº”ä½¿ç”¨å®ƒä»¬ã€?/p>

    WS-SecureConversation在基于共享密钥(如对¿U°åŠ å¯†ï¼‰çš„ä¸¤ä¸ªé€šä¿¡æ–¹ä¹‹é—´å®šä¹‰äº†ä¸€ä¸ªå®‰å…¨ä¸Šä¸‹æ–‡ã€‚åœ¨æ•´ä¸ªä¼šè¯æœŸå†…åQŒå®‰å…¨ä¸Šä¸‹æ–‡åœ¨å„通信方之间始¾lˆæ˜¯å…׃ín的。会话密钥由å…׃ín密钥‹z„¡”Ÿè€Œæ¥åQŒç”¨äºŽè§£å¯†åœ¨ä¼šè¯ä¸­å‘送的单个消息。安全上下文在线表示ä¸ÞZ¸€ä¸ªæ–°çš„安全性ä×o牌类型(即SCT åQŒSecurity Context TokenåQ‰ã€?/p>

    规范为徏立安全会话各方之间的安全上下文定义了3¿Uä¸åŒæ–¹æ³•。第一¿Uï¼Œç”±å®‰å…¨æ€§ä×o牌服务创建,且必™åȝ”±ä¼šè¯å‘è“væ–ÒŽ(gu¨©)å–åÆˆä¼ é€ã€‚ç¬¬äºŒç§åQŒé€šä¿¡ä¸€æ–¹åˆ›å»ºå®‰å…¨ä¸Šä¸‹æ–‡òq‰™€šè¿‡æ¶ˆæ¯ä¼ é€’给另一斏V€‚第三种åQŒé€šè¿‡åå•†å’Œäº¤æ¢åˆ›å»ºå®‰å…¨ä¸Šä¸‹æ–‡ã€‚Web服务会选择最能满­‘›_…¶éœ€è¦çš„æ–ÒŽ(gu¨©)³•。必要时可以对安全上下文˜q›è¡Œä¿®æ­£ã€‚更新安全上下文的一个典型例子是廉™•¿å®‰å…¨ä¸Šä¸‹æ–‡çš„æˆªæ­¢æ—‰™—´ã€‚安全上下文令牌隐含或包含了一个共享密钥。该密钥用于½{‘֐ã€åŠ å¯†æ¶ˆæ¯ã€‚å½“ä½¿ç”¨å…׃ín密钥æ—Óž¼Œé€šä¿¡å„方可以选用不同的密钥派生模式。例如,可以‹z„¡”Ÿå‡?个密钥,˜q™æ ·åŒæ–¹ä¾¿å¯ä»¥ä‹Éç”¨å•ç‹¬çš„å¯†é’¥æ¥ç­¾åå’ŒåŠ å¯†æ¶ˆæ¯ã€‚äØ“äº†ä¿è¯å¯†é’¥æœªæ›„¡”¨˜q‡å’Œä¿æŒé«˜åº¦çš„安全性,应ä‹É用后¾l­çš„‹z„¡”Ÿå¯†é’¥ã€‚ä‹É用这¿Uæ–¹æ³•来保证会话的安全性是一¿Uæ›´å¥½çš„选择。WS-SecureConversation规范定义了一¿Uæ–¹æ³•来指示¾l™å®šæ¶ˆæ¯æ­£åœ¨ä½¿ç”¨å“ªäº›‹z„¡”Ÿå¯†é’¥ã€‚所有派生算法都是通过URI来识别的ã€?/p>

安全½{–ç•¥

    WS-SecurityPolicy通过用一¿Uç¬¦åˆWS-Policy的语­a€æŒ‡å®šå®‰å…¨½{–略断言来完善WS-SecurityåQŒå…¶6¿Uæ–­­a€æ¶‰åŠå®‰å…¨æ€§ä×o牌、消息完整性、消息机密性、消息对SOAP中介的可见性、对安全Header的约束和消息寿命。例如,某一½{–略断言可能要求所有消息都使用某一权威机构提供的公钥来½{‘֐åQŒæˆ–该èín份验证要åŸÞZºŽKerberos¼œ¨ã€?/p>

¾pȝ»Ÿè”盟

    除了我们已经介绍的方法以外,应用½E‹åºå®‰å…¨æ€§è¿˜éœ€è¦æ›´å¤šçš„æ–ÒŽ(gu¨©)³•。例如,在某一信ä“Q域中有效的èín份在其他信ä“Q域中很可能没有意义。要让不同信ä»ÕdŸŸä¸­çš„æœåŠ¡èƒ½å¤ŸéªŒè¯íw«ä†¾çš„æœ‰æ•ˆæ€§ï¼Œž®±éœ€è¦é€‚当的机制。WS-Federation定义了一些机åˆÓž¼Œä»¥æ”¯æŒèín份、帐戗÷€å±žæ€§ã€èín份验证和íw«ä†¾éªŒè¯ä¿¡æ¯è·¨ä¿¡ä»ÕdŸŸçš„共享。利用这些机åˆÓž¼Œå¤šä¸ªå®‰å…¨åŸŸå¯ä»¥é€šè¿‡åœ¨ç”±å¤šæ–¹å‚与的Web服务之间支持和代理èín份、属性和íw«ä†¾éªŒè¯çš„信任而结成联盟。该规范扩展了WS-Trust模型åQŒä‹É属性和½W”名可以被整合到令牌发行机制中,从而åŞ成一¿Uå¤šåŸŸèín份映ž®„机制。这些机刉™ƒ½æ”¯æŒå•点ç™Õd½•、退出和½W”名åQŒåƈ描述了专业服务对于属性和½W”名的作用ã€?/p>

    通过íw«ä†¾è”盟åQŒå¾ˆå¤šè¦æ±‚都可以得到满èƒö。就拿将一名员工与光™›‡ä¸Õd…³è”è“v来的例子来说åQŒå…¬å¸Açš„Jane从OfficeSupplyStore.com˜q›è¡Œé‡‡è´­åQŒå…¬å¸Aå’ŒOfficeSupplyStore.com之间有一个采购合同。因为Janeçš„èín份是与公司Aå…Œ™”的,所以可以让å¥ÒŽ(gu¨©)¥ä¾æ®è¯¥åˆåŒæ¥˜q›è¡Œé‡‡è´­ã€‚第二个例子是将一个äh映射到多个笔名。大家可能只知道Joe使用joe@companya.com工作。他˜q˜å¯èƒ½æœ‰å…¶ä»–íw«ä†¾åQŒå¦‚joe_bloggs@hotmail.comå’Œjosephb@cornell.edu。通过íw«ä†¾è”盟åQŒç³»¾lŸå¯ä»¥ç¡®å®šè¿™äº›èín份都是同一个Joeã€?/p>

    Web服务联合安全架构中定义了两个一般的è¯äh±‚者(消息发送者)¾c»ï¼šè¢«åŠ¨å’Œæ™ºèƒ½ï¼ˆ‹zÕdЍåQ‰ã€‚被动请求者是只ä‹É用HTTP且从来不发出安全性ä×o牌的服务。智能请求者是能够发出包含诸如WS-Securityå’ŒWS-Trust中所描述的那些安全性ä×o牌的消息的服务。传¾lŸçš„åŸÞZºŽHTTPçš„Web‹¹è§ˆå™¨å°±æ˜¯è¢«åŠ¨è¯·æ±‚è€…çš„ä¸€ä¸ªä¾‹å­ã€‚å®šä¹‰è¿™ä¸¤ç§è¯äh±‚è€…çš„è¡ŒäØ“çš„æ¦‚è¦è§„èŒƒçŽ°å·²å¼€å‘å‡ºæ¥ã€‚å¯¹äºŽæ™ºèƒ½è¯·æ±‚è€…ï¼Œactiveè¯äh±‚者概要详¾l†è¯´æ˜Žäº†å•点ç™Õd½•、退出和½W”名是如何通过使用SOAP消息而整合到Web服务安全模型中的。实际上åQŒè¯¥æ¦‚è¦æè¿°äº†åœ¨æ™ø™ƒ½è¯äh±‚者上下文中实现WS-联盟中所描述的模式的æ–ÒŽ(gu¨©)³•。它详细说明了各¿Uå®‰å…¨æ€§ä×oç‰Œçš„è¦æ±‚ã€‚ä½œä¸ø™¿™äº›å®‰å…¨æ€§ä×o牌要求中之一的一个例子,当不使用安全通道æ—Óž¼ŒX.509证书的整个ä×o牌必™åÕdŒ…含权威机构的名称和签名。该概要˜q˜è¦æ±‚X.509令牌包含主题标识½W¦ï¼Œä»¥å”¯ä¸€åœ°è¯†åˆ«æŽˆä¹‹ä»¥è¯¥ä×o牌的主题ã€?/p>

发现åQˆDiscoveryåQ?/h1>

    本节介绍Web服务架构中用于定位网¾lœä¸ŠWeb服务和确定该服务可用性的功能¾l„äšgåQšUDDIå’ŒWS-Discovery。Web服务发现是在没有人工òq²é¢„的情况下实现服务˜qžæŽ¥è‡ªåŠ¨åŒ–çš„å…³é”®ã€‚Web服务发现æ–ÒŽ(gu¨©)³•反映了计½Ž—机¾pȝ»Ÿä¸­æŸ¥æ‰¾ä¿¡æ¯çš„两个最常见æ–ÒŽ(gu¨©)³•åQšæŸ¥çœ‹ä¸€ä¸ªä¼—æ‰€å‘¨çŸ¥çš„ç›®å½•ï¼Œæˆ–å°†ä¸€ä¸ªè¯·æ±‚å¹¿æ’­ç»™æ‰€æœ‰å¯ç”¨çš„ç›‘å¬å™¨ã€‚UDDI注册表就相当于该目录åQŒå‘现协议用于广播请求ã€?/p>

目录åQˆDirectoryåQ?/h2>

    通用描述发现和集成协议,即UDDI——Universal Description Discovery and Integration ProtocolåQŒæŒ‡å®šäº†ä¸€ä¸ªç”¨äºŽæŸ¥è¯¢å’Œæ›´æ–°Web服务信息通用目录协议。该目录包含关于服务提供商、它们所托管的服务以及这些服务所实施的协议的信息。该目录˜q˜æä¾›äº†ç”¨äºŽå‘ä“Q何注册信息添加元数据的方法。如果Web服务信息存储在众所周知的位¾|®æ—¶åQŒåˆ™å¯ä»¥ä½¿ç”¨UDDI目录æ–ÒŽ(gu¨©)³•。一旦找到目录,ž®±å¯ä»¥å‘送一¾pÕdˆ—查询è¯äh±‚以获取想要的信息。UDDI目录位置通常是通过¾pȝ»Ÿé…ç½®æ•°æ®ä»Žå¸¦å¤–(Out of BandåQ‰èŽ·å¾—çš„ã€?/p>

    对于如何部çÖvUDDI注册表,Web服务提供商有很多不同的选择。部¾|²æ–¹æ¡ˆä¸å¤–乎3ä¸ªç±»åˆ«ï¼šå…¬å…±ã€ä¼ä¸šå¤–å’Œä¼ä¸šå†…ã€‚äØ“äº†æ”¯æŒå…¬å…±éƒ¨¾|ÔŒ¼Œä»¥Microsoft、IBMå’ŒSAP为首的一¾l„供应商ä¸ÀLŒæŽ¨å‡ºäº†UDDI企业注册表[UBRåQŒUDDI Business Registry]。UBR是一个可跨多个主持企业复制的公共UDDI注册表,它既是基于Internetçš„Web服务资源åQŒåˆæ˜¯Web服务开发者的一个试验台。尽½Ž¡ç›®å‰å…¬å…±UDDI实施已经受到了最大关注,但UDDI的早期采用者仍更們֐‘于ä‹É用企业外和企业内æ–ÒŽ(gu¨©)³•。在˜q™ä¸¤¿Uéƒ¨¾|²æƒ…况下åQŒä¼ä¸šè¦éƒ¨çÖv一个专用注册表åQŒè€Œä¸”更严密地控制注册信息¾cÕdž‹ä¹Ÿæ˜¯å¯èƒ½çš„。这些专用注册表可能只供一个企业ä‹É用,也可能供若干¾l„业务合作伙伴ä‹É用。UDDI˜q˜äؓ注册表间的复制和跨部¾|²çš„ä¿¡ä“Q联盟定义了协议。ä‹É用这些协议进一步增加了可用于实施者的部çÖvæ–ÒŽ(gu¨©)¡ˆæ•°é‡ã€‚对于所有的部çÖvæ–ÒŽ(gu¨©)¡ˆåQŒUDDI目录都包含了Web服务及其托管地的详细信息。UDDI目录™åÒŽ(gu¨©)œ‰3个主要部分——服务提供商、所提供的Web服务和实施绑定。其中的每一部分都逐渐提供有关Web服务的更详细信息ã€?/p>

    大部分的一般信息都描述服务提供商。该信息不针对Web服务软äšgåQŒè€Œæ˜¯é’ˆå¯¹ç›´æŽ¥è´Ÿè´£è¯¥æœåŠ¡çš„å¼€å‘è€…æˆ–å®žæ–½è€…ã€‚æœåŠ¡æä¾›å•†ä¿¡æ¯åŒ…æ‹¬åç§°ã€åœ°å€ã€è”¾pÖMh及其他管理细节。所有的UDDI™åšwƒ½æœ‰å¤šä¸ªå…ƒç´ æ¥æ”¯æŒå¤šè¯­­a€æè¿°ã€‚可用的Web服务列表存储在服务提供商™å¹ä¸­ã€‚这些服务可能是æ ÒŽ(gu¨©)®å®ƒä»¬çš„预定用途来¾l„织的:它们可能被分成不同的应用领域、地区或ä»ÖM½•其他适用的模式。存储在UDDI注册表中的服务信息只包含服务描述和一个指向它所包含的Web服务实施的指针。由其他提供商托½Ž¡çš„æœåŠ¡é“¾æŽ¥¿UîCؓ‘服务映ž®„(Service ProjectionåQ‰â€™ï¼Œä¹Ÿå¯èƒ½è¢«æ³¨å†Œã€?/p>

    UDDI服务提供商实体的最后部分是实施¾l‘定。该¾l‘定ž®†Web服务™å¹ä¸Ž¼‹®åˆ‡çš„URIå…Œ™”èµäh¥åQŒä»¥¼‹®å®šåœ¨ä½•处部¾|²æœåŠ¡ï¼Œå®ƒè¿˜æŒ‡å®šäº†è®¿é—®åè®®ï¼Œòq¶åŒ…含所实施的确切协议的参考资料。这些细节对于开发äh员编写调用Web服务的应用程序已¾lèƒö够。详¾l†çš„协议定义的是通过一个称为“类型模型(即tModelåQŒType ModelåQ‰â€çš„UDDI 实体提供的。在许多情况下,tModel都会引用一个描˜q°SOAP Web服务接口的WSDLæ–‡äšg描述åQŒä½†tModel的灵‹zÀL€§ä¹Ÿå‡ ä¹Žå¯ä»¥æè¿°ä»ÖM½•¿Uç±»çš„资源。对于在UDDI中注册的每一个提供商或服务来è¯ß_¼Œæ¥è‡ªæ ‡å‡†åˆ†ç±»å­¦ï¼ˆå¦‚NAICS和较古老的¾ŸŽå›½æ ‡å‡†è¡Œä¸šä»£ç åQ‰æˆ–å…¶ä»–íw«ä†¾è¯†åˆ«æ–ÒŽ(gu¨©)¡ˆåQˆå¦‚Edgar Central Index KeyåQ‰çš„元数据都可用于分¾cÖM¿¡æ¯å’Œæé«˜æœçƒ¦å‡†ç¡®æ€§ã€‚可用的分类学和标识½W¦æ–¹æ¡ˆé›†ä½œäØ“ä»ÖM½•实施的一部分åQŒæ˜¯å¯è½»æ¾æ‰©å±•çš„åQŒå› æ­¤å¯ä»¥å¯¹å…¶è¿›è¡Œå®šåˆ¶ä»¥æ”¯æŒä»ÖM½•特定的地域、行业或企业需求ã€?/p>

动态发玎ͼˆDynamic DiscoveryåQ?/h2>

    动态Web服务发现是以不同方式提供的。作为在已知注册表中存储信息的另一¿Uæ–¹æ¡ˆï¼ŒåŠ¨æ€å‘çŽ°çš„Web服务会明¼‹®åœ°å£°æ˜Žå®ƒä»¬çš„到达、离开¾|‘络。WS-Discovery为通过多èµ\òq¿æ’­æ¶ˆæ¯æ¥å£°æ˜Žå’Œå‘现Web服务定义了协议。当Web服务˜qžæŽ¥åˆ°ç½‘¾lœæ—¶åQŒå®ƒé€šè¿‡å‘送一条Hello消息来声明它的到达。在最½Ž€å•的情况下,˜q™äº›å£°æ˜Žçš„è·¨¾|‘发送ä‹Éç”¨å¤šè·¯å¹¿æ’­åè®®â€”â€”æˆ‘ä»¬ç§°ä¹‹äØ“è‡ªç»„¾l‡ç½‘¾lœã€‚该æ–ÒŽ(gu¨©)³•˜q˜æœ€å¤§é™åº¦åœ°å‡å°‘了网¾lœä¸Šçš„è½®è¯¢éœ€è¦ã€‚äØ“äº†é™åˆ¶ç½‘¾lœä¿¡æ¯æµé€šé‡å’Œä¼˜åŒ–发现过½E‹ï¼Œ¾pȝ»Ÿå¯èƒ½ä¼šåŒ…含一个发çŽîC»£ç†ã€‚发çŽîC»£ç†ç”¨ä¸€ä¸ªä¼—所周知的服务位¾|®å–代了发送多路广播消息的需要,从而将自组¾l‡ç½‘¾lœè{变成托管¾|‘络。利用配¾|®ä¿¡æ¯ï¼Œä»£ç†æœåŠ¡é›†åˆå¯ä»¥˜qžæŽ¥åœ¨ä¸€èµøP¼Œä»Žè€Œå°†å‘现服务扩展到多¾l„服务器åQŒä»Žä¸€å°æœºå™¨æ‰©å±•到多台机器ã€?/p>

    å› äØ“å‘çŽ°ä»£ç†è‡ªèín也是Web服务åQŒå®ƒä»¬å¯èƒ½ä¼šç”¨è‡ªå·×ƒ¸“用的Hello消息来声明它们的到场。接收该消息的Web服务然后可以利用该代理的服务åQŒè€Œæ— éœ€å†ä‹É用干扰较多的一对多发现协议。当服务¼›Õd¼€¾|‘络æ—Óž¼ŒWS-Discovery会指定一个Bye消息以发送给¾|‘络或发çŽîC»£ç†ã€‚该消息通知¾|‘络上的其他服务¼›Õd¼€çš„Web服务不再可用ã€?/p>

    ä¸ÞZº†å®Œå–„˜q™ç§æœåŠ¡å£°æ˜Žå’Œç¦»å¼€çš„åŸºæœ¬æ–¹æ³•çš„ä¸èƒöåQŒWS-Discovery定义了两个操作——Probeå’ŒResolveåQŒä»¥å®šä½¾|‘络上的Web服务。对于自¾l„织¾|‘络åQŒProbe消息被发送给多èµ\òq¿æ’­¾l„,òq¶ä¸”与该è¯äh±‚匚w…çš„目标服务会ž®†å“åº”直接反馈给è¯äh±‚者。对于利用发çŽîC»£ç†çš„æ‰˜ç®¡¾|‘络åQŒProbe消息则以单èµ\òq¿æ’­æ–¹å¼å‘送给发现代理。如果按名称定位Web服务åQŒåˆ™ä½¿ç”¨Resolve消息。Resolve消息只以多èµ\òq¿æ’­æ¨¡å¼å‘送。Resolve ¾cÖM¼¼äºŽåœ°å€è§£æžåè®®åQŒå³ARPåQŒå®ƒ?y¨­u)®†IP地址转换成其对应的物理网¾lœåœ°å€ã€‚WS-Discovery规范˜q˜æ”¯æŒè¿™æ ïLš„¾pȝ»Ÿé…ç½®åQšå°†Probe消息发送给一个已¾lé€šè¿‡å…¶ä»–½Ž¡ç†æ–ÒŽ(gu¨©)³•建立èµäh¥çš„发çŽîC»£ç†ï¼Œå¦‚通过使用众所周知的DHCP记录ã€?/p>

    动态发现服务的能力实现了Web服务½Ž¡ç†çš„自举。与WS-Eventing及其他协议相¾l“合åQŒæ›´å¤æ‚的管理服务也可以通过使用˜q™ç§åŠ¨æ€å‘çŽ°åŸº¼‹€æž¶æž„来构建。动态发现还ž®†Web服务架构扩展到设备,如那些目前可能实施通用åÏx’即用åQˆUPnPåQ‰åè®®çš„¾pȝ»Ÿâ€”—这是ä‹É该架构真正实现通用的重要一步。例如,借助WS-Discoveryå’ŒWS-EventingåQŒæ‰“印机或存储介质等讑֤‡å¯ä»¥ä½œäØ“Web服务¾U›_…¥åˆ°ç³»¾lŸä¸­åQŒè€Œä¸”无需专门的工å…ähˆ–协议ã€?/p>

Web服务讑֤‡æ¦‚要规范
    Web服务讑֤‡æ¦‚要规范对在资源受限的设备上应该实施Web服务架构规范家族的哪个子集提供了指导。该概要力图在由于资源限制而作出折è¡äh—¶åQŒåœ¨å¯ç”¨çš„丰富功能和最重要的功能之间找到åã^è¡¡ã€?/p>

一致性协议——可靠的消息传递和事务

    本节介绍可以提供可靠的消息传送、事务行为和能够在一¾l„Web服务之间˜q›è¡Œæ˜‘Ö¼åè°ƒçš„Web服务架构¾l„äšg。定义这些功能的规范是WS-ReliableMessaging、WS-Coordination、WS-AtomicTransactionå’ŒWS-BusinessActivityã€?/p>

    当多个Web服务必须完成工作的某一共同单元或依照某¿Uå…±åŒçš„è¡ŒäØ“˜q›è¡Œæ“ä½œæ—Óž¼Œå¯¹äºŽä½¿ç”¨å“ªä¸ªåè®®å¿…须达成å…Þp¯†ã€‚Web服务之间˜q™ç§æœ€ä½Žé™åº¦çš„协调是不可避免的。协调协议还必须能够¼‹®å®šòq¶åŒæ„å·²è¾¾æˆä¸€ä¸ªå…±åŒç›®æ ‡ã€‚Web服务之间的每一个交互都可以看作一¿Uåè°ƒã€‚ä¸€è‡´æ€§åè®®äØ“è¯¥æž¶æž„æä¾›äº†ä¸€ä¸ªæ”¹˜q›çš„æœÞZ¼šåQŒå³å‚与者服务在它们准备共同完成的ä“Q务方面将获得成功。在传输丢失了消息和服务失常æ—Óž¼ŒWeb服务架构仍然能够正常工作ã€?/p>

    ä»ÖM½•多方协调都可以通过接连地随需加入更多参与者从两方协调逐步发展而成。两方协调可能是自发的,也可能需要一个指定的协调者。广泛ä‹É用的自发协调协议的一个例子是同步è¯äh±‚—响应消息传递模式。这是一致性协调的最½Ž€å•åŞ式之一åQ›å¯¹äºŽæ¯ä¸ªå·¥ä½œè¯·æ±‚,接收方Web服务必须完成所有预期工作之后才能向è¯äh±‚者返回数据。双斚wƒ½éµåó@˜q™ç§ä¸¥æ ¼çš„æ¨¡å¼ï¼Œæ— éœ€æ˜‘Ö¼åè°ƒæœåŠ¡ã€?/p>

可靠的消息传�/h2>

    很多情åŞ都可能中断两个服务之间的消息交换。当使用不可靠的传输协议åQˆå¦‚HTTP 1.0å’ŒSMTPåQ‰æ¥˜q›è¡Œä¼ è¾“或当消息交换跨多个传输层˜qžæŽ¥æ—Óž¼Œ˜q™æ›´ä¼šæˆä¸ÞZ¸€ä¸ªé—®é¢˜ã€‚消息可能会丢失、被复制或重新排序,WebæœåŠ¡å¯èƒ½ä¼šå¤±è´¥åÆˆå¤±åŽ»æ˜“å˜çŠ¶æ€ã€‚WS-ReliableMessaging是一个基于特定的传送保证特征实现可靠消息传送的协议。该规范定义äº?个可¾l“合使用的不同断­a€åQ?/p>

  • At-Least-Once DeliveryåQˆè‡³ž®‘一‹Æ¡ä¼ é€ï¼‰åQšæ¯æ¡æ¶ˆæ¯è‡³ž®‘传送一‹Æ¡ã€?
  • At-Most-Once DeliveryåQˆè‡³å¤šä¸€‹Æ¡ä¼ é€ï¼‰åQšä¸ä¼ é€é‡å¤çš„æ¶ˆæ¯ã€?
  • In-Order DeliveryåQˆä¾‹Æ¡ä¼ é€ï¼‰åQšæŒ‰æ¶ˆæ¯çš„å‘é€é¡ºåºä¼ é€æ¶ˆæ¯ã€?

    臛_°‘一‹Æ¡å’Œè‡›_¤šä¸€‹Æ¡ä¿è¯ç›¸¾l“合的结果是恰好˜q›è¡Œä¸€‹Æ¡ä¼ é€ã€‚由于Web服务架构的设计与传输无关åQŒå› æ­¤æ‰€æœ‰ä¼ é€éƒ½ä¸Žæ‰€ç”¨çš„通信传输工具或其¾l„合无关。由于开发äh员必™å»é¢„‹¹‹çš„æ½œåœ¨ä¼ é€å¤±è´¥æ¨¡å¼æ•°é‡å‡ž®‘,故ä‹É用WS-ReliableMessaging可以½Ž€åŒ–ç³»¾lŸå¼€å‘ã€?/p>

    可靠的消息传送不需要显式协调者。当使用WS-ReliableMessagingæ—Óž¼Œå‚与者必™åÀL ¹æ®SOAP消息Header中所发送的信息识别协议。作ä¸ÞZ¸€ä¸ªç»„传输的消息集合称为消息序列(Message SequenceåQ‰ã€‚消息序列可以由发è“vè€?发送者或Web服务创徏åQŒå½“建立一¿UåŒå‘关联时通常由它们共同创建。序列是使用CreateSequenceå’ŒCreateSequenceResponse消息昑ּåˆ›å¾çš„。当惌™¦çš„æœ€¾lˆç»“果是用两个单向序列来充当一个双向序列时åQŒå‘赯‚€…将提供Web服务所要ä‹É用的序列。该序列的ID由发赯‚€…包含在CreateSequence消息中ã€?/p>

    WS-ReliableMessaging中定义了几个½{–略断言。这些策略断­a€ç”¨WS-Policy中定义的æ–ÒŽ(gu¨©)³•来表½Cºã€?/p>

    可靠的消息传递协议简化了开发ähå‘˜äØ“åœ¨ä¼ è¾“ä¸æ–­å˜åŒ–çš„æƒ…å†µä¸‹ä¼ è¾“æ¶ˆæ¯è€Œå¿…™åȝ¼–写的代码。也ž®±æ˜¯è¯ß_¼Œåº•层基础架构可以å¯ÒŽ(gu¨©)¶ˆæ¯åœ¨ç«¯ç‚¹ä¹‹é—´çš„æ­£å¸æ€¼ è¾“进行验证,必要时还会è{å‘æ¶ˆæ¯åÆˆ‹‚€‹¹‹é‡å¤ã€‚应用程序不需要ä“Q何附加逻辑来处理提供传送可能需要的消息转发、重复消息的消除、消息重新排序或消息¼‹®è®¤ã€‚WS-ReliableMessaging的实施是跨发赯‚€…和服务分布的。那些非‘在¾UŽì€™å¯è§çš„特征åQŒå¦‚消息传送顺序,是通过实施WS-ReliableMessagingè§„èŒƒæ¥æä¾›çš„ã€‚è™½ç„¶ç”±ä¼ è¾“æŸå¤±å¯ÆD‡´çš„æ¶ˆæ¯é‡å‘ç­‰ç‰¹å¾æ˜¯é€šè¿‡ä¸äØ“åº”ç”¨½E‹åºæ‰€çŸ¥çš„æ¶ˆæ¯ä¼ é€’层来处理的åQŒå…¶ä»–端到端特征åQˆå¦‚依次传送)都要求消息传递基¼‹€æž¶æž„和接收应用程序相互协作。当发送者希望按发送顺序提供消息排序时åQŒåœ¨æŽ¥æ”¶è€…一方却按接攉™¡ºåºæä¾›æ¶ˆæ¯æŽ’序的情况是依‹Æ¡ä¼ é€çš„一¿Uä¸æ­£ç¡®å®žæ–½â€”—注意到˜q™ä¸€ç‚ÒŽ(gu¨©)˜¯å¾ˆæœ‰­‘£çš„。当发送者希望按接收™åºåºæä¾›æ¶ˆæ¯™åºåºæ—Óž¼Œåœ¨æŽ¥æ”¶è€…一æ–ÒŽ(gu¨©)Œ‰å‘送顺序提供消息顺序的情况åQŒæ˜¯ä¾æ¬¡ä¼ é€çš„一¿Uæ­£¼‹®å®žæ–½ã€?/p>

指定的协调�/h2>

    N路协调协议的某些族需要一个指定的协调者来引导一个工作单元通过一¾pÕdˆ—合作服务åQŒä¸€ä¸ªä¾‹å­æ˜¯‹zÕdŠ¨å¿…é¡»åœ¨ä¸å¸Œæœ›è¢«åŒæ—¶è¿žæŽ¥çš„æœåŠ¡ä¹‹é—´åè°ƒã€‚åªè¦æ¯ä¸ªå‚ä¸Žè€…å’Œåè°ƒè€…åœ¨æŸä¸€æ—¶åˆ»é€šä¿¡åQŒåè°ƒå°±å¯èƒ½å‘生åQŒç»“果就可能达成一致。Web服务架构为指定的协调者定义了某些½Ž€å•操作ã€?/p>

    WS-Coordination规范定义了一个可扩展的协调框架来支持需要显式协调者的情况。该协议引入了一个称为协调上下文åQˆCoordination ContextåQ‰çš„SOAP头块åQŒç”¨ä»¥å”¯ä¸€åœ°è¯†åˆ«è”合工作中ž®†è¦ç€æ‰‹è¿›è¡Œçš„éƒ¨åˆ†ã€‚äØ“äº†å¯åŠ¨å·¥ä½œçš„æŽ¥åˆéƒ¨åˆ†åQŒWeb服务会向一个或多个目标服务发送协调上下文。收到协调上下文后,接收æ–ÒŽ(gu¨©)œåŠ¡ä¼šå¾—åˆ°æç¤ºåQŒè¯´æœ‰è”合协作请求提出。协调上下文中包含了­‘›_¤Ÿçš„信息,è¯äh±‚接收者可以利用这些信息来¼‹®å®šæ˜¯å¦å‚与该工作。协调上下文中包含的¼‹®åˆ‡ä¿¡æ¯æ ÒŽ(gu¨©)®è¢«è¯·æ±‚工作的¿Uç±»çš„不同而变化ã€?/p>

    协调¾cÕdž‹é›†æ˜¯å¯æ‰©å……çš„ã€‚åªè¦å‚ä¸Žè¯¥è”åˆå·¥ä½œçš„æ¯ä¸ªæœåŠ¡å¯¹æ‰€éœ€è¡ŒäØ“éƒ½æœ‰ä¸ªä¸€èˆ¬çš„äº†è§£åQŒæ–°¾cÕdž‹ž®±å¯ä»¥é€šè¿‡å®žæ–½æ¥å®šä¹‰ã€‚例如,原子事务是Web服务架构中已¾lå®šä¹‰äº†çš„几个初始基¼‹€åè°ƒ¾cÕdž‹ä¹‹ä¸€ã€‚如果被è¯äh±‚的协调类型被理解òq¶è¢«æŽ¥å—åQŒWeb服务ž®×ƒ¼šä½¿ç”¨WS-Coordinationæ³¨å†Œåè®®æ¥é€šçŸ¥åè°ƒè€…åÆˆå‚ä¸Žè¯¥è”åˆå·¥ä½œã€‚åè°ƒä¸Šä¸‹æ–‡ä¸­åŒ…å«äº†åè°ƒè€…çš„ä¸€ä¸ªç«¯ç‚¹å¼•ç”¨å’Œå¯èƒ½è¡ŒäØ“çš„å¯é€‰æ ‡è¯†ç¬¦ã€‚æ³¨å†Œæ“ä½œæŒ‡å®šè¯¥å¤šæ–¹å‚ä¸Žçš„Web服务所支持的行为。一旦注册消息发送到协调者,Web服务ž®×ƒ¼šä¾ç…§å®ƒä»¬æ‰€é¢„订的协议参与该工作。注册是协调框架中的关键操作åQŒå®ƒå…è®¸æ„æ¬²ååŒé…åˆä»¥å®Œæˆå·¥ä½œçš„共同单元的不同WebæœåŠ¡ç›æ€º’˜qžæŽ¥åœ¨ä¸€èµ—÷€?/p>

    WS-AtomicTransaction为Web服务指定了传¾lŸçš„ACID事务åQŒåƈ为原子事务协调类型定义了3个协议:完成协议åQˆCompletion ProtocolåQ‰å’Œä¸¤é˜¶ŒD‰|äº¤åè®®ï¼ˆTwo-Phase Commit ProtocolåQ‰çš„ä¸¤ä¸ªå˜ä½“ã€‚å®Œæˆåè®®ç”¨äºŽå¯åŠ¨æäº¤å¤„ç†ã€‚äØ“å®Œæˆè€Œæ³¨å†Œçš„Web服务能够通知指定的协调者何时开始提交处理。该协议˜q˜è¯¦¾l†è¯´æ˜Žäº†ç”¨äºŽé€šçŸ¥å¯åŠ¨è€…äº‹åŠ¡æœ€¾lˆç»“果的消息。不˜q‡ï¼Œè¯¥åè®®ä¸è¦æ±‚协调者确保启动者对¾l“æžœ˜q›è¡Œå¤„理。相反,WS-AtomicTransactionä¸­çš„å…¶ä»–è¡ŒäØ“åˆ™è¦æ±‚åè°ƒè€…ç¡®ä¿å‚ä¸Žè€…å¯¹åè°ƒæ¶ˆæ¯˜q›è¡Œå¤„理ã€?/p>

    两阶ŒD‰|äº¤ï¼ˆ2PCåQ‰åè®®äؓ所有已注册的参与者提供了一个公å…Þqš„æäº¤æˆ–中止决定,¼‹®ä¿äº†æ‰€æœ‰å‚与者都能得到最¾lˆç»“果通知。顾名思义åQŒå®ƒä½¿ç”¨ä¸¤è½®é€šçŸ¥æ¥å®Œæˆè¯¥äº‹åŠ¡ã€‚è¯¥åè®®çš„ä¸¤ä¸ªå˜ä½“æ˜¯åQšæ˜“å¤?PCåQˆVolatile 2PCåQ‰å’ŒæŒä¹…2PCåQˆDurable 2PCåQ‰ã€‚这两个协议在线上ä‹É用相同的消息åQˆå¯¹åº”于Prepare、Commitå’ŒAbort操作åQ‰ï¼Œä½†æ˜“å¤?PC没有持久性要求。易å¤?PC协议供管理易å¤Þpµ„源的参与者ä‹É用,如缓存管理器或窗口管理器。这些参与者在½W¬ä¸€è½®é€šçŸ¥ä¸­ä¸ä¸Žåè°ƒè€…发生联¾p»ï¼Œä¸”不需要第二轮的通知。持ä¹?PC协议供管理数据库和文件等持久资源的参与者ä‹É用。当某一提交处理已经启动æ—Óž¼Œåœ¨æ‰€æœ‰æ˜“å¤?PC参与者被联系˜q‡ä¹‹åŽè¿™äº›å‚与者会½W¬ä¸€‹Æ¡è¢«è”系。这使缓存能够被åˆäh–°ã€‚持ä¹?PCå‚ä¸Žè€…éœ€è¦å®Œæ•´çš„ä¸¤è½®é€šçŸ¥æ¥å®žçŽ°åè°ƒè€…æ‰€è¦æ±‚çš„å…¨æœ‰æˆ–å…¨æ— è¡ŒäØ“ä»¥åŠå®Œæˆè¯¥äº‹åŠ¡ã€‚è¿™äº›è¡Œä¸ºæœ€é€‚åˆäºŽå¯ä»¥åœ¨æ•´ä¸ªäº‹åŠ¡æœŸå†…æŒæœ‰èµ„æºåQŒä¸”该事务通常为非常短暂的事务的情å†üc€‚该协议保证在正常处理的情况下,协调者提供第一阶段¾l“果的同时将联系所有参与者。对于完成时间预计将比较长的事务åQŒæˆ–当资源(如锁åQ‰æ— æ³•持有时åQŒå…¶ä»–协调协议就会定义替换行为ã€?/p>

    WS-AtomicTransaction中定义了若干½{–略断言åQŒè¿™äº›ç­–略断­a€ä½¿ç”¨WS-Policy中定义的æ–ÒŽ(gu¨©)³•来表½Cºã€?/p>

排队¾pȝ»ŸåQˆQueued SystemåQ?/h2>

    构徏分布式系¾lŸæ—¶è¢«è¯æ˜Žéžå¸¸æœ‰ç”¨çš„一¿Uæ¨¡å¼æ˜¯ä½¿ç”¨äº‹åŠ¡æŒä¹…é˜Ÿåˆ—æ¥æä¾›å­˜å‚¨è{发异步消息传送。在˜q™ç§æ¨¡å¼ä¸‹ï¼ŒåŽŸå­äº‹åŠ¡è¢«ç”¨äºŽæ¯ä¸€ä¸ªä¼ è¾“ç«¯ç‚V€‚在发送端åQŒå‘送应用程序以原子事务方式ž®†æ¶ˆæ¯å‘送给一个持久队列,此时应用½E‹åºå’Œé˜Ÿåˆ—管理器都ä‹É用WS-AtomicTransaction来进行协调。只有在处理消息时不发生错误åQŒæ¶ˆæ¯æ‰è¢«è®¤ä¸ºæˆåŠŸå‘é€è‡³è¯¥é˜Ÿåˆ—ã€‚æŽ¥ä¸‹æ¥åQŒå‘送队列和接收队列之间消息的传送由队列子系¾lŸæ¥æŽ¥ç®¡ã€‚该传输步骤可以在消息置入发送队列之后的某一时刻完成。此外,发送队列的位置无需与发出消息的应用½E‹åºçš„位¾|®ä¸€è‡´ã€‚与此类ä¼û|¼Œä»ŽæŽ¥æ”‰™˜Ÿåˆ—检索消息的应用½E‹åºä¹Ÿä‹É用原子事务来执行¾cÖM¼¼æ“ä½œã€‚也ž®±æ˜¯è¯ß_¼Œåªæœ‰ä¸å‡ºçŽ°å¤„ç†é”™è¯¯æ—¶æ¶ˆæ¯æ‰èƒ½ä»Žé˜Ÿåˆ—ä¸­¿U»é™¤ã€?/p>

持箋旉™—´é•¿çš„‹zÕdЍåQˆLong Duration ActivitiesåQ?/h2>

    WS-BusinessActivity䏸™¿è¡Œæ—¶é—´é•¿çš„事务指定了两个协议。WS-BusinessActivityè§„èŒƒåœ¨äº‹åŠ¡æäº¤ä¹‹å‰åÆˆä¸é”å®šèµ„æºï¼Œè€Œæ˜¯åŸÞZºŽè¡¥å¿æ“ä½œã€‚底层事务模型是所谓的开攑ֵŒå¥—事务。这些协议系¾lŸåŒ–地说明了松耦合服务如何对已¾lå®ŒæˆæŸä¸€è”合ä»ÕdŠ¡è¾¾æˆä¸€è‡´æ„è§ã€‚åœ¨å…¶ä¸­çš„ä¸€ä¸ªåè®®ä¸­åQŒåè°ƒè€…显式地通知参与者没有更多的工作正在以联合ä“Q务的名义被请求。在另一个协议中åQŒè¯¥å‚与者就是通知协调者以联合ä»ÕdŠ¡åä¹‰å‡ºçŽ°çš„å·¥ä½œå·²¾lå®Œæˆçš„参与者。ä‹É用补偿操作可以在不锁定这些操作的情况下完成试验性操作。不½Ž¡å‡ºäºŽä½•故,只要¾pȝ»ŸæƒŒ™¦æ’¤æ¶ˆå·²å®Œæˆçš„试验性操作结果,ž®Þp¦å¯åŠ¨è¡¥å¿æ“ä½œã€‚WS-AtomicTransactionå’ŒWS-BusinessActivity都利用WS-Coordination来管理Web服务之间的协作ã€?/p>

三方握手
    三方握手˜qžæŽ¥çš„å¾ç«‹å’Œè§£é™¤åè®®æ˜¯ä¸éœ€è¦æŒ‡å®šåè°ƒè€…æœåŠ¡çš„åè°ƒåè®®çš„ä¸€ä¸ªä¾‹å­ã€‚äØ“äº†å¾ç«‹è¿žæŽ¥ï¼Œå‘é€è€…è¦å‘æŽ¥æ”¶è€…å‘é€ä¸€ä¸ªè¯·æ±‚ã€‚è¯¥è¯äh±‚建立一个会话。如果该è¯äh±‚被接受,接收者就会发å‡ÞZ¸€æ¡ç¡®è®¤æ¶ˆæ¯ï¼Œå¯¹è¯¥è¯äh±‚作出¿U¯æžå“åº”ã€‚å‘é€è€…ç„¶åŽå†å‘é€ä¸€æ¡æ¶ˆæ¯ï¼Œä½œäØ“å¯¹è¯¥¼‹®è®¤æ¶ˆæ¯çš„确认,从而证明双斚wƒ½çŸ¥é“å¯ÒŽ(gu¨©)–¹å·²ç»å»ºç«‹äº†ä¸€ä¸ªä¼šè¯ã€?/p>

    解除协议¾cÖM¼¼ã€‚一方向另一方发送一个会话解除请求。接收者以对解除消息的¼‹®è®¤æ¶ˆæ¯ä½œäؓ响应。接收到该确认消息之后,发出解除消息的一斚w€šè¿‡å†å¯¹è¯¥ç¡®è®¤æ¶ˆæ¯å‘送一条确认消息结束消息交换ã€?/p>

æžšä‹D、传输和事äšg

    本节介绍提供Web服务架构中的服务资源枚ä‹D、其状态管理和事äšg通知的规范。这些规范基于WS-Enumeration、WS-Transferå’ŒWS-Eventingã€?/p>

æžšä‹DåQˆEnumerationåQ?/h2>

    很多情况所要求的数据交换都使用不只一对的è¯äh±‚/响应消息。需要这些更长时间数据交换的应用¾cÕdž‹åŒ…括数据库查询、数据流、命名空间等信息的遍历和枚ä‹D列表。特别是枚ä‹DåQŒå®ƒæ˜¯é€šè¿‡å»ºç«‹æ•°æ®æºå’Œè¯äh±‚者之间的会话来实现的。会话中接连不断的消息用于传送正在被‹‚€ç´¢çš„元素的集合。对于该服务用于¾l„织ž®†è¦ç”Ÿæˆçš„项的方法不作假设。在正常处理的情况下åQŒæžšä¸‘Öº”在会话结束前生成所有底层数据ã€?/p>

    WS-Enumeration指定了用于徏立枚举会话和‹‚€ç´¢æ•°æ®åºåˆ—的协议。枚丑֍è®®å…è®¸æ•°æ®æºå‘正在ä‹É用的服务提供一个叫做枚举上下文的会话抽象。该上下文通过一个数据项序列来表½Cºé€»è¾‘光标。然后,è¯äh±‚者将该枚举上下文用于一个或多个SOAP消息的某一区间以请求数据。枚举数据表½CÞZØ“XML Infoset。该规范˜q˜å…è®¸æ•°æ®æºæä¾›ä¸€¿Uè‡ªå®šä¹‰æœºåˆ¶æ¥å¼€å§‹æ–°çš„æžšä¸¾ã€‚既然枚举会话可能需要若òq²ä¸ªæ¶ˆæ¯äº¤æ¢åQŒé‚£ä¹ˆä¼šè¯çŠ¶æ€å¿…™åÖM¿æŒç¨³å®šã€?/p>

    关于˜q­ä»£˜q›åº¦çš„状态信息可以由数据源或正在使用的服务在è¯äh±‚间维护。WS-Enumeration允许数据源一个请求一个请求地军_®šå“ªä¸€æ–¹å°†è´Ÿè´£¾l´æŠ¤ä¸‹ä¸€ä¸ªè¯·æ±‚的状态。这¿Uçµ‹zÀL€§å®žçŽîCº†è‹¥å¹²¿Uä¼˜åŒ–。例如,使服务器能够避免对调用之间的ä»ÖM½•光标状态进行保存。由于消息潜伏时间对于支持若òq²ä¸ªåŒæ—¶æžšä‹D的服务来说可能会很长åQŒä¸ä¿å­˜çŠ¶æ€å¯èƒ½ä¼šä½¿å¿…™åȝ»´æŠ¤çš„信息总量大大减少。资源受限设备(如移动电话)上的服务实现可能æ ÒŽ(gu¨©)œ¬æ— æ³•¾l´æŠ¤ä»ÖM½•状态信息ã€?/p>

传输åQˆTransferåQ?/h2>

    WS-Transfer详细说明了对通过Web服务˜q›è¡Œè®‰K—®çš„æ•°æ®å®žä½“进行管理所需的基本操作。要了解WS-Transfer需要介¾lä¸¤ä¸ªæ–°æœ¯è¯­åQšå·¥åŽ‚ï¼ˆFactoryåQ‰å’Œèµ„源åQˆResourceåQ‰ã€‚工厂是能够从其XML表示形式创徏资源的Web服务。WS-Transfer引入了用于创建、更新、检索和删除资源的操作。应当注意,对于资源状态维护,宿主服务器最多也只能做到ž®½åŠ›è€ŒäØ“ã€‚å½“å®¢æˆ·ç«¯èŽ·çŸ¥æœåŠ¡å™¨æŽ¥å—äº†åˆ›å»ºæˆ–æ›´æ–°æŸä¸€èµ„æºçš„è¯·æ±‚æ—¶åQŒå®ƒå¯ä»¥é€‚当地预期资源目前在的确定位¾|®ï¼Œòq¶å…·æœ‰ç¡®å®šäº†çš„表½CºåŞ式,但这òq¶ä¸æ˜¯ä¸€ä¸ªä¿è¯â€”—即使是在没有ä“Q何第三方的情况下。服务器可能会更æ”ÒŽ(gu¨©)Ÿä¸€èµ„源的表½CºåŞ式,可能会彻底删除某一资源åQŒä¹Ÿå¯èƒ½ä¼šæ¢å¤å·²¾låˆ é™¤çš„æŸä¸€èµ„源。这¿Uä¿è¯çš„¾~ÞZ¹ä¸ŽWeb提供的松耦合模型一致。如果需要,服务可以提供非Web服务架构所必需的附加保证ã€?/p>

    WS-Transfer的创建、更新和删除操作扩展了WS-MetadataExchange中的只读操作功能。检索操作与WS-MetadataExchange中的Get操作完全相同。Createè¯äh±‚发送给工厂。然后,工厂创徏被请求的资源òq¶ç¡®å®šå…¶åˆå§‹è¡¨ç¤ºå½¢å¼ã€‚工厂被假定与所创徏的资源不同。新资源被分配给一个在响应消息中返回的åQŒç”±æœåС军_®šçš„端点引用。Put操作通过提供一¿Uæ›¿æ¢è¡¨½CºåŞ式来更新资源。资源表½CºåŞ式的一‹Æ¡æ€§å¿«ç…§ä¸ŽWS-MetadataExchange中的Getæ“ä½œä¸€æ øP¼Œä¹Ÿå¯ä»¥é€šè¿‡WS-Transfer中的Get操作来检索。Delete操作成功后,资源ž®†æ— æ³•再通过端点引用来ä‹É用。这4个元数据½Ž¡ç†æ“ä½œæž„成了Web服务中状态管理的构徏基础ã€?/p>

事äšgåQˆEventingåQ?/h2>

    在由需要相互通信的服务构成的¾pȝ»Ÿä¸­ï¼Œå¯èƒ½ä¼šä‹É用异步消息传递。在很多情况下,ç”׃¸€ä¸ªæœåŠ¡ç”Ÿæˆçš„ä¿¡æ¯ä¹Ÿæ˜¯å…¶ä»–æœåŠ¡æ‰€éœ€è¦çš„ã€‚ç”±äºŽäŽ×¾~©æ€§å·®åQŒè½®è¯¢å¾€å¾€ä¸æ˜¯èŽ·å¾—˜q™ç§ä¿¡æ¯çš„æœ‰æ•ˆæ–¹æ³•;通过¾|‘络发送的不必要的消息太多了。相反,该架构需要一¿Uå½“事äšg发生时发出显式通知的机制。更重要的要求是源服务和用户服务的绑定必™åÕdœ¨˜qè¡Œæ—¶åŠ¨æ€å®Œæˆã€‚äØ“æ­¤ï¼ŒWeb服务架构提供了一个轻量çñ”事äšg协议ã€?/p>

    WS-Eventing详细说明了实çŽîC¸‹é?个实体交互的机制åQšè®¢æˆ—÷€è®¢é˜…管理器、事件源和事件接收。这使某一Web服务在作ä¸ÞZ¸€ä¸ªè®¢æˆäh—¶èƒ½å¤Ÿç™»è®°å®ƒå¯¹å¦ä¸€ä¸ªWeb服务åQˆäº‹ä»¶æºåQ‰æ‰€æä¾›çš„特定事件的兴趣。这¿Uæ³¨å†Œå«åšè®¢é˜…。WS-Eventing定义了某一服务可以提供的支持订阅创建和½Ž¡ç†çš„æ“ä½œã€‚当事äšg源判定有事äšg发生æ—Óž¼Œå®ƒå°±ä¼šå°†æ­¤ä¿¡æ¯æä¾›ç»™è®¢é˜…½Ž¡ç†å™¨ã€‚订阅管理器然后可以ž®†è¯¥äº‹äšg传送给所有匹配的订阅åQŒè¿™¾cÖM¼¼äºŽä¼ ¾lŸçš„发布/订阅事äšg通知¾pȝ»Ÿä¸­çš„发布主题。Web服务架构提供了主题定义、组¾l‡å’Œå‘现方式的全面灵‹zÀL€§ï¼›å®ƒäؓ在很多不同的应用场合中可能会用到的订阅提供了一个通用的管理基¼‹€æž¶æž„。也可以订阅出租的资源,但最¾lˆéƒ½å¿…须收回。用于收回资源的主要机制是各个订阅的到期旉™—´ã€‚查询订阅状态同样也有一¿UæœºåˆÓž¼Œå¸®åŠ©è®¢æˆ·½Ž¡ç†å…¶è‹¥òq²è®¢é˜…事™å¹ï¼ˆåŒ…括¾l­è®¢ã€é€šçŸ¥å’Œå–消订阅的è¯äh±‚åQ‰çš„附加操作规范中也有详¾l†è¯´æ˜Žã€‚当ç„Óž¼Œä»ÖM½•服务都可以随时自由地¾lˆæ­¢è®¢é˜…åQŒè¿™ä¸Žæ‰€æœ‰Web服务的自ä¸ÕdŽŸåˆ™ä¸€è‡´ã€‚è®¢é˜…ç»ˆæ­¢æ¶ˆæ¯å¯ä¾›äº‹ä»¶æºé€šçŸ¥è®¢æˆ·è®¢é˜…¾lˆæ­¢˜q‡æ—©ã€?/p>

    虽然åŸÞZºŽäº‹äšg的异步消息的一般模式很常见åQŒä½†ä¸åŒçš„应用通常都要求ä‹É用不同的事äšg传送机制。例如,在某些情况下½Ž€å•异步消息可能是最佳选择åQŒä½†å¦‚果事äšg接收能够通过轮询控制消息‹¹å’Œæ¶ˆæ¯åˆ°è¾¾æ—‰™—´åQŒåˆ™å…¶ä»–情况可能会更适用。当接收无法从源头到辄¡›®çš„地æ—Óž¼Œå¦‚接收有防火墙阻拦的情况下,轮询也是必要的。WS-Eventing中所引入的传送模式概念就是用来支持这些要求的。传送模式被用作一个扩展点åQŒä»¥ä¾¿äؓ订户、事件接收和事äšg源徏立定制的传送机制提供一¿Uæ‰‹ŒDüc€‚下˜q°ç®¡ç†è§„范利用了˜q™ç§æœºåˆ¶ã€?/p>

    事äšg代理可用于聚合或重新分配来自不同来源的通知åQŒä»£ç†è¿˜å¯ä»¥ç”¨ä½œç‹¬ç«‹çš„订阅管理器。这两个æ–ÒŽ(gu¨©)³•都得åˆîCº†WS-Eventing的支持。代理在¾pȝ»Ÿä¸­å¯ä»¥æ‰®æ¼”è‹¥òq²ä¸ªé‡è¦è§’色。主题可以按特定的应用类来组¾l‡ä‹É用。代理可以充当通知聚集器,用于整合来自多个来源的事件信息。它们也可以充当˜q‡æ×o器,˜q™æ¯”用于其自己通知的过滤器所接收的消息要多。这¿Uçµ‹zÀL€§æ˜¯éƒ¨çÖv健壮而可伸羃的通知¾pȝ»Ÿæ‰€å¿…需的ã€?/p>

½Ž¡ç†åQˆManagementåQ?/h2>

    ½Ž¡ç†åŠŸèƒ½æ˜¯è¦è®¨è®ºçš„Web服务架构的最后一个方面。这些功能在WS-Management规范中有详细的说明。WS-Management构徏于该架构的若òq²ç»„件之上,提供了所有系¾lŸç®¡ç†è§£å†Ïx–¹æ¡ˆéƒ½å¿…需的一个公共操作集。其中包括发现管理资源存在及其相互导航的能力。个别管理资源(如设¾|®å’ŒåŠ¨æ€å€û|¼‰å¯ä»¥è¢«æ£€ç´¢ã€è®¾¾|®ã€åˆ›å»ºå’Œåˆ é™¤ã€‚容器和集合的内容,如大表和日志åQŒå¯ä»¥è¢«æžšä‹D。规范最后定义了事äšg订阅和特定的½Ž¡ç†æ“ä½œã€‚在˜q™äº›æ–šw¢åQŒWS-Management只详¾l†è¯´æ˜Žäº†æœ€ä½Žçš„实现要求。规范还使符合WS-Management的实现可以部¾|²åˆ°ž®åž‹è®‘Ö¤‡ã€‚同æ—Óž¼Œå®ƒè¿˜æ”¯æŒå‘大型数据中心和分布式安装的扩展。此外,各种机制的定义都不依赖于ä»ÖM½•暗示的数据模型或¾pȝ»Ÿå¥åº·æ¨¡åž‹ã€‚è¿™¿Uç‹¬ç«‹æ€§ä‹É它可以应用到各种各样的Web服务ã€?/p>

    WS-Management要求托管资源的引用ä‹É用带有特定附加信息的端点引用。该信息包含了对该资源提供访问的代理的URL、该资源所属资源类型的唯一标识½W¦URI以及识别该资源的零个或更多个密钥。这些密钥被假设为名¿U?值对。该信息是这æ äh˜ ž®„到WS-Addressing端点引用的:资源的URL映射到地址属性,资源¾cÕdž‹æ ‡è¯†½W¦æ˜ ž®„到一个名为ResourceURIåQˆåœ¨é€‚当的XML命名½Iºé—´ä¸­ï¼‰çš„特定引用属性,各密钥分别映ž®„到一个名为Keyã€å±žæ€§äØ“Nameçš„å¼•ç”¨å‚æ•°ã€‚äØ“äº†æ»¡­‘³ç®¡ç†æœåŠ¡çš„æ¶ˆæ¯ä¼ é€’éœ€è¦ï¼Œè§„èŒƒä¸ºæ“ä½œå®šä¹‰äº†3个限定符。这些限定符的SOAP表示位于header元素中。operation timeout指定了一个截止时é—ß_¼Œä¹‹åŽæ“ä½œž®†ä¸éœ€è¦æŽ¥å—服务;locale元素在需要或期望转换底层信息时ä‹É用;freshness限定½W¦ç”¨äºŽè¯·æ±‚æœ€æ–°çš„å€¼åÆˆé¿å…˜q”回陈旧数据。对于ä‹É用WS-Transfer操作的数据访问,WS-Management指定了另å¤?个限定符。Get操作可用于SummaryPermitted headerå’ŒNoCache header。如果可用,SummaryPermitted限定½W¦å…è®æ€¼ è¾“简略表½CºåŞ式。NoCache限定½W¦è¦æ±‚传输最新数据,¼›æ­¢ä¿¡æ¯¾~“存。对于Putå’ŒCreate操作åQŒReturnResource限定½W¦è¦æ±‚服务返回资源的新表½CºåŞ式。ReturnResource使资源受限的Web服务能够在更新资源时不保留状态ã€?/p>

    WS-Managementä¸ÞZº‹ä»‰™€šçŸ¥å®šä¹‰äº?个自定义的传送模式:扏V€æ‹‰å’Œæ•莗÷€‚这些模式都由URI来识别,˜q™äº›URI在徏立订阅时使用。批传送模式ä‹É订户能够接收捆绑在一个SOAP消息中的多个事äšg消息。订户可能还会要求捆¾l‘某一最大数目的事äšg、服务收集事件可耗用的最长时é—ß_¼Œä»¥åŠåº”返回数据的最大量。拉传送模式ä‹É生成服务的数据能够维护事件的逻辑队列åQŒä»¥ä¾¿è®¢æˆ¯‚ƒ½å¤ŸæŒ‰éœ€è½®è¯¢é€šçŸ¥ã€‚该轮询是通过使用WS-Enumeration和返回时附带订阅响应消息的枚举上下文来完成的。最后,如果UDP多èµ\òq¿æ’­æ˜¯ä¸€¿Uåˆé€‚的消息传递方式,捕获传送模式便允许事äšg源ä‹É用它。在捕获模式下,事äšg源可以将光™€šçŸ¥å‘送给某一预定义的UDP多èµ\òq¿æ’­åœ°å€ã€?/p>

¾l“束è¯?/h1>

    本文介绍了Web服务架构的功能构造块及其底层原理。每个构造块都是依据协议规范来阐˜q°çš„。我们希望本文所˜q°çš„功能范围和指导原则保持不变。不˜q‡æˆ‘们也希望架构能够得到扩展åQŒä»¥æ”¯æŒæ›´å¤šæƒ…况。能够支持创新是该架构的基本特征ã€?/p>

    已经˜q›è¡Œçš„大量细致入微的工作可以¼‹®ä¿å„种Web服务协议能够不加变动地相互组合;ž®½ç®¡æ˜¯ä¸€èµ¯‚®¾è®¡çš„åQŒå®ƒä»¬ä»å¯ä»¥ä»¥éžå¸¸å¤šçš„ç»„åˆæ–¹å¼æ¥ä½¿ç”¨ã€‚å’ŒåŠŸèƒ½æž„é€ å—ä¸€æ øP¼Œå®ƒä»¬çš„ä‹É用方式与传统开发框架类伹{€‚必要时åQŒå¦‚对于SOAP附äšgåQŒæˆ‘们已¾lå¼€å‘了新的解决æ–ÒŽ(gu¨©)¡ˆåQŒè€Œä¸”不加变动它们ž®±å¯ä»¥å¾ˆå¥½åœ°ç”¨äºŽè¯¥æž¶æž„内。关注组合不是对丰富功能的威慑ã€?/p>

    该架构的SOAP消息传递基¼‹€ä¿è¯äº?foundation assures wide reach。SOAP消息传递以一¿Uä¼ è¾“独立的方式支持异步和同步模式。具有更高灵‹zÀL€§çš„åŸºç¡€æž¶æž„ä¸å­˜åœ¨ã€‚äØ“äº†åŠ å¿«Web服务架构的广泛采用,很多技术合作伙伴都参与了这些规范的制定。与˜q™äº›é‡è¦æŠ€æœ¯æä¾›ç¨‹åºçš„合作加快了设备和支持˜q™äº›åœ¨çº¿åè®®çš„ç¼–½E‹çŽ¯å¢ƒçš„éƒ¨çÖv。实现广泛覆盖、广泛采用和与规模无关的构造是我们çš?个核心目标。我们力争确保该架构能够在ä“Q何åã^åîC¸Šç”¨ä“Q何编½E‹è¯­­a€æ¥å®žçŽ°ã€‚è¯¥æž¶æž„åŸÞZºŽæ¶ˆæ¯çš„å’ŒåŸÞZºŽåè®®çš„ç‰¹æ€§äØ“æ­¤æä¾›äº†ä¾¿åˆ©ã€‚å¿…è¦æ—¶åQŒå¦‚只ä‹É用WS-Security来支持消息完整性、机密性和íw«ä†¾éªŒè¯åQŒä»¥åŠåªä½¿ç”¨WS-Policy来表½Cºå…ƒæ•°æ®æ—Óž¼Œæˆ‘们已经限定了用于提高互操作水åã^的技术方法的使用领域。理è®ÞZ¸Šè®ÔŒ¼Œåªè¦å®žçŽ°åˆ‡å®žéµå®ˆè¯¥æž¶æž„çš„åè®®è§„èŒƒåQŒå®ƒä»¬å°±èƒ½ä¸Žå…¶ä»–ä»ÖM½•Web服务通信ã€?/p>

附录AåQšæœ¯è¯­è¡¨

    ‹zÕdЍè¯äh±‚者(Active RequestoråQ‰â€”—活动请求者是能够发出如WS-Securityå’ŒWS-Trust中所˜q°çš„Web服务消息的应用程序(可能是Web‹¹è§ˆå™¨ï¼‰ã€?/p>

    íw«ä†¾éªŒè¯åQˆAuthenticationåQ‰â€”—验证安全凭证的˜q‡ç¨‹ã€?/p>

    授权åQˆAuthorizationåQ‰â€”—根据提供的安全凭证授权讉K—®å®‰å…¨èµ„源的过½E‹ã€?/p>

    规范化(CanonicalizationåQ‰â€”—将XML文档转换成符合每一方要求的格式的过½E‹ã€‚在½{‘֐æ–‡æ¡£å’Œè§£è¯‘签名时使用ã€?/p>

    断言åQˆClaimåQ‰â€”—断­a€æ˜¯å¯¹å‘送者、服务或其他资源åQˆå¦‚名称、èín份、密钥、组、特权、功能等åQ‰æ‰€ä½œçš„陈述ã€?/p>

    协调上下文(Coordination ContextåQ‰â€”—一¾l„协调服务要完成的一¾l„工作的唯一标识½W¦ã€?/p>

    反序列化åQˆDeserializationåQ‰â€”—从一个八位字节流构徏XML Infoset的过½E‹ã€‚它是用于从消息的有¾U¿æ ¼å¼åˆ›å»ºæ¶ˆæ¯çš„Infoset 表示形式的方法ã€?/p>

    摘要åQˆDigeståQ‰â€”—摘要是八位字节‹¹çš„加密校验和ã€?/p>

    域(DomainåQ‰â€”—安全域代表安全½Ž¡ç†æˆ–ä¿¡ä»Èš„一个单元ã€?/p>

    持久的两阶段提交åQˆDurable Two Phase CommitåQ‰â€”—用于文件或数据库等持久资源事务的协议ã€?/p>

    有效½{–ç•¥åQˆEffective PolicyåQ‰â€”—有效策略,针对某一¾l™å®šçš„策略主题,是附加在包含该策略主题的½{–略范围上的½{–ç•¥¾l„合ã€?/p>

    交换模式åQˆExchange PatternåQ‰â€”—用于服务之间消息交换的模式ã€?/p>

    工厂åQˆFactoryåQ‰â€”—工厂是可以从XML表示形式创徏资源的Web服务ã€?/p>

    联盟åQˆFederationåQ‰â€”â€”è”ç›Ÿæ˜¯å·²ç»å»ºç«‹ç›æ€º’ä¿¡ä“Q的信ä»ÕdŸŸçš„集合。信ä»Èñ”别可能变化,但通常都包括èín份验证,òq¶å¯èƒ½åŒ…括授权ã€?/p>

    íw«ä†¾æ˜ å°„åQˆIdentity MappingåQ‰â€”—èín份映ž®„是创徏íw«ä†¾å±žæ€§ä¹‹é—´å…³¾pȝš„一¿Uæ–¹æ³•。某些èín份提供程序可能会利用íw«ä†¾æ˜ å°„ã€?/p>

    íw«ä†¾æä¾›½E‹åºåQˆIPåQŒIdentity ProvideråQ‰â€”—èín份提供程序是为最¾lˆè¯·æ±‚者提供èín份验证服务的实体。èín份提供程序还为服务提供程序提供数据源验证服务åQˆè¿™é€šå¸¸æ˜¯å®‰å…¨æ€§ä×o牌服务的一¿Uæ‰©å±•)ã€?/p>

    消息åQˆMessageåQ‰â€”—消息是可由服务发送或接收的完整数据单元。它是信息交换的独立单元。无è®ÞZ½•时消息都会包含SOAP信封åQŒåƈ有可能包含附加MTOM中指定的MIME部äšg、传输协议headerã€?/p>

    消息路径åQˆMessage PathåQ‰â€”—遍布在初始源和最¾lˆæŽ¥æ”¶è€…之间的SOAP节点集ã€?/p>

    被动è¯äh±‚者(Passive RequestoråQ‰â€”—被动请求者是一个ä‹É用得到普遍支持的HTTPåQˆå¦‚HTTP/1.1åQ‰çš„HTTP‹¹è§ˆå™¨ã€?/p>

    ½{–ç•¥åQˆPolicyåQ‰â€”—策略就是策略选项集ã€?/p>

    ½{–略选项åQˆPolicy AlternativeåQ‰â€”—策略选项ž®±æ˜¯½{–略断言集ã€?/p>

    ½{–略断言åQˆPolicy AssertionåQ‰â€”—策略断­a€è¡¨ç¤ºç‰¹å®šäºŽåŸŸçš„å•ä¸ªè¦æ±‚ã€åŠŸèƒ½ã€å…¶ä»–å±žæ€§æˆ–è¡ŒäØ“ã€?/p>

    ½{–略表达式(Policy ExpressionåQ‰â€”—策略表辑ּæ˜¯ç­–略的XML Infoset表示形式åQŒå¯ä»¥æ˜¯æ­£è§„形式åQŒä¹Ÿå¯ä»¥æ˜¯ç­‰åŒçš„压羃形式ã€?/p>

    ä¸ÖM½“åQˆPrincipalåQ‰â€”—可以被授予安全权限或可以给出安全性或íw«ä†¾æ–­è¨€çš„ä“Q何系¾lŸå®žä½“ã€?/p>

    协议¾l„合åQˆProtocol CompositionåQ‰â€”—协议组合是在保持技术连贯性的同时¾l„合协议òq‰™¿å…ä“Q何非指定功能副作用的能力ã€?/p>

    资源åQˆResourceåQ‰â€”—资源是可由端点引用å¯Õd€çš„ä“Q何实体,在该端点引用中,该实体可以提供其自èínçš„XML表示形式ã€?/p>

    安全上下文(Security ContextåQ‰â€”—安全上下文是一个抽象概念,指的是已建立的èín份验证状态和可能å…ähœ‰ä¸Žå®‰å…¨æœ‰å…³çš„附加属性的协商密钥ã€?/p>

    安全上下文ä×o牌(Security Context TokenåQ‰â€”—安全上下文令牌åQˆSCTåQ‰æ˜¯å®‰å…¨ä¸Šä¸‹æ–‡æŠ½è±¡æ¦‚å¿ëŠš„有线表示形式åQŒå®ƒä½¿ä¸Šä¸‹æ–‡èƒ½å¤Ÿè¢«URI命名òq¶å’Œä¸€èµ·ä‹É用ã€?/p>

    安全性ä×o牌(Security TokenåQ‰â€”—安全性ä×o牌用于表½CÞZ¸€¾l„æ–­­a€çš„集合ã€?/p>

    安全性ä×o牌服务(Security Token ServiceåQ‰â€”—安全性ä×o牌服务(STSåQ‰å‘行安全性ä×o牌的Web服务。更¼‹®åˆ‡åœ°è¯´åQŒå®ƒæ ÒŽ(gu¨©)®å®ƒæ‰€ä¿¡ä“Q的证据来作出断言åQŒåƈ发送给信ä“Q它的ä»ÖM½•ä¸€æ–¹ï¼ˆæˆ–ç‰¹å®šæŽ¥æ”¶è€…ï¼‰ã€‚äØ“äº†è¡¨æ˜Žä¿¡ä»»ï¼ŒæœåŠ¡éœ€è¦è¯æ®ï¼ˆå¦‚ç­¾åï¼‰åQŒä»¥è¯å®žå®‰å…¨æ€§ä×o牌或安全性ä×o牌集提供的信息。服务本íw«å¯ä»¥ç”Ÿæˆä×o牌,也可以通过它自å·Þqš„ä¿¡ä“Q陈述依靠某一独立的STS发行安全性ä×o牌(注意åQŒå¯¹äºŽæŸäº›å®‰å…¨æ€§ä×o牌格式,˜q™åªèƒ½æ˜¯é‡æ–°å‘行或联合签名)。这构成了信ä»ÖM»£ç†çš„基础ã€?/p>

    序列化(SerializationåQ‰â€”—将XML Infoset表示为八位字节流的过½E‹ã€‚它是用于创建消息的有线格式的方法ã€?/p>

    服务åQˆServiceåQ‰â€”—通过消息来与其他实体˜q›è¡Œäº¤äº’çš„èÊY件实体。注意,服务不需要连接到¾|‘络ã€?/p>

    ½{‘֐åQˆSignatureåQ‰â€”—签名是通过加密½Ž—法计算出来åQŒåƈ¾l‘定到数据的一个倹{€‚而且¾lè¿‡¾l‘定åQŒæ•°æ®çš„æŒ‡å®šæŽ¥æ”¶è€…可以ä‹É用该½{‘֐æ¥éªŒè¯æ•°æ®æ²¡æœ‰æ”¹å˜åƈ发自消息的签名者,从而提供了消息完整性和íw«ä†¾éªŒè¯ã€‚签名的计算和验证可以通过对称或非对称密钥½Ž—法来进行ã€?/p>

    退出(Sign-OutåQ‰â€”—退出是˜q™æ ·ä¸€ä¸ªè¿‡½E‹ï¼šæŸä¸»ä½“表明它们将不再使用其ä×o牌且该域中的服务可能会破坏该ä¸ÖM½“令牌¾~“å­˜ã€?/p>

    单点ç™Õd½•åQˆSSOåQŒSingle Sign OnåQ‰â€”—单点登录是对èín份验证序列的一¿Uä¼˜åŒ–,旨在消除在请求者èínä¸Šè¿›è¡Œçš„åå¤æ“ä½œè´Ÿæ‹…ã€‚äØ“äº†ä¾¿äºŽè¿›è¡ŒSSOåQŒç§°ä¸ø™ín份提供程序(Identity ProvideråQ‰çš„元素能够以请求者的名义充当代理åQŒå°†íw«ä†¾éªŒè¯äº‹äšg的证据提供给è¯äh±‚该请求者信息的½W¬ä¸‰æ–V€‚这些èín份提供程序(IPåQ‰æ˜¯å—ä¿¡ä»Èš„½W¬ä¸‰æ–¹ï¼Œæ—¢éœ€è¦å¾—到请求者的信ä“QåQˆä»¥¾l´æŠ¤è¯äh±‚者的íw«ä†¾ä¿¡æ¯åQŒå› ä¸ø™¯¥ä¿¡æ¯çš„丢失可能会泄露è¯äh±‚者èín份)åQŒåˆéœ€è¦å¾—到Web服务的信任,Web服务可能会根据该IP提供的èín份信息的完整性提供对重要资源和信息的讉K—®æƒã€?/p>

    SOAP中介åQˆSOAP IntermediaryåQ‰â€”—SOAP中介是一个SOAP处理节点åQŒå®ƒæ—¢ä¸æ˜¯åŽŸå§‹æ¶ˆæ¯å‘é€è€…ï¼Œä¹Ÿä¸æ˜¯æœ€¾lˆæŽ¥æ”¶è€…ã€?/p>

    对称密钥½Ž—法åQˆSymmetric Key AlgorithmåQ‰â€”—一¿UåŠ å¯†ç®—æ³•ï¼Œå…¶ä¸­çš„æ¶ˆæ¯åŠ å¯†å’Œè§£å¯†éƒ½ä‹É用相同的密钥ã€?/p>

    ¾pȝ»ŸåQˆSystemåQ‰â€”—实现某一特定功能的服务的集合。与分布式应用程序意思相同ã€?/p>

    ä¿¡ä“QåQˆTruståQ‰â€”—信任表½CÞZ¸€ä¸ªå®žä½“愿意依靠另一个实体来执行一¾l„操作,对一¾l„主题、范围作å‡ÞZ¸€¾l„æ–­­a€ã€?/p>

    ä¿¡ä“Q域(Trust DomainåQ‰â€”—信ä»ÕdŸŸæ˜¯ä¸€ä¸ªå¾—到有效管理的安全½Iºé—´åQŒåœ¨å…¶ä¸­åQŒè¯·æ±‚的来源和目标可以确定来自某一来源的特定凭证集是否½W¦åˆè¯¥ç›®æ ‡çš„相关安全½{–ç•¥åQŒåƈå¯ÒŽ(gu¨©)­¤è¾¾æˆä¸€è‡´ã€‚目标可以将信ä“Q军_®šå»¶æœŸè‡³ç¬¬ä¸‰æ–¹çš„加入(如果˜q™å·²è¢«ç¡®ç«‹äؓ一致意见的一部分åQ‰ï¼Œä»Žè€Œå°†å—ä¿¡ä»Èš„½W¬ä¸‰æ–¹åŒ…括在信ä“Q域中ã€?/p>

    易失的两阶段提交åQˆVolatile Two Phase CommitåQ‰â€”—用于缓存或½H—口½Ž¡ç†å™¨ç­‰æ˜“失资源事务的协议ã€?/p>

    Web服务åQˆWeb ServiceåQ‰â€”—Web服务是一¿Uå¯é‡å¤ä½¿ç”¨çš„èÊY件组ä»Óž¼Œå®ƒä¾æ®XML、SOAP和其他业界公认的标准通过¾|‘络实现交互式的消息交换ã€?/p>

附录BåQšXML Infoset信息™å?/h1>

    XML文档可以包含11¾cÖM¿¡æ¯é¡¹ã€‚下面,我们列出òq¶è¯¦¾l†è¯´æ˜Žäº†SOAP所支持的信息项åQŒåƈ½Ž€è¦ä»‹¾läº†å…¶ä»–的信息项。SOAP支持6¾cÖM¿¡æ¯é¡¹åQ?/p>

  1. 文档åQˆDocumentåQ‰ï¼šæ¯ä¸ªä¿¡æ¯é›†é‡Œéƒ½æœ‰ä¸€ä¸ªæ–‡æ¡£ä¿¡æ¯é¡¹ã€‚它用于引用所有的其他信息™åV€?
  2. 元素åQˆElement:åQ‰ï¼šæ–‡æ¡£ä¸­æ¯ä¸ªXML元素的信息集中都包含一个元素信息项。对所有元素的讉K—®æ˜¯é€šè¿‡å¯¹Child属性的递归跟踪提供的ã€?
  3. 属æ€?Attribute)åQšæ–‡æ¡£ä¸­æ¯ä¸ªå±žæ€§çš„ä¿¡æ¯é›†ä¸­éƒ½åŒ…å«ä¸€ä¸ªå±žæ€§ä¿¡æ¯é¡¹ã€‚é™„åŠ å±žæ€§ä¿¡æ¯é¡¹ç”¨äºŽå‘½å½Iºé—´ã€?
  4. 命名½Iºé—´(Namespace)åQšæ¯ä¸ªåœ¨å…¶çˆ¶å…ƒç´ èŒƒå›´å†…çš„åç§°½Iºé—´ä¿¡æ¯é›†ä¸­éƒ½åŒ…含一个名¿U°ç©ºé—´ä¿¡æ¯é¡¹ã€?
  5. 字符(Character)åQšæ–‡æ¡£ä¸­æ¯ä¸ªæ•°æ®å­—ç¬¦çš„ä¿¡æ¯é›†ä¸­éƒ½åŒ…å«ä¸€ä¸ªå­—½W¦ä¿¡æ¯é¡¹ã€?
  6. 注释(Comment)åQšé™¤äº†å‡ºçŽ°åœ¨DTD中的以外åQŒæ–‡æ¡£ä¸­æ¯ä¸ªæ³¨é‡Šçš„信息集中都包含一个注释信息项ã€?

    SOAP不支持但出现在XML Infoset初始定义中的5¾cÖM¿¡æ¯é¡¹æ˜¯ï¼šå¤„理指ä×o(Processing Instruction)、文档类型声æ˜?Document Type Declaration)、未扩展的实体引ç”?Unexpanded Entity Reference)、未解析实体(Unparsed Entity)和表½Cºæ³•(Notation)ã€?/p>

附录CåQšå¸¸è§çš„安全æ”Õd‡»

    对分布式¾pȝ»Ÿçš„æ”»å‡Õd¯ä»¥åˆ†ä¸ø™‹¥òq²ä¸ªæ–šw¢ã€‚它们可以指向系¾lŸä¸­çš„一个或多个ä¸ÀLœºåQŒæˆ–指向它们之间的通信¾|‘èµ\。攻å‡Èš„目的可能是中断操作、获得机密信息或在系¾lŸå†…部执行未授权的操作。它们可能会æ”Õd‡»¾pȝ»Ÿä¸­æ‰€ä½¿ç”¨çš„åŠ å¯†æŠ€æœ¯æˆ–ä»¥å®‰å…¨æ€§äØ“ä¸­å¿ƒçš„å…¶ä»–æŠ€æœ¯ï¼Œä¹Ÿå¯èƒ½ä¼å›ùN€šè¿‡æ”Õd‡»ä¸‹é¢çš„ç³»¾lŸå’Œ¾|‘络层或上面的应用层来旁路它们。以下是一个简短的不全面的安全性攻å‡È±»åŠé’ˆå¯ÒŽ(gu¨©)¯¾cÀL”»å‡Èš„标准对策的列表,它们是按上述的几个方面组¾l‡ç¼–排的åQ?/p>

对主机的æ”Õd‡»

  • 拒绝服务åQˆDoSåQŒDenial-of-ServiceåQ‰æ”»å‡»é€šè¿‡å‡Õdž®ä¸ÀLœºçš„响应能力来中断其操ä½?

    当指向加密层æ—Óž¼ŒDoS通常会尽力迫使主机反复执行特定èín份验证或密钥交换协议所需的计½Ž—代价高昂的公钥操作。对抗这¾cÀL”»å‡Èš„典型防å±M措施是åšg˜qŸå…¬é’¥æ“ä½œï¼Œç›´åˆ°å¯¹è¯è€…的合法性能够通过èŠÞp´¹è¾ƒå°‘的方法(如对¿U°åŠ å¯†æˆ–â€œè°œè¯­â€ï¼‰æ¥éªŒè¯æ—¶ä¸ºæ­¢ã€‚DoS对底层网¾lœå±‚或顶层应用层的攻å‡Õd¾ˆéšùN¢„é˜ÔŒ¼Œç‰¹åˆ«æ˜¯åœ¨æ”Õd‡»è€…控制着大量资源且通信量处于正帔R€šä¿¡é‡éš¾ä»¥è§‰å¯Ÿçš„æƒ…况下。要实现¾|‘络基础架构的部¾|ÔŒ¼Œé€šå¸¸å¿…须通过漏斗方式ž®†é€šä¿¡é‡é™è‡³ä¸€ä¸ªå¯½Ž¡ç†æ°´åã^ã€?/p>

  • ä¸ÀLœºæœºå¯†æ€§æˆ–授权æ”Õd‡»ä¼å›¾æ³„露隐私或èínä»?

    ˜q™äº›æ”Õd‡»å¯èƒ½ä¼šåˆ©ç”¨ä¸»æœø™ÊY件中的薄å¼Þq‚¹æ¥è޷得坹ä¸ÀLœºçš„æŽ§åˆ¶ã€‚适当的安全性管理,如安装补丁、配¾|®é˜²ç«å¢™ä»¥åŠå‰Šå‡æš´éœ²åº”用½E‹åºçš„特权,是比较常用的对策。另一¾cÀL”»å‡Õdˆ©ç”¨ç³»¾lŸæˆ–应用½E‹åºä¸­çš„å¼Þq‚¹åQŒå¦‚讄¡½®ä¸æ­£¼‹®çš„½{–略或应用程序逻辑错误åQŒé™¤äº†ä¸€èˆ¬çš„ä¸ÀLœºæ³„密以外åQŒå®ƒä»¬è¿˜ä¼šè€ƒè™‘机密性或授权泄密。恰当的安全性策略管理和周密的应用程序设计是对付˜q™ç±»æ”Õd‡»çš„唯一防å±M措施。在“电子欺骗”攻å‡ÖM¸­åQŒæ”»å‡»è€…企å›ùN€šè¿‡å†’用某一¾lè¿‡æŽˆæƒçš„其他方的èínä»½åÆˆåšå‡ºç›¸åº”çš„è¡Œä¸ºæ¥èŽ·å¾—å¯¹å„¿Uæ“ä½œçš„æŽˆæƒã€‚只要主机和¾læŽˆæƒæ–¹åˆ‡å®žä¿æŠ¤å¥½èín份验证密码,òq¶æ­£¼‹®ä‹É用安全的íw«ä†¾éªŒè¯åè®®åQŒå°±å¯ä»¥é¢„防电子‹Æºéª—ã€?/p>

寚w€šä¿¡¾|‘èµ\的攻å‡?/h2>
  • DoS对网¾lœçš„æ”Õd‡»è¯•图中断与服务的通信

    和对ä¸ÀLœº¾|‘络层的æ”Õd‡»ä¸€æ øP¼Œ˜q™äº›æ”Õd‡»¼‹®å®žä¹Ÿåªèƒ½ä‹É用网¾lœåŸº¼‹€æž¶æž„æ–ÒŽ(gu¨©)³•来应寏V€?/p>

  • 对网¾lœé€šä¿¡æœºå¯†æ€§çš„æ”Õd‡»ä¼å›¾åœ¨çº¿æ³„露隐私

    明文通信的直接监听可以通过加密来阻止。通过­‘›_¤Ÿå¼ºå¤§çš„加密算法和­‘›_¤Ÿé•¿çš„密钥åQŒå¯†ç åˆ†æžæ”»å‡ÖM¹Ÿå¯ä»¥è¢«æ‰¼åˆ¶ã€?/p>

  • 对网¾lœé€šä¿¡æŽˆæƒçš„æ”»å‡ÖM¼å›¾æ³„露èínä»?

    æ”Õd‡»è€…企囑ְ†æ¶ˆæ¯æ’入会话的“消息伪造攻几Z€å’Œæ”Õd‡»è€…修改会话中发送的消息的消息,变更æ”Õd‡»éƒ½å¯ä»¥é€šè¿‡åŒ…含消息íw«ä†¾éªŒè¯çš„æ¶ˆæ¯å®‰å…¨æ€§åè®®æ¥é˜ÀL­¢ã€‚攻击者将以前发送的åQˆå› è€Œé€šè¿‡äº†æ­£¼‹®çš„íw«ä†¾éªŒè¯åQ‰æ¶ˆæ¯æ’入会话的消息重放åQŒæ”»å‡Õd¯ä»¥é€šè¿‡åºå·æˆ–时间戳和消息缓存的¾l„合来检‹¹‹å’Œé˜ÀL­¢ã€?br />




]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ¹ÉƱ| ÃÖ¶ÉÏØ| ÒÇÕ÷ÊÐ| Âó¸ÇÌáÏØ| Í­É½ÏØ| ̨±±ÊÐ| ÄϰÄÏØ| µÂÇåÏØ| ³É¶¼ÊÐ| º¼½õÆì| °²ÏçÏØ| IJ¶¨ÏØ| Ïã¸Û | ɽ¶«Ê¡| ´ïÖÝÊÐ| ²©¿Í| ÑγØÏØ| »ÆæèÊÐ| ̨°²ÏØ| ¼´Ä«ÊÐ| ×ÊÐËÊÐ| ÐËÉ½ÏØ| ãðÑôÏØ| ͨÖÝÊÐ| °¢À­ÉÆÓÒÆì| Î¢É½ÏØ| ËÉÌÒ| ·À³Ç¸ÛÊÐ| ³¤ÐËÏØ| ʯ¾°É½Çø| °²ÁúÏØ| ÎÌÅ£ÌØÆì| ¾üÊÂ| ÀÉÏªÏØ| ÉÌÄÏÏØ| ͨ»¯ÏØ| Í­¹ÄÏØ| ÏéÔÆÏØ| ÁéÎäÊÐ| ǨÎ÷ÏØ| ¿Í·þ|