锘??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩亚洲国产综合高清,亚洲欧美第一成人网站7777,亚洲情综合五月天http://www.tkk7.com/mlzry0612/articles/397400.htmlDanielDanielFri, 05 Apr 2013 05:38:00 GMThttp://www.tkk7.com/mlzry0612/articles/397400.htmlhttp://www.tkk7.com/mlzry0612/comments/397400.htmlhttp://www.tkk7.com/mlzry0612/articles/397400.html#Feedback1http://www.tkk7.com/mlzry0612/comments/commentRss/397400.htmlhttp://www.tkk7.com/mlzry0612/services/trackbacks/397400.html闃呰鍏ㄦ枃

Daniel 2013-04-05 13:38 鍙戣〃璇勮
]]>
Algorithms Chapter2 Answerhttp://www.tkk7.com/mlzry0612/articles/Algorithms.htmlDanielDanielMon, 23 Jul 2012 14:12:00 GMThttp://www.tkk7.com/mlzry0612/articles/Algorithms.htmlhttp://www.tkk7.com/mlzry0612/comments/383795.htmlhttp://www.tkk7.com/mlzry0612/articles/Algorithms.html#Feedback0http://www.tkk7.com/mlzry0612/comments/commentRss/383795.htmlhttp://www.tkk7.com/mlzry0612/services/trackbacks/383795.html2.1-1榪欓鍙互鍙傜収涔︿笂17鑷繁緇欏嚭榪囩▼錛岃繖閲屽氨鐣ュ幓浜嗐?/p>

2.1-2 鍏堢粰鍑轟功涓奿nsertion-sort鐨凜婧愪唬鐮佸惂錛岀劧鍚庡啀緇欏嚭鎸夌収闈炲崌搴忕殑浠g爜錛?/p>

璇炬湰涓?闈為檷搴忕殑)insertion-sort浠g爜錛?/p>

 

  1. void insertion_sort(int *A, int n)  
  2. {  
  3.     int i,j;  
  4.     int key; 
  5.  
  6.     for(i = 1; i < n; i++)  
  7.     {  
  8.         j = i - 1;  
  9.         key = A[i]; 
  10.  
  11.         while(j >= 0 && A[j] > key)  
  12.         {  
  13.             A[j+1] = A[j];  
  14.             j = j - 1;  
  15.         } 
  16.  
  17.         A[j+1] = key;  
  18.     }  

 

鍦ㄨ繖棰樹腑錛屽彧瑕佽闈為檷搴忔敼鎴愰潪鍗囧簭鎺掑簭錛屾墍浠ユ敼鍚庝唬鐮佸涓嬶細

 

  1. void insertion_sort(int *A, int n)  
  2. {  
  3.     int i,j;  
  4.     int key; 
  5.  
  6.     for(i = 1; i < n; i++)  
  7.     {  
  8.         j = i - 1;  
  9.         key = A[i]; 
  10.  
  11.         while(j >= 0 && A[j] < key)  
  12.         {  
  13.             A[j+1] = A[j];  
  14.             j = j - 1;  
  15.         } 
  16.  
  17.         A[j+1] = key;  
  18.     }  

 

2.1-3榪欓緇欏嚭浼唬鐮侊細

 

  1. int find(int *A , int n, int v) 
  2.  
  3.  
  4.     int  i = 0; 
  5.  
  6.     for( ; i < n; i++) 
  7.  
  8.     { 
  9.  
  10.         if(v == A[i]) 
  11.  
  12.             return i; 
  13.  
  14.     } 
  15.  
  16.   
  17.  
  18.     return NIL; 
  19.  

 

2.1-4鐩存帴緇欏嚭浠g爜錛?/p>

 

  1. /*鍦ˋ[]鍜孊[]涓紝鏁扮粍鐨勬渶浣庝綅瀵瑰簲涓庝簩榪涘埗鐨勯珮浣嶏紝鍗沖鏋滀竴涓簩榪涘埗鏁版槸011100錛岀敤鏁扮粍琛ㄧず灝辨槸A[] = {0,1,1,1,0,0}*/ 
  2.  
  3. void add(int *A ,int *B, int *C, int n)  
  4. {  
  5.     int i, a, c = 0;  
  6.     int s;  
  7.     for(i = n - 1; i >= 0 ; i--)  
  8.     {  
  9.         s = A[i] + B[i];  
  10.          
  11.         C[i+1] = (s + c) % 2;  
  12.         c = (s + c) / 2;  
  13.     } 
  14.  
  15.     C[0] = c;  

 



Daniel 2012-07-23 22:12 鍙戣〃璇勮
]]>
浼樺寲灞忛殰鍜屽唴瀛樺睆闅?/title><link>http://www.tkk7.com/mlzry0612/articles/381414.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Mon, 25 Jun 2012 04:05:00 GMT</pubDate><guid>http://www.tkk7.com/mlzry0612/articles/381414.html</guid><wfw:comment>http://www.tkk7.com/mlzry0612/comments/381414.html</wfw:comment><comments>http://www.tkk7.com/mlzry0612/articles/381414.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/mlzry0612/comments/commentRss/381414.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/mlzry0612/services/trackbacks/381414.html</trackback:ping><description><![CDATA[<p style="border: 0px; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px; color: #4d4d4d; font-family: 'Helvetica Neue', Arial, 'Lucida Grande', 'Lucida Sans Unicode', 'Microsoft YaHei', sans-serif; line-height: 20px; text-align: left; background-color: #ffffff; "><span style="border: 0px; font-size: 18px; margin: 0px; outline: 0px; padding: 0px; "><strong style="border: 0px; font-size: 18px; margin: 0px; outline: 0px; padding: 0px; color: #2e2e2e; "><span style="border: 0px; font-size: 18px; margin: 0px; outline: 0px; padding: 0px; font-family: arial, helvetica, sans-serif; "><span style="border: 0px; font-size: 18px; margin: 0px; outline: 0px; padding: 0px; color: #008000; ">浼樺寲灞忛殰鍜屽唴瀛樺睆闅?/span></span></strong></span></p><p style="border: 0px; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px; color: #4d4d4d; font-family: 'Helvetica Neue', Arial, 'Lucida Grande', 'Lucida Sans Unicode', 'Microsoft YaHei', sans-serif; line-height: 20px; text-align: left; background-color: #ffffff; "><strong style="border: 0px; margin: 0px; outline: 0px; padding: 0px; color: #2e2e2e; "><span style="border: 0px; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; "><span style="border: 0px; margin: 0px; outline: 0px; padding: 0px; color: #0000ff; "><span style="border: 0px; margin: 0px; outline: 0px; padding: 0px; font-family: arial, helvetica, sans-serif; ">浼樺寲灞忛殰 </span></span></span></strong><strong style="border: 0px; margin: 0px; outline: 0px; padding: 0px; color: #2e2e2e; "><span style="border: 0px; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; "><span style="border: 0px; margin: 0px; outline: 0px; padding: 0px; color: #0000ff; "><span style="border: 0px; margin: 0px; outline: 0px; padding: 0px; font-family: arial, helvetica, sans-serif; ">(Optimization Barrier)</span></span></span></strong></p><p style="border: 0px; font-size: 12px; margin: 0px 0px 9px; outline: 0px; padding: 0px; text-align: left; background-color: #ffffff; line-height: normal; font-family: song, Verdana; border-collapse: collapse; "><span style="border: 0px; margin: 0px; outline: 0px; padding: 0px; font-family: arial, helvetica, sans-serif; "><span style="border: 0px; font-size: 14px; margin: 0px; outline: 0px; padding: 0px; ">緙栬瘧鍣ㄧ紪璇戞簮浠g爜鏃訛紝浼氬皢婧愪唬鐮佽繘琛屼紭鍖栵紝灝嗘簮浠g爜鐨勬寚浠よ繘琛岄噸鎺掑簭錛屼互閫傚悎浜嶤PU鐨勫茍琛屾墽琛屻傜劧鑰岋紝鍐呮牳鍚屾蹇呴』閬垮厤鎸囦護閲嶆柊鎺掑簭錛屼紭鍖栧睆闅滐紙Optimization barrier錛夐伩鍏嶇紪璇戝櫒鐨勯噸鎺掑簭浼樺寲鎿嶄綔錛屼繚璇佺紪璇戠▼搴忔椂鍦ㄤ紭鍖栧睆闅滀箣鍓嶇殑鎸囦護涓嶄細鍦ㄤ紭鍖栧睆闅滀箣鍚庢墽琛屻?br style="font-family: song, Verdana; font-size: 12px; " /><br />Linux鐢ㄥ畯barrier瀹炵幇浼樺寲灞忛殰錛実cc緙栬瘧鍣ㄧ殑浼樺寲灞忛殰瀹忓畾涔夊垪鍑哄涓嬶紙鍦╥nclude/linux/compiler-gcc.h涓級錛?nbsp;<br style="font-family: song, Verdana; font-size: 12px; " /><br />#define barrier() __asm__ __volatile__("": : :"memory")</span></span></p><p style="border: 0px; font-size: 12px; margin: 0px 0px 9px; outline: 0px; padding: 0px; text-align: left; background-color: #ffffff; line-height: normal; font-family: song, Verdana; border-collapse: collapse; "><span style="border: 0px; margin: 0px; outline: 0px; padding: 0px; font-family: arial, helvetica, sans-serif; "><span style="border: 0px; font-size: 14px; margin: 0px; outline: 0px; padding: 0px; ">涓婅堪瀹氫箟涓紝“__asm__”琛ㄧず鎻掑叆浜嗘眹緙栬璦紼嬪簭錛?#8220;__volatile__”琛ㄧず闃繪緙栬瘧鍣ㄥ璇ュ艱繘琛屼紭鍖栵紝紜繚鍙橀噺浣跨敤浜嗙敤鎴峰畾涔夌殑綺劇‘鍦板潃錛岃屼笉鏄鏈夊悓涓淇℃伅鐨勪竴浜涘埆鍚嶃?#8220;memory”琛ㄧず鎸囦護淇敼浜嗗唴瀛樺崟鍏冦?/span></span></p><p style="border: 0px; font-size: 12px; margin: 0px 0px 9px; outline: 0px; padding: 0px; text-align: left; background-color: #ffffff; line-height: normal; font-family: song, Verdana; border-collapse: collapse; "></p><p style="border: 0px; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px; color: #4d4d4d; font-family: 'Helvetica Neue', Arial, 'Lucida Grande', 'Lucida Sans Unicode', 'Microsoft YaHei', sans-serif; line-height: 20px; text-align: left; background-color: #ffffff; "><strong style="border: 0px; margin: 0px; outline: 0px; padding: 0px; color: #2e2e2e; "><span style="border: 0px; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; "><span style="border: 0px; margin: 0px; outline: 0px; padding: 0px; color: #0000ff; "><span style="border: 0px; margin: 0px; outline: 0px; padding: 0px; font-family: arial, helvetica, sans-serif; ">鍐呭瓨灞忛殰 (Memory Barrier)</span></span></span></strong></p><p style="border: 0px; font-size: 12px; margin: 0px 0px 9px; outline: 0px; padding: 0px; text-align: left; background-color: #ffffff; line-height: normal; font-family: song, Verdana; border-collapse: collapse; "><span style="border: 0px; margin: 0px; outline: 0px; padding: 0px; font-family: arial, helvetica, sans-serif; "><span style="border: 0px; font-size: 14px; margin: 0px; outline: 0px; padding: 0px; ">杞歡鍙氳繃璇誨啓灞忛殰寮哄埗鍐呭瓨璁塊棶嬈″簭銆傝鍐欏睆闅滃儚涓鍫靛錛屾墍鏈夊湪璁劇疆璇誨啓灞忛殰涔嬪墠鍙戣搗鐨勫唴瀛樿闂紝蹇呴』鍏堜簬鍦ㄨ緗睆闅滀箣鍚庡彂璧風殑鍐呭瓨璁塊棶涔嬪墠瀹屾垚錛岀‘淇濆唴瀛樿闂寜紼嬪簭鐨勯『搴忓畬鎴愩?br style="font-family: song, Verdana; font-size: 12px; " /><br />璇誨啓灞忛殰閫氳繃澶勭悊鍣ㄦ瀯鏋剁殑鐗規畩鎸囦護mfence錛堝唴瀛樺睆闅滐級銆乴fence錛堣灞忛殰錛夊拰sfence錛堝啓灞忛殰錛夊畬鎴愶紝瑙併妜86-64鏋勬灦瑙勮寖銆嬩竴绔犮傚彟澶栵紝鍦▁86-64澶勭悊鍣ㄤ腑錛屽紜歡榪涜鎿嶄綔鐨勬眹緙栬璦鎸囦護鏄?#8220;涓茶鐨?#8221;錛屼篃鍏鋒湁鍐呭瓨灞忛殰鐨勪綔鐢紝濡傦細瀵笽/O绔彛榪涜鎿嶄綔鐨勬墍鏈夋寚浠ゃ佸甫lock鍓嶇紑鐨勬寚浠や互鍙婂啓鎺у埗瀵勫瓨鍣ㄣ佺郴緇熷瘎瀛樺櫒鎴栬皟璇曞瘎瀛樺櫒鐨勬墍鏈夋寚浠わ紙濡傦細cli鍜宻ti錛夈?br style="font-family: song, Verdana; font-size: 12px; " /><br />Linux鍐呮牳鎻愪緵鐨勫唴瀛樺睆闅淎PI鍑芥暟璇存槑濡傝〃2銆傚唴瀛樺睆闅滃彲鐢ㄤ簬澶氬鐞嗗櫒鍜屽崟澶勭悊鍣ㄧ郴緇燂紝濡傛灉浠呯敤浜庡澶勭悊鍣ㄧ郴緇燂紝灝變嬌鐢╯mp_xxx鍑芥暟錛屽湪鍗曞鐞嗗櫒緋葷粺涓婏紝瀹冧滑浠涔堥兘涓嶈銆?/span></span></p><img src ="http://www.tkk7.com/mlzry0612/aggbug/381414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/mlzry0612/" target="_blank">Daniel</a> 2012-06-25 12:05 <a href="http://www.tkk7.com/mlzry0612/articles/381414.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Java concurrent 鎬葷粨涓http://www.tkk7.com/mlzry0612/articles/381400.htmlDanielDanielMon, 25 Jun 2012 01:37:00 GMThttp://www.tkk7.com/mlzry0612/articles/381400.htmlhttp://www.tkk7.com/mlzry0612/comments/381400.htmlhttp://www.tkk7.com/mlzry0612/articles/381400.html#Feedback0http://www.tkk7.com/mlzry0612/comments/commentRss/381400.htmlhttp://www.tkk7.com/mlzry0612/services/trackbacks/381400.html闃呰鍏ㄦ枃

Daniel 2012-06-25 09:37 鍙戣〃璇勮
]]>
java nio灝忕粨http://www.tkk7.com/mlzry0612/articles/376593.htmlDanielDanielWed, 25 Apr 2012 07:34:00 GMThttp://www.tkk7.com/mlzry0612/articles/376593.htmlhttp://www.tkk7.com/mlzry0612/comments/376593.htmlhttp://www.tkk7.com/mlzry0612/articles/376593.html#Feedback1http://www.tkk7.com/mlzry0612/comments/commentRss/376593.htmlhttp://www.tkk7.com/mlzry0612/services/trackbacks/376593.html

java nio灝忕粨

鏍規嵁緗戜笂鐨勮祫鏂欏仛浜涙暣鐞?/p>

Java NIO API璇﹁В

http://www.tkk7.com/19851985lili/articles/93524.html

榪欑瘒鏂囩珷瀵筺io鐨刟pi璁茶В姣旇緝鍏紝鍙互甯姪鍦ㄥ畯瑙備笂鎶婃彙nio銆?/p>

BIO 鏂瑰紡浣垮緱鏁翠釜澶勭悊榪囩▼鍜岃繛鎺ユ槸緇戝畾鐨勶紝鍙榪炴帴寤虹珛錛屾棤璁哄鎴風鏄惁鏈夋秷鎭彂閫侊紝閮借榪涜絳夊緟澶勭悊錛屼竴瀹氱▼搴︿笂嫻垂浜嗘湇鍔″櫒绔殑紜歡璧勬簮錛屽洜姝ゅ氨鏈変簡NIO 鏂瑰紡銆侸ava 瀵逛簬 NIO 鏂瑰紡鐨勬敮鎸佹槸閫氳繃 Channel鍜?Selector 鏂瑰紡鏉ュ疄鐜幫紝閲囩敤鐨勬柟娉曚負鍚?Channel娉ㄥ唽鎰熷叴瓚g殑浜嬩歡錛岀劧鍚庨氳繃 Selector 鏉ヨ幏鍙栧埌鍙戠敓浜嗕簨浠剁殑 key錛屽鍙戠敓浜嗙浉搴旂殑浜嬩歡錛屽垯榪涜鐩稿簲鐨勫鐞嗭紝鍚﹀垯鍒欎笉鍋氫換浣曞鐞嗭紝鏄吀鍨嬬殑Reactor 妯″紡錛屾寜鐓ц繖鏍風殑鏂瑰紡錛屽氨涓嶇敤鍍?BIO 鏂瑰紡涓鏍鳳紝鍗充嬌鍦ㄦ病鏈夋秷鎭殑鎯呭喌涓嬩篃闇瑕佸崰鎹竴涓嚎紼嬫潵闃誨璇誨彇娑堟伅錛屼粠鑰屾彁鍗囨湇鍔″櫒鐨勪嬌鐢ㄦ晥鐜囷紝 涓哄疄鐜?TCP/IP+NIO 鏂瑰紡鐨勭郴緇熼棿閫氳錛?Java 鎻愪緵浜?SocketChannel鍜?ServerSocketChannel涓や釜鍏抽敭鐨勭被錛岀綉緇?IO 鐨勬搷浣滃垯鏀逛負閫氳繃ByteBuffer 鏉ュ疄鐜幫紝鍏蜂綋鐨勫熀浜?java瀹炵幇TCP/IP+NIO 鏂瑰紡鐨勯氳鐨勬柟娉曞涓嬫墍紺恒?/p>

鏈嶅姟鍣ㄧ錛?/p>

澶嶅埗浠g爜
package com.eric.test.nio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.util.Iterator;
import java.util.Set;
import java.nio.channels.SocketChannel;

public class NIOServer {
/*鏍囧織鏁板瓧*/
private static int flag = 0;
/*瀹氫箟緙撳啿鍖哄ぇ灝?/span>*/
private static int block = 4096;
/*鎺ユ敹緙撳啿鍖?/span>*/
private static ByteBuffer receiveBuffer = ByteBuffer.allocate(block);
/*鍙戦佺紦鍐插尯*/
private static ByteBuffer sendBuffer = ByteBuffer.allocate(block);
/*瀹氫箟Selector*/
private Selector selector;

public NIOServer(int port) throws IOException{
//鎵撳紑鏈嶅姟鍣ㄥ鎺ュ瓧閫氶亾
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

//鏈嶅姟鍣ㄩ厤緗負闈為樆濉?/span>
serverSocketChannel.configureBlocking(false);

//媯绱笌姝ゆ湇鍔″櫒濂楁帴瀛楅氶亾鍏寵仈鐨勫鎺ュ瓧
ServerSocket serverSocket = serverSocketChannel.socket();

//榪涜鏈嶅姟鐨勭粦瀹?/span>
serverSocket.bind(new InetSocketAddress(port));

//閫氳繃open()鏂規硶鎵懼埌Selector
selector = Selector.open();

//娉ㄥ唽鍒皊elector
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);

System.out.println("Server Start -----8888:");
}
//鐩戝惉
public void listen() throws IOException{

while(true){
//鐩戞帶鎵鏈夋敞鍐岀殑 channel 錛屽綋鍏朵腑鏈夋敞鍐岀殑 IO 鎿嶄綔鍙互榪涜鏃訛紝璇ュ嚱鏁拌繑鍥烇紝騫跺皢瀵瑰簲鐨?SelectionKey 鍔犲叆 selected-key set
selector.select();

//Selected-key set 浠h〃浜嗘墍鏈夐氳繃 select() 鏂規硶鐩戞祴鍒板彲浠ヨ繘琛?IO 鎿嶄綔鐨?channel 錛岃繖涓泦鍚堝彲浠ラ氳繃 selectedKeys() 鎷垮埌
Set<SelectionKey> selectionKeys = selector.selectedKeys();

Iterator<SelectionKey> iterator = selectionKeys.iterator();
while(iterator.hasNext()){
SelectionKey selectionKey = iterator.next();
handleKey(selectionKey);
iterator.remove();
}
}

}
//澶勭悊璇鋒眰
public void handleKey(SelectionKey selectionKey) throws IOException{

//鎺ュ彈璇鋒眰
ServerSocketChannel serverSocketChannel = null;

SocketChannel socketChannel = null;
String receiveText;
String sendText;
int count;
//嫻嬭瘯姝ら敭鐨勯氶亾鏄惁鍑嗗濂芥帴鍙楁柊鐨勫鎺ュ瓧榪炴帴
if(selectionKey.isAcceptable()){

//榪斿洖鍒涘緩姝ら敭鐨勯氶亾
serverSocketChannel = (ServerSocketChannel)selectionKey.channel();

//鎺ュ彈瀹㈡埛绔緩绔嬭繛鎺ョ殑璇鋒眰錛屽茍榪斿洖 SocketChannel 瀵硅薄
socketChannel = serverSocketChannel.accept();

//閰嶇疆涓洪潪闃誨
socketChannel.configureBlocking(false);

//娉ㄥ唽鍒皊elector
socketChannel.register(selector, SelectionKey.OP_READ);

}else if(selectionKey.isReadable()){
//榪斿洖涓轟箣鍒涘緩姝ら敭鐨勯氶亾
socketChannel = (SocketChannel)selectionKey.channel();

//灝嗙紦鍐插尯娓呯┖錛屼互澶囦笅嬈¤鍙?/span>
receiveBuffer.clear();

//灝嗗彂閫佹潵鐨勬暟鎹鍙栧埌緙撳啿鍖?/span>

count = socketChannel.read(receiveBuffer);


if(count>0){
receiveText = new String(receiveBuffer.array(),0,count);
System.out.println("鏈嶅姟鍣ㄧ鎺ュ彈鍒扮殑鏁版嵁---"+receiveText);
socketChannel.register(selector, SelectionKey.OP_WRITE);
}
}else if (selectionKey.isWritable()) {
//灝嗙紦鍐插尯娓呯┖浠ュ涓嬫鍐欏叆
sendBuffer.clear();

// 榪斿洖涓轟箣鍒涘緩姝ら敭鐨勯氶亾銆?
socketChannel = (SocketChannel) selectionKey.channel();

sendText="message from server--" + flag++;
//鍚戠紦鍐插尯涓緭鍏ユ暟鎹?
sendBuffer.put(sendText.getBytes());

//灝嗙紦鍐插尯鍚勬爣蹇楀浣?鍥犱負鍚戦噷闈ut浜嗘暟鎹爣蹇楄鏀瑰彉瑕佹兂浠庝腑璇誨彇鏁版嵁鍙戝悜鏈嶅姟鍣?灝辮澶嶄綅
sendBuffer.flip();

//杈撳嚭鍒伴氶亾
socketChannel.write(sendBuffer);

System.out.println("鏈嶅姟鍣ㄧ鍚戝鎴風鍙戦佹暟鎹?-錛?+sendText);
socketChannel.register(selector, SelectionKey.OP_READ);
}

}
public static void main(String[] args) throws IOException {
int port = 8888;
NIOServer server = new NIOServer(port);
server.listen();
}

}
澶嶅埗浠g爜

瀹㈡埛绔?/p>

澶嶅埗浠g爜
package com.eric.test.nio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Set;

public class NIOClient {
/*鏍囪瘑鏁板瓧*/
private static int flag = 0;
/*緙撳啿鍖哄ぇ灝?/span>*/
private static int BLOCK = 4096;
/*鎺ュ彈鏁版嵁緙撳啿鍖?/span>*/
private static ByteBuffer sendBuffer = ByteBuffer.allocate(BLOCK);
/*鍙戦佹暟鎹紦鍐插尯*/
private static ByteBuffer receiveBuffer = ByteBuffer.allocate(BLOCK);
/*鏈嶅姟鍣ㄧ鍦板潃*/
private final static InetSocketAddress SERVER_ADDRESS = new InetSocketAddress(
"localhost", 8888);

public static void main(String[] args) throws IOException {
// 鎵撳紑socket閫氶亾
SocketChannel clientChannel = SocketChannel.open();

// 璁劇疆涓洪潪闃誨鏂瑰紡
clientChannel.configureBlocking(false);

// 鎵撳紑閫夋嫨鍣?
Selector selector = Selector.open();

// 娉ㄥ唽榪炴帴鏈嶅姟绔痵ocket鍔ㄤ綔
clientChannel.register(selector, SelectionKey.OP_CONNECT);

// 榪炴帴
clientChannel.connect(SERVER_ADDRESS);


SocketChannel socketChannel;
Set<SelectionKey> selectionKeys;
String receiveText;
String sendText;
int count=0;

while (true) {
//閫夋嫨涓緇勯敭錛屽叾鐩稿簲鐨勯氶亾宸蹭負 I/O 鎿嶄綔鍑嗗灝辯華銆?
//鐩戞帶鎵鏈夋敞鍐岀殑 channel 錛屽綋鍏朵腑鏈夋敞鍐岀殑 IO 鎿嶄綔鍙互榪涜鏃訛紝璇ュ嚱鏁拌繑鍥烇紝騫跺皢瀵瑰簲鐨?SelectionKey 鍔犲叆 selected-key set
selector.select();

//榪斿洖姝ら夋嫨鍣ㄧ殑宸查夋嫨閿泦銆?
selectionKeys = selector.selectedKeys();

//System.out.println(selectionKeys.size());
for(SelectionKey selectionKey:selectionKeys){

//鍒ゆ柇鏄惁涓哄緩绔嬭繛鎺ョ殑浜嬩歡
if (selectionKey.isConnectable()) {

System.out.println("client connect");
socketChannel = (SocketChannel) selectionKey.channel(); //
// 鍒ゆ柇姝ら氶亾涓婃槸鍚︽鍦ㄨ繘琛岃繛鎺ユ搷浣溿?
// 瀹屾垚濂楁帴瀛楅氶亾鐨勮繛鎺ヨ繃紼嬨?
if (socketChannel.isConnectionPending()) {

//瀹屾垚榪炴帴鐨勫緩绔嬶紙TCP涓夋鎻℃墜錛?/span>
socketChannel.finishConnect();

System.out.println("瀹屾垚榪炴帴!");
sendBuffer.clear();
sendBuffer.put("Hello,Server".getBytes());
sendBuffer.flip();
socketChannel.write(sendBuffer);
}
socketChannel.register(selector, SelectionKey.OP_READ);
} else if (selectionKey.isReadable()) {
socketChannel = (SocketChannel) selectionKey.channel();
//灝嗙紦鍐插尯娓呯┖浠ュ涓嬫璇誨彇
receiveBuffer.clear();

//璇誨彇鏈嶅姟鍣ㄥ彂閫佹潵鐨勬暟鎹埌緙撳啿鍖轟腑
count=socketChannel.read(receiveBuffer);

if(count>0){
receiveText = new String( receiveBuffer.array(),0,count);
System.out.println("瀹㈡埛绔帴鍙楁湇鍔″櫒绔暟鎹?-:"+receiveText);
socketChannel.register(selector, SelectionKey.OP_WRITE);
}

} else if (selectionKey.isWritable()) {
sendBuffer.clear();
socketChannel = (SocketChannel) selectionKey.channel();
sendText = "message from client--" + (flag++);
sendBuffer.put(sendText.getBytes());
//灝嗙紦鍐插尯鍚勬爣蹇楀浣?鍥犱負鍚戦噷闈ut浜嗘暟鎹爣蹇楄鏀瑰彉瑕佹兂浠庝腑璇誨彇鏁版嵁鍙戝悜鏈嶅姟鍣?灝辮澶嶄綅
sendBuffer.flip();

socketChannel.write(sendBuffer);
System.out.println("瀹㈡埛绔悜鏈嶅姟鍣ㄧ鍙戦佹暟鎹?-錛?+sendText);
socketChannel.register(selector, SelectionKey.OP_READ);
}
}
selectionKeys.clear();
}
}
}
澶嶅埗浠g爜

灝忕粨錛氫箣鍓嶅Selector娉ㄥ唽浜嬩歡鍜孲ocketChannel鏈夌偣灝忓洶鎯戙係ocketChannel灝卞儚涓鏍規按綆★紝褰撶洃鍚埌鍐欎簨浠舵椂錛屽氨寰綆¢亾鍐欐暟鎹紱褰撶洃鍚埌璇諱簨浠舵椂錛屽氨浠庣閬撹鍑烘暟鎹?/p>



Daniel 2012-04-25 15:34 鍙戣〃璇勮
]]>
鏁版嵁搴撹璁″噯鍒欙紙絎竴銆佺浜屻佺涓夎寖寮忚鏄庯級http://www.tkk7.com/mlzry0612/articles/366946.htmlDanielDanielWed, 21 Dec 2011 08:46:00 GMThttp://www.tkk7.com/mlzry0612/articles/366946.htmlhttp://www.tkk7.com/mlzry0612/comments/366946.htmlhttp://www.tkk7.com/mlzry0612/articles/366946.html#Feedback0http://www.tkk7.com/mlzry0612/comments/commentRss/366946.htmlhttp://www.tkk7.com/mlzry0612/services/trackbacks/366946.html

I銆佸叧緋繪暟鎹簱璁捐鑼冨紡浠嬬粛

1.1 絎竴鑼冨紡錛?NF錛夋棤閲嶅鐨勫垪

 
      鎵璋撶涓鑼冨紡錛?NF錛夋槸鎸囨暟鎹簱琛ㄧ殑姣忎竴鍒楅兘鏄笉鍙垎鍓茬殑鍩烘湰鏁版嵁欏癸紝鍚屼竴鍒椾腑涓嶈兘鏈夊涓鹼紝鍗沖疄浣撲腑鐨勬煇涓睘鎬т笉鑳芥湁澶氫釜鍊兼垨鑰呬笉鑳芥湁閲嶅鐨勫睘鎬с傚鏋滃嚭鐜伴噸澶嶇殑灞炴э紝灝卞彲鑳介渶瑕佸畾涔変竴涓柊鐨勫疄浣擄紝鏂扮殑瀹炰綋鐢遍噸澶嶇殑灞炴ф瀯鎴愶紝鏂板疄浣撲笌鍘熷疄浣撲箣闂翠負涓瀵瑰鍏崇郴銆傚湪絎竴鑼冨紡錛?NF錛変腑琛ㄧ殑姣忎竴琛屽彧鍖呭惈涓涓疄渚嬬殑淇℃伅銆傜畝鑰岃█涔嬶紝絎竴鑼冨紡灝辨槸鏃犻噸澶嶇殑鍒椼?/div>

璇存槑錛氬湪浠諱綍涓涓叧緋繪暟鎹簱涓紝絎竴鑼冨紡錛?NF錛夋槸瀵瑰叧緋繪ā寮忕殑鍩烘湰瑕佹眰錛屼笉婊¤凍絎竴鑼冨紡錛?NF錛夌殑鏁版嵁搴撳氨涓嶆槸鍏崇郴鏁版嵁搴撱?nbsp;

1.2 絎簩鑼冨紡錛?NF錛夊睘鎬у畬鍏ㄤ緷璧栦簬涓婚敭[娑堥櫎閮ㄥ垎瀛愬嚱鏁頒緷璧朷

 
      絎簩鑼冨紡錛?NF錛夋槸鍦ㄧ涓鑼冨紡錛?NF錛夌殑鍩虹涓婂緩绔嬭搗鏉ョ殑錛屽嵆婊¤凍絎簩鑼冨紡錛?NF錛夊繀欏誨厛婊¤凍絎竴鑼冨紡錛?NF錛夈傜浜岃寖寮忥紙2NF錛夎姹傛暟鎹簱琛ㄤ腑鐨勬瘡涓疄渚嬫垨琛屽繀欏誨彲浠ヨ鎯熶竴鍦板尯鍒嗐備負瀹炵幇鍖哄垎閫氬父闇瑕佷負琛ㄥ姞涓婁竴涓垪錛屼互瀛樺偍鍚勪釜瀹炰緥鐨勬儫涓鏍囪瘑銆備緥濡傚憳宸ヤ俊鎭〃涓姞涓婁簡鍛樺伐緙栧彿錛坋mp_id錛夊垪錛屽洜涓烘瘡涓憳宸ョ殑鍛樺伐緙栧彿鏄儫涓鐨勶紝鍥犳姣忎釜鍛樺伐鍙互琚儫涓鍖哄垎銆傝繖涓儫涓灞炴у垪琚О涓轟富鍏抽敭瀛楁垨涓婚敭銆佷富鐮併?nbsp;
        絎簩鑼冨紡錛?NF錛夎姹傚疄浣撶殑灞炴у畬鍏ㄤ緷璧栦簬涓誨叧閿瓧銆傛墍璋撳畬鍏ㄤ緷璧栨槸鎸囦笉鑳藉瓨鍦ㄤ粎渚濊禆涓誨叧閿瓧涓閮ㄥ垎鐨勫睘鎬э紝濡傛灉瀛樺湪錛岄偅涔堣繖涓睘鎬у拰涓誨叧閿瓧鐨勮繖涓閮ㄥ垎搴旇鍒嗙鍑烘潵褰㈡垚涓涓柊鐨勫疄浣擄紝鏂板疄浣撲笌鍘熷疄浣撲箣闂存槸涓瀵瑰鐨勫叧緋匯備負瀹炵幇鍖哄垎閫氬父闇瑕佷負琛ㄥ姞涓婁竴涓垪錛屼互瀛樺偍鍚勪釜瀹炰緥鐨勬儫涓鏍囪瘑銆傜畝鑰岃█涔嬶紝絎簩鑼冨紡灝辨槸灞炴у畬鍏ㄤ緷璧栦簬涓婚敭銆?nbsp;

1.3 絎笁鑼冨紡錛?NF錛夊睘鎬т笉渚濊禆浜庡叾瀹冮潪涓誨睘鎬娑堥櫎浼犻掍緷璧朷


            婊¤凍絎笁鑼冨紡錛?NF錛夊繀欏誨厛婊¤凍絎簩鑼冨紡錛?NF錛夈傜畝鑰岃█涔嬶紝絎笁鑼冨紡錛?NF錛夎姹備竴涓暟鎹簱琛ㄤ腑涓嶅寘鍚凡鍦ㄥ叾瀹冭〃涓凡鍖呭惈鐨勯潪涓誨叧閿瓧淇℃伅銆備緥濡傦紝瀛樺湪涓涓儴闂ㄤ俊鎭〃錛屽叾涓瘡涓儴闂ㄦ湁閮ㄩ棬緙栧彿錛坉ept_id錛夈侀儴闂ㄥ悕縐般侀儴闂ㄧ畝浠嬬瓑淇℃伅銆傞偅涔堝湪鐨勫憳宸ヤ俊鎭〃涓垪鍑洪儴闂ㄧ紪鍙峰悗灝變笉鑳藉啀灝嗛儴闂ㄥ悕縐般侀儴闂ㄧ畝浠嬬瓑涓庨儴闂ㄦ湁鍏崇殑淇℃伅鍐嶅姞鍏ュ憳宸ヤ俊鎭〃涓傚鏋滀笉瀛樺湪閮ㄩ棬淇℃伅琛紝鍒欐牴鎹涓夎寖寮忥紙3NF錛変篃搴旇鏋勫緩瀹冿紝鍚﹀垯灝變細鏈夊ぇ閲忕殑鏁版嵁鍐椾綑銆傜畝鑰岃█涔嬶紝絎笁鑼冨紡灝辨槸灞炴т笉渚濊禆浜庡叾瀹冮潪涓誨睘鎬с?nbsp;

II銆佽寖寮忓簲鐢ㄥ疄渚嬪墫鏋?/h3>

        涓嬮潰浠ヤ竴涓鏍$殑瀛︾敓緋葷粺涓轟緥鍒嗘瀽璇存槑錛岃繖鍑犱釜鑼冨紡鐨勫簲鐢ㄣ傞鍏堢涓鑼冨紡錛?NF錛夛細鏁版嵁搴撹〃涓殑瀛楁閮芥槸鍗曚竴灞炴х殑錛屼笉鍙啀鍒嗐傝繖涓崟涓灞炴х敱鍩烘湰綾誨瀷鏋勬垚錛屽寘鎷暣鍨嬨佸疄鏁般佸瓧絎﹀瀷銆侀昏緫鍨嬨佹棩鏈熷瀷絳夈傚湪褰撳墠鐨勪換浣曞叧緋繪暟鎹簱綆$悊緋葷粺錛圖BMS錛変腑錛屽偦鐡滀篃涓嶅彲鑳藉仛鍑轟笉絎﹀悎絎竴鑼冨紡鐨勬暟鎹簱錛屽洜涓鴻繖浜汥BMS涓嶅厑璁鎬綘鎶婃暟鎹簱琛ㄧ殑涓鍒楀啀鍒嗘垚浜屽垪鎴栧鍒椼傚洜姝わ紝浣犳兂鍦ㄧ幇鏈夌殑DBMS涓璁″嚭涓嶇鍚堢涓鑼冨紡鐨勬暟鎹簱閮芥槸涓嶅彲鑳界殑銆?nbsp;
棣栧厛鎴戜滑紜畾涓涓嬭璁捐鐨勫唴瀹瑰寘鎷偅浜涖傚鍙楓佸鐢熷鍚嶃佸勾榫勩佹у埆銆佽紼嬨佽紼嬪鍒嗐佺郴鍒佸縐戞垚緇╋紝緋誨姙鍦板潃銆佺郴鍔炵數璇濈瓑淇℃伅銆備負浜嗙畝鍗曟垜浠殏鏃跺彧鑰冭檻榪欎簺瀛楁淇℃伅銆傛垜浠浜庤繖浜涗俊鎭紝璇村叧蹇冪殑闂鏈夊涓嬪嚑涓柟闈€?nbsp;
  • 瀛︾敓鏈夐偅浜涘熀鏈俊鎭?/li>
  • 瀛︾敓閫変簡閭d簺璇撅紝鎴愮嘩鏄粈涔?/li>
  • 姣忎釜璇劇殑瀛﹀垎鏄灝?/li>
  • 瀛︾敓灞炰簬閭d釜緋伙紝緋葷殑鍩烘湰淇℃伅鏄粈涔堛?/li>

2.1 絎簩鑼冨紡錛?NF錛夊疄渚嬪垎鏋?/h4>
 
      棣栧厛鎴戜滑鑰冭檻錛屾妸鎵鏈夎繖浜涗俊鎭斁鍒頒竴涓〃涓?瀛﹀彿錛屽鐢熷鍚嶃佸勾榫勩佹у埆銆佽紼嬨佽紼嬪鍒嗐佺郴鍒佸縐戞垚緇╋紝緋誨姙鍦板潃銆佺郴鍔炵數璇?涓嬮潰瀛樺湪濡備笅鐨勪緷璧栧叧緋匯?nbsp;
        錛堝鍙鳳級→ (濮撳悕, 騫撮緞錛屾у埆錛岀郴鍒紝緋誨姙鍦板潃銆佺郴鍔炵數璇? 
         (璇劇▼鍚嶇О) → (瀛﹀垎) 
        錛堝鍙鳳紝璇劇▼錛?#8594; (瀛︾鎴愮嘩)

2.1.1 闂鍒嗘瀽
 
      鍥犳涓嶆弧瓚崇浜岃寖寮忕殑瑕佹眰錛屼細浜х敓濡備笅闂 

        鏁版嵁鍐椾綑錛?鍚屼竴闂ㄨ紼嬬敱n涓鐢熼変慨錛?瀛﹀垎"灝遍噸澶峮-1嬈★紱鍚屼竴涓鐢熼変慨浜唌闂ㄨ紼嬶紝濮撳悕鍜屽勾榫勫氨閲嶅浜唌-1嬈°?nbsp;

        鏇存柊寮傚父錛?nbsp;
             1)鑻ヨ皟鏁翠簡鏌愰棬璇劇▼鐨勫鍒嗭紝鏁版嵁琛ㄤ腑鎵鏈夎鐨?瀛﹀垎"鍊奸兘瑕佹洿鏂幫紝鍚﹀垯浼氬嚭鐜板悓涓闂ㄨ紼嬪鍒嗕笉鍚岀殑鎯呭喌銆?nbsp;
            2)鍋囪瑕佸紑璁句竴闂ㄦ柊鐨勮紼嬶紝鏆傛椂榪樻病鏈変漢閫変慨銆傝繖鏍鳳紝鐢變簬榪樻病鏈?瀛﹀彿"鍏抽敭瀛楋紝璇劇▼鍚嶇О鍜屽鍒嗕篃鏃犳硶璁板綍鍏ユ暟鎹簱銆?nbsp;

       鍒犻櫎寮傚父 錛?鍋囪涓鎵瑰鐢熷凡緇忓畬鎴愯紼嬬殑閫変慨錛岃繖浜涢変慨璁板綍灝卞簲璇ヤ粠鏁版嵁搴撹〃涓垹闄ゃ備絾鏄紝涓庢鍚屾椂錛岃紼嬪悕縐板拰瀛﹀垎淇℃伅涔熻鍒犻櫎浜嗐傚緢鏄劇劧錛岃繖涔熶細瀵艱嚧鎻掑叆寮傚父銆?/div>
2.1.2 瑙e喅鏂規
 
      鎶婇夎鍏崇郴琛⊿electCourse鏀逛負濡備笅涓変釜琛細
  • 瀛︾敓錛歋tudent(瀛﹀彿錛屽鍚? 騫撮緞錛屾у埆錛岀郴鍒紝緋誨姙鍦板潃銆佺郴鍔炵數璇?錛?/li>
  • 璇劇▼錛欳ourse(璇劇▼鍚嶇О, 瀛﹀垎)錛?/li>
  • 閫夎鍏崇郴錛歋electCourse(瀛﹀彿, 璇劇▼鍚嶇О, 鎴愮嘩)銆?/li>

2.2 絎笁鑼冨紡錛?NF錛夊疄渚嬪垎鏋?/h4>

        鎺ョ潃鐪嬩笂闈㈢殑瀛︾敓琛⊿tudent(瀛﹀彿錛屽鍚? 騫撮緞錛屾у埆錛岀郴鍒紝緋誨姙鍦板潃銆佺郴鍔炵數璇?錛屽叧閿瓧涓哄崟涓鍏抽敭瀛?瀛﹀彿"錛屽洜涓哄瓨鍦ㄥ涓嬪喅瀹氬叧緋伙細 

       錛堝鍙鳳級→ (濮撳悕, 騫撮緞錛屾у埆錛岀郴鍒紝緋誨姙鍦板潃銆佺郴鍔炵數璇? 
        浣嗘槸榪樺瓨鍦ㄤ笅闈㈢殑鍐沖畾鍏崇郴 
       (瀛﹀彿) → (鎵鍦ㄥ闄?→(瀛﹂櫌鍦扮偣, 瀛﹂櫌鐢佃瘽) 
        鍗沖瓨鍦ㄩ潪鍏抽敭瀛楁"瀛﹂櫌鍦扮偣"銆?瀛﹂櫌鐢佃瘽"瀵瑰叧閿瓧孌?瀛﹀彿"鐨勪紶閫掑嚱鏁頒緷璧栥?nbsp;
        瀹冧篃浼氬瓨鍦ㄦ暟鎹啑浣欍佹洿鏂板紓甯搞佹彃鍏ュ紓甯稿拰鍒犻櫎寮傚父鐨勬儏鍐點?(鏁告摎鐨勬洿鏂幫紝鍒櫎鐣板父閫欓噷灝變笉鍒嗘瀽浜嗭紝鍙互鍙冪収2.1.1閫茶鍒嗘瀽)

        鏍規嵁絎笁鑼冨紡鎶婂鐢熷叧緋昏〃鍒嗕負濡備笅涓や釜琛ㄥ氨鍙互婊胯凍絎笁鑼冨紡浜嗭細 

        瀛︾敓錛?瀛﹀彿, 濮撳悕, 騫撮緞, 鎬у埆錛岀郴鍒?錛?nbsp;
        緋誨埆錛?緋誨埆, 緋誨姙鍦板潃銆佺郴鍔炵數璇?銆?nbsp;

鎬葷粨


       涓婇潰鐨勬暟鎹簱琛ㄥ氨鏄鍚圛,II,III鑼冨紡鐨勶紝娑堥櫎浜嗘暟鎹啑浣欍佹洿鏂板紓甯搞佹彃鍏ュ紓甯稿拰鍒犻櫎寮傚父銆?nbsp;


Daniel 2011-12-21 16:46 鍙戣〃璇勮
]]>Text Area item 涓婁笅縐?/title><link>http://www.tkk7.com/mlzry0612/articles/365336.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Thu, 01 Dec 2011 15:03:00 GMT</pubDate><guid>http://www.tkk7.com/mlzry0612/articles/365336.html</guid><wfw:comment>http://www.tkk7.com/mlzry0612/comments/365336.html</wfw:comment><comments>http://www.tkk7.com/mlzry0612/articles/365336.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/mlzry0612/comments/commentRss/365336.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/mlzry0612/services/trackbacks/365336.html</trackback:ping><description><![CDATA[<div><div><html>   </div><div>  <head>   </div><div>  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">   </div><div>  <meta name="GENERATOR" content="Microsoft FrontPage 4.0">   </div><div>  <meta name="ProgId" content="FrontPage.Editor.Document">   </div><div>  <title>鍏夋爣浣嶇疆</title>   </div><div>  <style>   </div><div>  INPUT{border: 1 solid #000000}   </div><div>  BODY,TABLE{font-size: 10pt}   </div><div>  </style>   </div><div>  </head>   </div><div>  <body>   </div><div>  <table border="0" width="700" cellspacing="0" cellpadding="0">   </div><div>  <tr>   </div><div>  <td width="479" rowspan="17">   </div><div>  鐐瑰嚮 TextArea 瀹炵幇鍏夋爣瀹氫綅   </div><div>  <p>   </div><div>  <input type="Button" value="ff" onclick="fo()"/></div><div>  <input type="Button" value="UPLINE" onclick="upLine()"/></div><div>  <input type="Button" value="DOWNLINE" onclick="downLine()"/></div><div>  <textarea rows="17" cols="49" id="box" onclick="tellPoint()" ></div><div>HIGHHEEL</div><div>sfsfsfs</div><div>s1123</div><div>432434</div><div>asf</div><div>fsa</div><div>sf</div><div>3232</textarea> </div><div>  <script type="text/javascript"></div><div><span style="white-space:pre"> </span>   function getPos(textarea) {</div><div><span style="white-space:pre"> </span>   var rangeData = {text: "", start: 0, end: 0 };</div><div><span style="white-space:pre"> </span>  </div><div><span style="white-space:pre"> </span>   if (textarea.setSelectionRange) { // W3C </div><div><span style="white-space:pre"> </span>    textarea.focus();</div><div><span style="white-space:pre"> </span>    rangeData.start= textarea.selectionStart;</div><div><span style="white-space:pre"> </span>    rangeData.end = textarea.selectionEnd;</div><div><span style="white-space:pre"> </span>    rangeData.text = (rangeData.start != rangeData.end) ? textarea.value.substring(rangeData.start, rangeData.end): "";</div><div><span style="white-space:pre"> </span>   } else if (document.selection) { // IE</div><div><span style="white-space:pre"> </span>    textarea.focus();</div><div><span style="white-space:pre"> </span>    var i,</div><div><span style="white-space:pre"> </span>     oS = document.selection.createRange(),</div><div><span style="white-space:pre"> </span>     // Don't: oR = textarea.createTextRange()</div><div><span style="white-space:pre"> </span>     oR = document.body.createTextRange();</div><div><span style="white-space:pre"> </span>    oR.moveToElementText(textarea);</div><div><span style="white-space:pre"> </span>    </div><div><span style="white-space:pre"> </span>    rangeData.text = oS.text;</div><div><span style="white-space:pre"> </span>    rangeData.bookmark = oS.getBookmark();</div><div><span style="white-space:pre"> </span>    </div><div><span style="white-space:pre"> </span>    // object.moveStart(sUnit [, iCount]) </div><div><span style="white-space:pre"> </span>    // Return Value: Integer that returns the number of units moved.</div><div><span style="white-space:pre"> </span>    for (i = 0; oR.compareEndPoints('StartToStart', oS) < 0 && oS.moveStart("character", -1) !== 0; i ++) {</div><div><span style="white-space:pre"> </span>     // Why? You can alert(textarea.value.length)</div><div><span style="white-space:pre"> </span>     if (textarea.value.charAt(i) == '/r' ) {</div><div><span style="white-space:pre"> </span>      i ++;</div><div><span style="white-space:pre"> </span>     }</div><div><span style="white-space:pre"> </span>    }</div><div><span style="white-space:pre"> </span>    rangeData.start = i;</div><div><span style="white-space:pre"> </span>    rangeData.end = rangeData.text.length + rangeData.start;</div><div><span style="white-space:pre"> </span>   }</div><div><span style="white-space:pre"> </span>   </div><div><span style="white-space:pre"> </span>   return rangeData;</div><div><span style="white-space:pre"> </span>   }</div><div></div><div>  </div><div>  function fo(){</div><div><span style="white-space:pre"> </span>  var text = new String(document.getElementById("box").value);</div><div><span style="white-space:pre"> </span>  var currentCurrosr = document.getElementById("pnum").value;</div><div><span style="white-space:pre"> </span>  alert(text.substring(currentCurrosr-1, currentCurrosr));</div><div><span style="white-space:pre"> </span>  pos = getPos(document.getElementById("box"));</div><div><span style="white-space:pre"> </span>  alert(pos.start);</div><div>//       var end = text.indexOf("\r\n", document.getElementById("pnum").value);</div><div>//      if(end == -1){</div><div>//     <span style="white-space:pre"> </span> alert("END");</div><div>//      }</div><div>//     var start = text.lastIndexOf("\r\n", currentCurrosr);</div><div>//     if(start == -1){alert("START");}</div><div>//     var currentLine = getLine(currentCurrosr);</div><div>//     alert("CUL"+currentLine+"L"+currentLine.length);</div><div>//     var nextLine = getLine(end + 1);</div><div>//     alert("NEXT"+nextLine+"L"+nextLine.length);</div><div>//     var preLine = getLine(start - 1);</div><div>//     alert("PRE"+ preLine+"L"+preLine.length);</div><div>  }</div><div>  </div><div>  function upLine(){</div><div><span style="white-space:pre"> </span>  var text = new String(document.getElementById("box").value);</div><div><span style="white-space:pre"> </span>  var currentCurrosr = document.getElementById("h1").value;</div><div>      var end = text.indexOf("\r\n",currentCurrosr);</div><div>      var start = null;</div><div>      if(currentCurrosr == end){</div><div><span style="white-space:pre"> </span>start =text.lastIndexOf("\r\n", currentCurrosr-1);  </div><div>      }else{</div><div>   <span style="white-space:pre"> </span>   <span style="white-space:pre"> </span>start = text.lastIndexOf("\r\n", currentCurrosr);</div><div>      }</div><div>      if(start == -1){alert("Already the toppest!");</div><div>      return;</div><div>      }</div><div>      var preLine = getLine(start-1);</div><div>      var currentLine = getLine(currentCurrosr);</div><div>      var preLineStart = text.lastIndexOf("\r\n", start-1);</div><div>      var sq = null;</div><div>      var endPart = text.substring(end,text.length);</div><div>    <span style="white-space:pre"> </span>alert(text.length);</div><div>      if(preLineStart == -1){</div><div>    <span style="white-space:pre"> </span>sq = new String(currentLine).substring(2, currentLine.length).concat("\r\n").concat(preLine).concat(endPart);</div><div>    <span style="white-space:pre"> </span>alert(sq);</div><div>    <span style="white-space:pre"> </span>alert(sq.length);</div><div>      }else{</div><div>    <span style="white-space:pre"> </span>  alert(preLineStart);</div><div><span style="white-space:pre"> </span>      sq = text.substring(0, preLineStart).concat(currentLine).concat(preLine).concat(endPart);</div><div>          alert(sq);</div><div>          alert(sq.length);</div><div>      }</div><div>      document.getElementById("box").value=sq;</div><div>  }</div><div>  </div><div>  function downLine(){</div><div><span style="white-space:pre"> </span>  </div><div>  }</div><div>  </div><div>   </div><div>  </div><div>  </div><div>  function getLine(currsor){</div><div><span style="white-space:pre"> </span>var text = new String(document.getElementById("box").value);</div><div><span style="white-space:pre"> </span>var end = text.indexOf("\r\n", currsor);</div><div><span style="white-space:pre"> </span>if(end == -1){</div><div><span style="white-space:pre"> </span>return text.substring(text.lastIndexOf("\r\n", text.length), text.length);</div><div><span style="white-space:pre"> </span>}</div><div><span style="white-space:pre"> </span>var tmp = text.substring(0, end);</div><div><span style="white-space:pre"> </span>var start = tmp.lastIndexOf("\r\n", end);</div><div><span style="white-space:pre"> </span>if(start == -1){</div><div><span style="white-space:pre"> </span>}</div><div><span style="white-space:pre"> </span></div><div>// <span style="white-space:pre"> </span>alert(tmp);</div><div>// <span style="white-space:pre"> </span>alert(start);</div><div>// <span style="white-space:pre"> </span>alert(text.substring(start+4, end).length);</div><div>// <span style="white-space:pre"> </span>alert(text.substring(start+4, end));<span style="white-space:pre"> </span></div><div><span style="white-space:pre"> </span>return text.substring(start, end);</div><div><span style="white-space:pre"> </span>}</div><div>  function movePoint()   </div><div>  {   </div><div>  var pn=parseInt(pnum.value);   </div><div>  if(isNaN(pn))   </div><div>  return;   </div><div>  var rng=box.createTextRange();   </div><div>  rng.moveStart("character",pn);   </div><div>  rng.collapse(true);   </div><div>  rng.select();   </div><div>  returnCase(rng)   </div><div>  }   </div><div>  function tellPoint()   </div><div>  { </div><div>  var rng=event.srcElement.createTextRange();   </div><div>  rng.moveToPoint(event.x,event.y);   </div><div>  rng.moveStart("character",-event.srcElement.value.length)   </div><div>  h1.value=rng.text.length; </div><div>  pnum.value=rng.text.length;</div><div>  returnCase(rng)   </div><div>  }   </div><div>   </div><div>  function returnCase(rng)   </div><div>  {   </div><div>  bh.innerText=rng.boundingHeight;   </div><div>  bl.innerText=rng.boundingLeft;   </div><div>  bt.innerText=rng.boundingTop;   </div><div>  bw.innerText=rng.boundingWidth;   </div><div>  ot.innerText=rng.offsetTop;   </div><div>  ol.innerText=rng.offsetLeft;   </div><div>  t.innerText=rng.text;   </div><div>  }   </div><div>   </div><div>  function selectText(sp,ep)   </div><div>  {   </div><div>  sp=parseInt(sp)   </div><div>  ep=parseInt(ep)   </div><div>  if(isNaN(sp)||isNaN(ep))   </div><div>  return;   </div><div>  var rng=box.createTextRange();   </div><div>  rng.moveEnd("character",-box.value.length)   </div><div>  rng.moveStart("character",-box.value.length)   </div><div>  rng.collapse(true);   </div><div>  rng.moveEnd("character",ep)   </div><div>  rng.moveStart("character",sp)   </div><div>  rng.select();   </div><div>  returnCase(rng);   </div><div>  }   </div><div>  var rg=box.createTextRange();   </div><div>  function findText(tw)   </div><div>  {   </div><div>  if(tw=="")   </div><div>  return;   </div><div>  var sw=0;   </div><div>  if(document.selection)   </div><div>  {   </div><div>  sw=document.selection.createRange().text.length;   </div><div>  }   </div><div>  rg.moveEnd("character",box.value.length);   </div><div>  rg.moveStart("character",sw);   </div><div>   </div><div>  if(rg.findText(tw))   </div><div>  {   </div><div>  rg.select();   </div><div>  returnCase(rg);   </div><div>  }   </div><div>  if(rg.text!=tw)   </div><div>  {   </div><div>  alert("宸茬粡鎼滅儲瀹屼簡");   </div><div>  rg=box.createTextRange();   </div><div>  }   </div><div>  }   </div><div>  </script>   </div><div>  </p>   </div><div>  <p></p></div><div>  </div><div>  <input type="hidden" id="h1">   </div><div>  鍏夋爣浣嶇疆錛?lt;input type="text" value="0" id="pnum" size="8"> <input type="button" onclick="movePoint()" value="縐誨姩鍏夋爣鍒版寚瀹氫綅緗?>   </div><div>  <p></p>   </div><div>  閫夋嫨鎸囧畾鑼冨洿錛?lt;input type="text" size="9" id="sbox"> -- <input type="text" size="9" id="ebox"> <input type="button" onclick="selectText(sbox.value,ebox.value)" value="閫夋嫨">   </div><div>  <p></p>   </div><div>  閫夋嫨鏌ユ壘瀛楃 錛?lt;input type="text" value="" id="cbox" size="8"> <input type="button" onclick="findText(cbox.value)" value="鏌ユ壘涓嬩竴涓茍閫夋嫨">   </div><div>  </td>   </div><div>  <td width="217">boundingHeight:&nbsp;<span id="bh"></span></td>   </div><div>  </tr>   </div><div>  <tr>   </div><div>  <td width="217">boundingWidth:&nbsp;<span id="bw"></span></td>   </div><div>  </tr>   </div><div>  <tr>   </div><div>  <td width="217">boundingTop:&nbsp;<span id="bt"></span></td>   </div><div>  </tr>   </div><div>  <tr>   </div><div>  <td width="217">boundingLeft:&nbsp;<span id="bl"></span></td>   </div><div>  </tr>   </div><div>  <tr>   </div><div>  <td width="217">offsetLeft:&nbsp;<span id="ol"></span> </td>   </div><div>  </tr>   </div><div>  <tr>   </div><div>  <td width="217">offsetTop:&nbsp;<span id="ot"></span> </td>   </div><div>  </tr>   </div><div>  <tr>   </div><div>  <td width="217">text:&nbsp;<span style="position: absolute; z-index: 10" id="t" ></span> </td>   </div><div>  </tr>   </div><div>  </table>   </div><div>  </body>   </div><div>  </html></div></div><img src ="http://www.tkk7.com/mlzry0612/aggbug/365336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/mlzry0612/" target="_blank">Daniel</a> 2011-12-01 23:03 <a href="http://www.tkk7.com/mlzry0612/articles/365336.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>WebService涓嶴OA鐨勫疄鐜?/title><link>http://www.tkk7.com/mlzry0612/articles/357633.html</link><dc:creator>Daniel</dc:creator><author>Daniel</author><pubDate>Wed, 31 Aug 2011 05:25:00 GMT</pubDate><guid>http://www.tkk7.com/mlzry0612/articles/357633.html</guid><wfw:comment>http://www.tkk7.com/mlzry0612/comments/357633.html</wfw:comment><comments>http://www.tkk7.com/mlzry0612/articles/357633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/mlzry0612/comments/commentRss/357633.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/mlzry0612/services/trackbacks/357633.html</trackback:ping><description><![CDATA[<span id="c66g64y" class="Apple-style-span" style="font-family: 'Times New Roman'; line-height: normal; font-size: medium; "><p align="center"><strong><br /></strong></p><p>14.1 Web Services鍜岄潰鍚戞湇鍔$殑杞歡鏋舵瀯錛圫ervice Oriented Architecture錛岀畝縐癝OA錛夋榪幫細</p><p> </p><p>鍦ㄦ渶鏂癑ava寮鍙戜笘鐣岄噷錛屾垜浠粡甯鎬細閬囧埌榪欐牱涓涓悕璇嶏細Web Services錛圵eb鏈嶅姟錛夈傚悓鏃惰繕浼氬彂鐜幫紝涓庤繖涓悕璇嶅悓鏃跺嚭鐜扮殑澶氭槸鍚勫ぇ涓繪祦鎶鏈緵搴斿晢錛屽悇澶ф妧鏈緵搴斿晢鏃犱竴涓嶅湪鍏蟲敞榪欎竴棰嗗煙鐨勫彂灞曘備粠Microsoft鐨?NET鏋舵瀯錛屽埌SUN鐨凷UN ONE錛屼互鍙奍BM鐨刉eb Services錛岄兘浣撶幇浜嗚繖浜涢噸閲忕駭鐨勬妧鏈彁渚涜呭Web Services鐨勬帹宕囦笌閲嶈銆?/p><p> </p><p>鐢靛瓙鍟嗗姟鐨勫彂灞曚績榪涗簡Web Services鐨勫彂灞曘俉eb鏈嶅姟鍙互浣垮叕鍙擱檷浣庤繘琛岀數瀛愬晢鍔$殑鎴愭湰錛屾洿蹇湴閮ㄧ講瑙e喅鏂規浠ュ強寮鎷撴洿澶氱殑鏂版満閬囥俉eb鏈嶅姟浣垮簲鐢ㄧ▼搴忕殑闆嗘垚姣斾互鍓嶆洿蹇佹洿瀹規槗鑰屼笖鏇翠究瀹溿傚畠鏇存敞閲嶆湇鍔¤涔夎屼笉閭d箞娉ㄩ噸緗戠粶鍗忚璇箟鐨勬秷鎭紝浠庤屽疄鐜頒簡涓氬姟鍔熻兘鐨勬澗鏁h﹀悎銆傝繖浜涚壒鎬у浜庡湪浼佷笟涔嬮棿鍜屼紒涓氬唴閮ㄩ氳繃web榪炴帴涓氬姟鍔熻兘鏄潪甯哥悊鎯崇殑銆傚畠鎻愪緵浜嗕竴鑷村寲錛圲niform錛夌殑緙栫▼妯″瀷錛屼粠鑰屽湪浼佷笟鍐呭閮藉彲浠ュ埄鐢ㄩ氱敤鐨勫熀紜璁炬柦騫朵互涓縐嶉氱敤鐨勬柟娉曡繘琛屽簲鐢ㄧ▼搴忛泦鎴愩?/p><p> </p><p>瑕佺悊瑙eb Services, 棣栧厛闇瑕佽璇嗛潰鍚戞湇鍔$殑杞歡鏋舵瀯錛圫ervice Oriented Architecture錛岀畝縐癝OA錛夛紝Web Services鏄疭OA鏋舵瀯緋葷粺鐨勪竴涓疄渚嬨?/p><p>14.1.1闈㈠悜鏈嶅姟鐨勮蔣浠舵灦鏋勶紙SOA錛?/p><p> </p><p>1. 闈㈠悜鏈嶅姟涓殑鍩烘湰姒傚康</p><p>鍦ㄩ潰鍚戞湇鍔$殑鏋舵瀯涓寘鍚竴浜涘熀鏈殑姒傚康錛岄忚繃榪欎簺鍩烘湰姒傚康鍙互榪涗竴姝ヤ簡瑙i潰鍚戞湇鍔$殑鏋舵瀯銆?/p><p>(1) 鏈嶅姟鐨勬蹇?/p><p>鍦⊿OA涓殑鏈嶅姟鏄寚鑳藉澶勭悊涓浜涗換鍔¤繃紼嬬殑鍔ㄤ綔鐨勬娊璞℃蹇碉紝榪欎簺鏈嶅姟鍙互琚弿榪幫紝鍙互琚彂鐜幫紝鍙互鐢辨湇鍔′唬鐞嗚礋璐e悜璇鋒眰鑰呮彁渚涙湇鍔″茍緇欏嚭緇撴灉銆備唬鐞嗘槸鎸囪姹傛垨鑰呮彁渚涙湇鍔$殑浜烘墍浣跨敤鐨勮蔣浠跺伐鍏鳳紝浜洪氳繃浠g悊榪涜浜や簰鎿嶄綔銆?/p><p>(2) 娑堟伅鐨勬蹇?/p><p>鏈嶅姟浠g悊涔嬮棿闇瑕侀氳繃娑堟伅鐨勪紶閫掕繘琛屼氦浜掓搷浣滐紝娑堟伅鐨勫唴瀹瑰惈鏈変竴瀹氱殑璇箟鍜屾暟鎹紝娑堟伅浼犺緭闇瑕佷笌鏌愪釜閫氫俊鍗忚鐩哥粦瀹氭墠鑳藉瀹炵幇銆?/p><p>(3) 鏈嶅姟鐨勬弿榪板拰鍙戠幇</p><p>浼楀鐨勬湇鍔$粍鎴愪竴涓紑鏀劇郴緇燂紝闄や簡闇瑕佹彁渚涗俊鎭氦浜掓柟寮忎互澶栵紝榪橀渶瑕佹彁渚涚浉浜掍簡瑙g殑鏈哄埗錛岃繖灝遍渶瑕佹彁渚涙弿榪板拰鍙戠幇鐨勬柟寮忋備唬鐞嗗彲浠ラ氳繃鏈嶅姟鐨勬弿榪版潵浜嗚В涓涓湇鍔$殑鍐呭錛屽寘鎷嬌鐢ㄨ繖涓湇鍔$殑鎶鏈俊鎭佽闂繖涓湇鍔$殑鍦板潃淇℃伅絳夊唴瀹廣傚綋鏂扮殑鏈嶅姟琚姇鍏ュ埌緋葷粺涔嬩腑鍚庯紝瀹冮渶瑕佽娉ㄥ唽錛屽茍涓旇鑳藉琚彂鐜幫紝浣垮畠鍙互琚埄鐢ㄨ搗鏉ャ?/p><p> </p><p>2.涓轟粈涔堥渶瑕侀潰鍚戞湇鍔$殑杞歡</p><p>鐢變簬杞歡闇姹傜殑鎵╁ぇ錛岃蔣浠剁郴緇熷彉寰楄秺鏉ヨ秺澶嶆潅銆傞潰瀵瑰鏉傜殑緋葷粺璧勬簮錛屾垜浠渶瑕佷竴縐嶆洿鍔犲悎鐞嗙殑鏂瑰紡灝嗕笉鍚岀被鍨嬨佷笉鍚屼綅緗殑瀛愮郴緇熸湁鍔涘湴緇撳悎璧鋒潵錛岃繖縐嶆暣鍚堝茍涓嶆槸灝嗗畠浠箣闂寸粦瀹氬緱鏇村姞绱у瘑錛岃屾槸鍒╃敤鏇村姞鏉炬暎鐨勬柟寮忔潵寤虹珛榪欎釜緋葷粺銆?/p><p>SOA閫氳繃鏉炬暎鐨勬柟寮忓皢鍒嗗竷寮忕殑杞歡妯″潡緇撳悎璧鋒潵錛屼笌鏃ф湁緋葷粺闆嗘垚鐩告瘮鏈夌潃鏄庢樉鐨勪紭鍔褲傚浜庢湇鍔$殑浣跨敤鑰呮潵璇達紝鍙互綆鍗曞湴閫氳繃鏈嶅姟鐨勬弿榪版潵鑾峰彇鏈嶅姟錛岀郴緇熷悇閮ㄥ垎涔嬮棿涓嶅繀涓轟簡鏌愪竴閮ㄥ垎鐨勫崌綰ц屾敼鍙橈紝鍦ㄦ湇鍔$殑榪囩▼涓笉鍚岀殑杞歡妯″潡鍙互鍏呭綋涓嶅悓鐨勮鑹詫紝浠庤屾瀯鎴愭暣涓郴緇熺殑宸ヤ綔浣撶郴銆?/p><p>鍦⊿OA褰撲腑錛屼竴涓湇鍔′唬琛ㄧ殑鏄竴涓敱鏈嶅姟鎻愪緵鑰呭悜鏈嶅姟璇鋒眰鑰呭彂甯冪殑涓浜涘鐞嗚繃紼嬶紝榪欎釜榪囩▼鍦ㄨ璋冪敤涔嬪悗錛岃幏寰楁湇鍔¤姹傝呮墍闇瑕佺殑涓涓粨鏋溿傚湪榪欎釜榪囩▼涓紝鏈嶅姟璇鋒眰鑰呭彲浠ュ悜浠諱綍鑳藉鎻愪緵姝ら」鏈嶅姟鐨勬湇鍔℃彁渚涜呮潵璇鋒眰鏈嶅姟錛屾湇鍔″疄鐜扮殑榪囩▼瀵逛簬鏈嶅姟璇鋒眰鑰呮潵璇存槸閫忔槑鐨勩?/p><p>闅忕潃緋葷粺鍒嗗竷寮忓拰澶氱緇撴瀯澶嶅悎紼嬪害鐨勬彁楂橈紝SOA鐨勫法澶т紭鍔垮皢榪涗竴姝ヨ鎸栨帢銆?/p><p>(1) 寤虹珛鏉炬暎鑰﹀悎鐨勭郴緇?/p><p>鏉炬暎鑰﹀悎緋葷粺鐨勪紭鐐瑰凡緇忚涓氬唴鍏呭垎鍦拌鍙紝SOA浣滀負涓縐嶅垎甯冨紡鐨勭郴緇燂紝瀹冨疄鐜頒簡涓縐嶆湇鍔″拰鎻忚堪絳夋蹇電浉緇撳悎鐨勬灦鏋勩?/p><p>SOA涓殑鏈嶅姟鍦⊿OA鏋舵瀯涓鏍囧噯鐨勬弿榪拌璦鎵鎻忚堪錛屽茍閫氳繃涓庢煇縐嶄紶杈撳崗璁殑緇戝畾鏉ュ疄鐜扮浉浜掍箣闂寸殑浜や簰銆傝繖縐嶅熀浜庢湇鍔$殑鏋舵瀯浣挎暣涓郴緇熸垚涓轟竴涓澗鏁h﹀悎鐨勭粨鏋勶紝鍒╃敤涓庨氫俊鍗忚鐨勭粦瀹氬皢鍒嗗竷寮忕郴緇熶腑鐨勬墍鏈夐儴鍒嗚繛鎺ヨ搗鏉ワ紝鍒╃敤璇箟鍜屾湇鍔$殑鎻忚堪錛屽湪浠g悊涔嬮棿榪涜浜や簰銆?/p><p>(2) 鎻愰珮杞歡鐨勯噸鐢ㄦ?/p><p>闈㈠悜鏈嶅姟鐨勬灦鏋勮繕鎻愰珮浜嗗杞歡鐨勯噸鐢ㄦс備笌緇勪歡鏂瑰紡鐩告瘮錛孲OA緋葷粺涓殑鍗曚釜鏈嶅姟鐨勬敼鍙樹笉浼氬鍏朵粬閮ㄥ垎閫犳垚涓ラ噸鐨勫獎鍝嶏紝鍚屾椂鍒╃敤鏈嶅姟鐨勬弿榪頒嬌鍚屼竴鏈嶅姟鍙互鍏呭垎鍦拌鍏朵粬緋葷粺鎵璋冪敤錛屽悇涓郴緇熶箣闂村艦鎴愪簡楂樺害鐨勯噸鐢ㄦс?/p><p>鐜板湪姝e湪琚箍娉涗嬌鐢ㄧ殑涓浜涙湇鍔★紝姝e湪涓嶆柇鍦拌鍚勪釜緋葷粺鎵閲嶇敤錛岄噸鐢ㄧ殑鏉′歡鍗佸垎綆鍗曪紝鍙浜嗚В鏈嶅姟鐨勬弿榪幫紝鎴栬呭彲浠ヨ闂埌鏈嶅姟鐨勬弿榪板湴鍧鍗沖彲銆備笌緇勪歡閲嶇敤鐩告瘮錛屾湇鍔$殑閲嶇敤榪樺叿鏈変笌瀹炵幇璇█鏃犲叧鐨勭壒鐐癸紝閲嶇敤鏈嶅姟鐨勫鎴風紼嬪簭涓嶉渶瑕佷嬌鐢ㄤ笌鏈嶅姟瀹炵幇閮ㄥ垎鍚屾牱鐨勫紑鍙戣璦錛屼竴鍒囦氦浜掔殑榪囩▼閮芥槸鍒╃敤涓庡疄鐜版棤鍏崇殑鏂瑰紡榪涜鐨勩?/p><p>(3) 鎻愪緵鎸夐渶鏈嶅姟鐨勪唬鐮?/p><p>闈㈠悜鏈嶅姟鐨勬灦鏋勪篃浣垮緱緋葷粺鐨勫疄鐜拌櫄鎷熷寲錛屽湪SOA鏋舵瀯涓殑璇鋒眰鍜屾彁渚涗箣闂翠氦浜掓垨鐩鎬簰浠g悊鐨勮繃紼嬩腑錛屽彲璁$畻鐨勪唬鐮佽祫婧愬垎甯冨湪鏉炬暎緇撴瀯涓殑鍚勪釜閮ㄥ垎涓婏紝褰撹姹傚彂鐢熸椂鎵嶈璋冪敤鍜屾湇鍔★紝鎵鏈夎綆楄繃紼嬮兘鏄寜鐓ц姹傝呯殑闇姹傝繘琛岀殑銆傛湇鍔$殑瀵硅薄鍒嗕負鏈夌姸鎬佸拰鏃犵姸鎬佷袱縐嶆柟寮忔彁渚涙湇鍔★紝鎸夌収闇姹傛彁渚涙湇鍔★紝涔熷彲浠ュ埄鐢ㄧ紦鍐叉満鍒朵紭鍖栫郴緇熺殑緋葷粺銆?/p><p>鎬諱箣錛孲OA浣夸唬鐮佺殑寮鍙戝彉寰楁洿鏈夋湇鍔$殑鐩殑鎬э紝浣垮紑鍙戞洿鍔犳湁鏁堝拰鍚堢悊銆?/p><p> </p><p>14.1.2 SOA涓?Web 2.0</p><p>鍙﹀錛屾垜浠ˉ鍏呬竴涓婼OA涓庣洰鍓嶅悓鏍風儹闂ㄧ殑Web 2.0鐨勫叧緋匯?/p><p>瀹為檯涓奧eb 2.0 鍜孲OA鐨勬蹇靛湪寰堝ぇ紼嬪害涓婃槸鐩稿悓鐨勶紝鍙槸琚矇楗版垚涓鴻蔣浠剁殑涓嶅悓閮ㄥ垎錛堝鏋滅殑紜瓨鍦ㄤ笉鍚岀殑璇濓級錛屼篃灝辨槸璇碨OA鍜學eb 2.0鏈夊緢澶氶噸鍙犵殑涓滆タ錛屼緥濡傞兘鏄熀浜庤皟鐢紙invoke錛夌殑鏈嶅姟錛岄兘鑳藉瓨鍦ㄤ簬緗戠粶鐨勪換浣曚綅緗瓑絳夈?/p><p>SOA鍜學eb 2.0鐨勫叡鎬ц繙澶т簬瀹冧滑涔嬮棿鐨勫尯鍒紝鑰屼笖Web 2.0鍦ㄦ帹騫縎OA鏂歸潰璧峰埌浜嗕竴瀹氫綔鐢ㄣ傚埌鐜板湪涓烘錛孲OA鍜學eb 2.0鎷ユ湁涓嶅悓鐨勬敮鎸佽? SOA鏇村娑夊強浼佷笟緇撴瀯鍜屽晢鍔″紑鎷擄紝鑰學eb 2.0鏇村叧娉ㄧ敤鎴楓傝繖縐嶅樊鍒殢鐫鏇村浼佷笟鎺ョ撼Web 2.0鑰屽湪鍙樺寲錛屼絾鏄繖涓ら」鎶鏈湁鐫涓嶅悓鐨勯噸蹇? Web 2.0鍛婅瘔鎴戜滑鏁版嵁鏄蔣浠跺簲鐢ㄤ腑鏈閲嶈鐨勯儴鍒嗭紝鑰孲OA鍛婅瘔鎴戜滑鏈嶅姟鎵嶆槸涓績銆係OA涓紶杈撴暟鎹殑鏈嶅姟涔熼潪甯擱噸瑕侊紝浣嗘槸浼犵粺SOA鏇村叧娉↖T緋葷粺鐨勬帴鍚堝鑰屼笉鏄偅浜涜兘浣挎帴鍚堝鏇村叿浠峰肩殑涓滆タ銆備篃灝辨槸璇達紝SOA涔熻鏄氱晠鐨勭閬擄紝浣嗗茍涓嶆槸緋葷粺涓氳繃鐨勬按鐨勪環鍊箋傝澶氳涓氶瀵艱呰浼佷笟鍚屾椂闇瑕丼OA綾繪柟娉曠殑緇撴瀯鍜學eb 2.0鏂規硶鐨勫垱涓氳兘鍔涖?/p><p>SOA鍜學eb 2.0涔嬮棿鏈夎澶氬叡鏈夌殑瑕佺礌錛?/p><p>l 杞歡閲嶇粍</p><p>l 綆$悊</p><p>l 杞歡灝辨槸鏈嶅姟</p><p>l 搴旂敤灝辨槸騫沖彴</p><p>l 鏃犳剰璇嗙殑浣跨敤</p><p>l 寮鏀?/p><p>l AJAX</p><p>l 浜掓搷浣滄?/p><p>l 璐у竵鍖?/p><p>l 瀹夊叏</p><p>l 緗戠粶瀵煎悜鏋舵瀯</p><p>鐗瑰埆瑕佽鐨勬槸錛屾渶鍚庝竴鏉$綉緇滃鍚戞灦鏋勬垨鑰匴eb Oriented Architecture錛圵OA錛夋槸鍏抽敭鐨勫唴瀹癸紝鏈緇堟湁鍙兘浼氬皢SOA鍜學eb 2.0鍚堜負涓浣撱?/p><p> </p><p>浜嗚В浜哠OA鍚庯紝 鎴戜滑鏉ヤ粙緇嶄粈涔堟槸Web Services銆俉eb Services鏄疭OA鏋舵瀯緋葷粺鐨勪竴涓疄渚嬨備粠鎶鏈搴︽潵璁詫紝Web Services鏄竴縐嶆柊鐨勬妧鏈灦鏋勩佹柊鐨勮蔣浠跺簲鐢ㄧ幆澧冦傚畠鐨勭郴緇熸灦鏋勫拰瀹炵幇鎶鏈畬鍏ㄧ戶鎵垮凡鏈夌殑鎶鏈紝鍙互璁や負Web Services鏄疘nternet鐨勪竴縐嶅歡浼革紝鏄幇鏈夌殑Internet闈㈠悜鏇村ソ鐨勪簰鎿嶄綔鑳藉姏鐨勪竴涓歡浼搞?/p><p>14.2錛?Web Services鐨勬蹇?/p><p>Web Services錛屼粠瀛楅潰涓婄悊瑙e氨鏄氳繃Web鎻愪緵鐨勬湇鍔°傛垜浠彲浠ョ悊瑙eb Services鏄嚜鍖呭惈鐨勩佹ā鍧楀寲鐨勫簲鐢ㄧ▼搴忥紝瀹冨彲浠ュ湪緗戠粶(閫氬父涓篧eb)涓鎻忚堪銆佸彂甯冦佹煡鎵句互鍙婅皟鐢紱涔熷彲浠ョ悊瑙eb Services鏄熀浜庣綉緇滅殑銆佸垎甯冨紡鐨勬ā鍧楀寲緇勪歡錛屽畠鎵ц鐗瑰畾鐨勪換鍔★紝閬靛畧鍏蜂綋鐨勬妧鏈鑼冿紝榪欎簺瑙勮寖浣垮緱Web Sevices鑳戒笌鍏朵粬鍏煎鐨勭粍浠惰繘琛屼簰鎿嶄綔錛涗篃鍙互榪欐牱鐞嗚В錛屾墍璋揥eb鏈嶅姟錛屽畠鏄寚鐢變紒涓氬彂甯冪殑瀹屾垚鍏剁壒鍒晢鍔¢渶姹傜殑鍦ㄧ嚎搴旂敤鏈嶅姟錛屽叾浠栧叕鍙告垨搴旂敤杞歡鑳藉閫氳繃Internet鏉ヨ闂茍浣跨敤榪欓」搴旂敤鏈嶅姟</p><p>瀵逛簬Web Services錛屽緢澶氫漢浼氫笌Web Service娣蜂負涓璋堬紝璁や負浜岃呮寚鐨勬槸鍚屼竴涓簨鐗┿傚叾瀹炰笉鐒訛紝鍓嶈呮寚鐨勬槸鐢ㄤ簬寤烘瀯Web Service鐨勬妧鏈鏋訛紝鍚庤呮寚鐨勬槸浣跨敤Web Services鎶鏈屽垱寤虹殑搴旂敤瀹炰緥銆俉eb Services鏄弿榪頒簡涓浜涙搷浣滅殑鎺ュ彛錛屽熀浜庢爣鍑嗗寲鐨刋ML娑堟伅浼犺緭鏈哄埗錛屾垜浠彲浠ラ氳繃緗戠粶璁塊棶榪欎簺鎿嶄綔銆俉eb Services浣跨敤瑙勮寖鐨勩佸熀浜嶺ML鐨刉SDL(Web Services Description Language)璇█鎻忚堪鐨勶紝榪欑О涓篧eb Services鐨勬湇鍔℃弿榪般傝繖涓鎻忚堪鍥婃嫭浜嗕笌鏈嶅姟浜や簰鎵闇瑕佺殑鍏ㄩ儴緇嗚妭錛屽寘鎷秷鎭牸寮忥紙璇︾粏鎻忚堪鎿嶄綔鐨勮緭鍏ヨ緭鍑烘秷鎭牸寮忥級銆佷紶杈撳崗璁拰浣嶇疆銆傝鎺ュ彛闅愯棌浜嗘湇鍔″疄鐜扮殑緇嗚妭錛屽厑璁擱氳繃鐙珛涓庢湇鍔″疄鐜般佺嫭绔嬩簬杞‖浠跺鉤鍙般佺嫭绔嬩簬緙栧啓鏈嶅姟鎵鐢ㄧ殑緙栫▼璇█鐨勬柟寮忎嬌鐢ㄨ鏈嶅姟銆傝繖浣垮緱鍩轟簬Web Services鐨勫簲鐢ㄧ▼搴忓叿鏈夋澗鏁h﹀悎銆侀潰鍚戠粍浠跺拰璺ㄦ妧鏈疄鐜扮殑鐗圭偣銆俉eb Services閮藉飽琛屼竴瀹氱殑鐗瑰畾涓氬姟鎴栦換鍔★紝鍙互瀹炵幇鍚屽叾浠朩eb Services涓璧風敤浜庡疄鐜板鏉傜殑鍟嗕笟浜ゆ槗銆?/p><p>浠庡閮ㄤ嬌鐢ㄨ呰搴﹁岃█錛學eb Services鏄竴縐嶉儴緗插湪Web涓婄殑瀵硅薄鍜岀粍浠訛紝鍏峰浠ヤ笅鐗瑰緛錛?/p><p>.瀹屽ソ鐨勫皝瑁呮э細</p><p>Web鏈嶅姟鏃㈢劧鏄竴縐嶉儴緗插湪web涓婄殑瀵硅薄錛岃嚜鐒跺叿澶囧璞$殑鑹ソ灝佽鎬э紝瀵逛簬浣跨敤鑰呰岃█錛屼粬鑳戒笖浠呰兘鐪嬪埌璇ュ璞℃彁渚涚殑鍔熻兘鍒楄〃銆?/p><p>.鏉炬暎鑰﹀悎</p><p>榪欎竴鐗瑰緛涔熸槸婧愪簬瀵硅薄錛忕粍浠舵妧鏈紝褰撲竴涓猈eb鏈嶅姟鐨勫疄鐜板彂鐢熷彉鏇寸殑鏃跺欙紝璋冪敤鑰呮槸涓嶄細鎰熷埌榪欎竴鐐圭殑錛屽浜庤皟鐢ㄨ呮潵璇達紝鍙Web鏈嶅姟鐨勮皟鐢ㄧ晫闈笉鍙橈紝Web鏈嶅姟瀹炵幇鐨勪換浣曞彉鏇村浠栦滑鏉ヨ閮芥槸閫忔槑鐨勶紝鐢氳嚦鏄綋Web鏈嶅姟鐨勫疄鐜板鉤鍙頒粠J2EE榪佺Щ鍒頒簡錛嶯ET鎴栬呮槸鐩稿弽鐨勮縼縐繪祦紼嬶紝鐢ㄦ埛閮藉彲浠ュ姝や竴鏃犳墍鐭ャ傚浜庢澗鏁h﹀悎鑰岃█錛屽挨鍏舵槸鍦↖nternet鐜涓嬬殑Web鏈嶅姟鑰岃█錛岄渶瑕佹湁涓縐嶉傚悎Internet鐜鐨勬秷鎭氦鎹㈠崗璁紝鑰孹ML錛廠OAP姝f槸鐩墠鏈涓洪傚悎鐨勬秷鎭氦鎹㈠崗璁?/p><p>.浣跨敤鍗忚鐨勮鑼冩?/p><p>榪欎竴鐗瑰緛浠庡璞¤屾潵錛屼絾鐩告瘮涓鑸璞★紝瀹冩洿鍔犺鑼冨寲鍜屾槗浜庣悊瑙c傞鍏堬紝浣滀負Web鏈嶅姟錛屽璞$晫闈㈡墍鎻愪緵鐨勫姛鑳藉簲褰撲嬌鐢ㄦ爣鍑嗙殑鎻忚堪璇█鏉ユ弿榪?姣斿WSDL)錛涘叾嬈★紝鐢辨爣鍑嗘弿榪拌璦鎻忚堪鐨勬湇鍔$晫闈㈠簲褰撴槸鑳藉琚彂鐜扮殑錛屽洜姝よ繖涓鎻忚堪鏂囨。闇瑕佽瀛樺偍鍦ㄧ鏈夌殑鎴栧叕鍏辯殑娉ㄥ唽搴撻噷闈€傚悓鏃訛紝浣跨敤鏍囧噯鎻忚堪璇█鎻忚堪鐨勪嬌鐢ㄥ崗綰﹀皢涓嶄粎浠呮槸鏈嶅姟鐣岄潰錛屽畠灝嗚寤朵幾鍒癢eb鏈嶅姟鐨勮仛鍚堛佽法Web鏈嶅姟鐨勪簨鍔°佸伐浣滄祦絳夛紝鑰岃繖浜涘張閮介渶瑕佹湇鍔¤川閲?QoS)鐨勪繚闅溿傚叾嬈★紝鎴戜滑鐭ラ亾瀹夊叏鏈哄埗瀵逛簬鏉炬暎鑰﹀悎鐨勫璞$幆澧冪殑閲嶈鎬э紝鍥犳鎴戜滑闇瑕佸璇稿鎺堟潈璁よ瘉銆佹暟鎹畬鏁存?姣斿絳懼悕鏈哄埗)銆佹秷鎭簮璁よ瘉浠ュ強浜嬪姟鐨勪笉鍙惁璁ゆх瓑榪愮敤瑙勮寖鐨勬柟娉曟潵鎻忚堪銆佷紶杈撳拰浜ゆ崲銆傛渶鍚庯紝鍦ㄦ墍鏈夊眰嬈$殑澶勭悊閮藉簲褰撴槸鍙鐞嗙殑錛屽洜姝ら渶瑕佸綆$悊鍗忕害榪愮敤鍚屾牱鐨勬満鍒躲?/p><p>.楂樺害鍙泦鎴愯兘鍔?/p><p>鐢變簬Web鏈嶅姟閲囧彇綆鍗曠殑銆佹槗鐞嗚В鐨勬爣鍑嗭紝Web鍗忚浣滀負緇勪歡鐣岄潰鎻忚堪鍜屽崗鍚屾弿榪拌鑼冿紝瀹屽叏灞忚斀浜嗕笉鍚岃蔣浠跺鉤鍙扮殑宸紓錛屾棤璁烘槸CORBA銆丏COM榪樻槸EJB錛岄兘鍙互閫氳繃榪欎竴縐嶆爣鍑嗙殑鍗忚榪涜浜掓搷浣滐紝瀹炵幇浜嗗湪褰撳墠鐜涓嬫渶楂樼殑鍙泦鎴愭с?/p><p> </p><p>14.2.1 Web Services鐨勬牳蹇冩妧鏈?/p><p> </p><p>Web Services 鏄竴縐嶅熀浜庣粍浠剁殑杞歡騫沖彴,鏄潰鍚戞湇鍔$殑Internet 搴旂敤銆俉eb Services 鏄簲鐢ㄤ簬Internet 鐨?鑰屼笉鏄檺浜庡眬鍩熺綉鎴栬瘯楠岀幆澧冿紝榪欏氨瑕佹眰Web Services 妗嗘灦蹇呴』閫傜敤浜庣幇鏈夌殑Internet 杞歡鍜岀‖浠剁幆澧?鍗蟲湇鍔$殑鎻愪緵鑰呮墍鎻愪緵鐨勬湇鍔″繀欏誨叿鏈夎法騫沖彴銆佽法璇█鐨勭壒鎬с傚叾嬈?Web Services 鎵鎻愪緵鐨勬湇鍔′笉浣嗘槸闈㈠悜浜?鑰屼笖闇鏈嶅姟浜庡叾瀹冨簲鐢ㄧ郴緇熴傜幇鏈夌殑Web緗戠珯涔熷彲浠ヨ涓烘槸闈㈠悜鏈嶅姟鐨?浣嗚繖縐嶆湇鍔′粎浠呭彲浠ユ彁渚涚粰浜轟嬌鐢?鍙湁浜虹被鎵嶅彲浠ヨ鎳傛祻瑙堝櫒涓嬭澆鐨勯〉闈? 銆傝屾柊涓浠g殑Web Services 鎵鎻愪緵鐨勬湇鍔″簲鑳借鏈哄櫒鎵璇繪噦,渚嬪鍏跺畠搴旂敤紼嬪簭鍙婄Щ鍔ㄨ澶囦腑鐨勮蔣浠剁郴緇熴傝繖鏍?鎴戜滑鍙互鐪嬪嚭,Web Services 鐨勫彂灞曟柟鍚戝疄闄呬笂鏄瀯閫犱竴涓熀浜庣幇鏈塈nternet 鎶鏈箣涓婄殑鍒嗗竷璁$畻緋葷粺銆?/p><p>Web Services 妗嗘灦鐨勬牳蹇冩妧鏈寘鎷琒OAP(Simple Object Access Protocol,綆鍗曞璞¤闂崗璁? ,WSDL(Web Services Description Lanuage,Web鏈嶅姟鎻忚堪璇█) 鍜孶DDI錛圲niversal Description錛孌iscovery and Integration錛岄氱敤鎻忚堪錛屽彂鐜幫紝闆嗘垚) ,瀹冧滑閮芥槸浠ユ爣鍑嗙殑XML 鏂囨。鐨勫艦寮忚〃榪扮殑銆?/p><p>XML鏄疻eb Services鎶鏈綋緋諱腑鏈鍩虹鐨勬爣鍑嗭紝Web Services鐨勪竴鍒囬兘寤虹珛鍦╔ML鎶鏈殑鍩虹涔嬩笂錛屽寘鎷琖eb Services鐨勬秷鎭佹弿榪板拰鏈嶅姟瀹炵幇鐨勫悇涓幆鑺傘傚埄鐢╔ML錛學eb Services鐨勬湇鍔℃彁渚涜呭拰璇鋒眰鑰呭彲浠ュ埄鐢ㄤ笉鍚岀殑寮鍙戣璦鏉ュ崗浣滃畬鎴愭湇鍔¤皟鐢ㄧ殑榪囩▼銆俋ML鏄疻eb Services鎶鏈綋緋諱腑鐨勫緢澶氭爣鍑嗗緱浠ュ緩绔嬬殑鍩虹錛屽湪Web Services緋葷粺涓棤澶勪笉鍦ㄣ?/p><p> </p><p>SOAP 鏄疻eb services 鐨勯氫俊鍗忚銆係OAP鏄竴縐嶇畝鍗曠殑銆佽交閲忕駭鐨勫熀浜嶺ML 鐨勬満鍒訛紝鐢ㄤ簬鍦ㄧ綉緇滃簲鐢ㄧ▼搴忎箣闂磋繘琛岀粨鏋勫寲鏁版嵁浜ゆ崲銆係OAP鍖呮嫭涓夐儴鍒?涓涓畾涔夋弿榪版秷鎭唴瀹圭殑妗嗘灦鐨勪俊灝侊紝涓緇勮〃紺哄簲鐢ㄧ▼搴忓畾涔夌殑鏁版嵁綾誨瀷瀹炰緥鐨勭紪鐮佽鍒欙紝浠ュ強琛ㄧず榪滅▼榪囩▼璋冪敤鍜屽搷搴旂殑綰﹀畾銆?/p><p>WSDL琛ㄧずWEB鏈嶅姟璇存槑璇█銆俉SDL鏂囦歡鏄竴涓猉ML 鏂囨。錛岀敤浜庤鏄庝竴緇凷OAP娑堟伅浠ュ強濡備綍浜ゆ崲榪欎簺娑堟伅錛岄氳繃WSDL鍙互鎻忚堪涓涓湇鍔$殑淇℃伅銆傝繖浜涗俊鎭嬌涓嶄簡瑙h繖涓湇鍔$殑寮鍙戣呭彲浠ュ緩绔嬭皟鐢ㄨ繖涓湇鍔$殑瀹㈡埛绔唬鐮侊紝鎴栬呴氳繃WSDL甯姪鐢熸垚瀹炵幇瀹冪殑鍩烘湰浠g爜緇撴瀯銆俉SDL鍦╓eb Services鐨勫疄闄呭紑鍙戣繃紼嬩腑璧風潃閲嶈鐨勪綔鐢ㄣ?/p><p> </p><p>銆銆Web Services鏄熀浜庝簰鑱旂綉鐨勫簲鐢ㄧ▼搴忔ā鍧楋紝鐢ㄤ簬鍦ㄤ簰鑱旂綉涓婅繍琛岋紝瀹冮噰鐢ㄥ紑鏀劇殑UDDI錛圲niversal Description錛孌iscovery and Integration錛岄氱敤鎻忚堪錛屽彂鐜幫紝闆嗘垚錛夋爣鍑嗐俇DDI鏍囧噯鍏堢敱IBM銆佸井杞丄riba鍒惰錛屽埌鐩墠涓烘鑾峰緱浜?30澶氬鍏徃鐨勬敮鎸併俇DDI 鎻愪緵涓縐嶅彂甯冨拰鏌ユ壘鏈嶅姟鎻忚堪鐨勬柟娉曘俇DDI 鏁版嵁瀹炰綋鎻愪緵瀵瑰畾涔変笟鍔″拰鏈嶅姟淇℃伅鐨勬敮鎸併俉SDL 涓畾涔夌殑鏈嶅姟鎻忚堪淇℃伅鏄疷DDI娉ㄥ唽涓績淇℃伅鐨勮ˉ鍏呫俇DDI鎻愪緵浜嗕竴涓紑鏀撅紝騫沖彴鐙珛鐨勬妧鏈鏋訛紝鏉ヤ嬌浼佷笟涔嬮棿鑳藉湪浜掕仈緗戜笂鎵懼埌瀵規柟鐨勬湇鍔★紝瀹氫箟瀹冧滑鍦ㄤ簰鑱旂綉涓婄殑浜や簰媧誨姩錛屼互鍙婅繖浜涗俊鎭殑鍏變韓鏂瑰紡銆?/p><p> </p><p>Web 鏈嶅姟浣撶郴緇撴瀯鍩轟簬涓夌瑙掕壊錛堟湇鍔℃彁渚涜呫佹湇鍔℃敞鍐屼腑蹇冨拰鏈嶅姟璇鋒眰鑰咃級涔嬮棿鐨勪氦浜掋?/p><p>鏈嶅姟鎻愪緵鑰呫備粠浼佷笟鐨勮搴︾湅錛岃繖鏄湇鍔$殑鎵鏈夎呫備粠浣撶郴緇撴瀯鐨勮搴︾湅錛岃繖鏄墭綆¤闂湇鍔$殑騫沖彴銆?nbsp;<br />鏈嶅姟璇鋒眰鑰咃紙鐢ㄦ埛錛夈備粠浼佷笟鐨勮搴︾湅錛岃繖鏄姹傛弧瓚崇壒瀹氬姛鑳界殑浼佷笟銆備粠浣撶郴緇撴瀯鐨勮搴︾湅錛岃繖鏄鎵懼茍璋冪敤鏈嶅姟錛屾垨鍚姩涓庢湇鍔$殑浜や簰鐨勫簲鐢ㄧ▼搴忋傛湇鍔¤姹傝呰鑹插彲浠ョ敱嫻忚鍣ㄦ潵鎷呭綋錛岀敱浜烘垨鏃犵敤鎴風晫闈㈢殑紼嬪簭錛堜緥濡傦紝鍙﹀涓涓?Web 鏈嶅姟錛夋潵鎺у埗瀹冦?nbsp;<br />鏈嶅姟娉ㄥ唽涓績銆傝繖鏄彲鎼滅儲鐨勬湇鍔℃弿榪版敞鍐屼腑蹇冿紝鏈嶅姟鎻愪緵鑰呭湪姝ゅ彂甯冧粬浠殑鏈嶅姟鎻忚堪銆傚湪闈欐佺粦瀹氬紑鍙戞垨鍔ㄦ佺粦瀹氭墽琛屾湡闂達紝鏈嶅姟璇鋒眰鑰呮煡鎵炬湇鍔″茍鑾峰緱鏈嶅姟鐨勭粦瀹氫俊鎭紙鍦ㄦ湇鍔℃弿榪頒腑錛夈傚浜庨潤鎬佺粦瀹氱殑鏈嶅姟璇鋒眰鑰咃紝鏈嶅姟娉ㄥ唽涓績鏄綋緋葷粨鏋勪腑鐨勫彲閫夎鑹詫紝鍥犱負鏈嶅姟鎻愪緵鑰呭彲浠ユ妸鎻忚堪鐩存帴鍙戦佺粰鏈嶅姟璇鋒眰鑰呫傚悓鏍鳳紝鏈嶅姟璇鋒眰鑰呭彲浠ヤ粠鏈嶅姟娉ㄥ唽涓績浠ュ鐨勫叾瀹冩潵婧愬緱鍒版湇鍔℃弿榪幫紝渚嬪鏈湴鏂囦歡銆丗TP 绔欑偣銆乄eb 绔欑偣銆佸箍鍛婂拰鏈嶅姟鍙戠幇錛圓dvertisement and Discovery of Services錛孉DS錛夋垨鍙戠幇 Web 鏈嶅姟錛圖iscovery of Web Services錛孌ISCO錛夈?nbsp;<br /></p><p>銆銆Web Services 鐨勪綋緋繪灦鏋勫鍥? 鎵紺?br /><img src="http://www.ascenttech.cn/html/book/part/step3/xx12/image001.jpg" width="308" height="143" alt="" /></p><p>Web Services 鏈嶅姟鎻愪緵鏂歸氳繃WSDL(Web Services Description Language) 鎻忚堪鎵鎻愪緵鐨勬湇鍔?騫跺皢榪欎竴鎻忚堪鍛婄煡Web Services 娉ㄥ唽鏈嶅姟鍣ㄣ傛敞鍐屾湇鍔″櫒渚濇嵁WSDL 鐨勬弿榪?渚濈収UDDI (Universal Description Discovery and Integration) 鐨勫崗瀹氭洿鏂版湇鍔$洰褰曞茍鍦↖nternet 涓婂彂甯冦傜敤鎴峰湪浣跨敤Web Services 鍓嶅厛鍚戞敞鍐屾湇鍔″櫒鍙戝嚭璇鋒眰,鑾峰緱Web Services 鎻愪緵鑰呯殑鍦板潃鍜屾湇鍔℃帴鍙d俊鎭?涔嬪悗浣跨敤SOAP 鍗忚(Simple Object Access Protocol) 涓嶹eb Services 鎻愪緵鑰呭緩绔嬭繛鎺?榪涜閫氫俊銆俉eb Services 鐨勬妧鏈富瑕佸緩绔嬪湪XML 鐨勮鑼冧箣涓?榪欎繚璇佷簡榪欎竴浣撶郴緇撴瀯鐨勫鉤鍙版棤鍏蟲с佽璦鏃犲叧鎬у拰浜烘満浜や簰鎬ц兘銆?/p><p> </p><p>14.2.2 Web 鏈嶅姟寮鍙戠敓鍛藉懆鏈?/p><p>Web 鏈嶅姟寮鍙戠敓鍛藉懆鏈熷寘鎷簡璁捐鍜岄儴緗蹭互鍙婂湪榪愯鏃跺鏈嶅姟娉ㄥ唽涓績銆佹湇鍔℃彁渚涜呭拰鏈嶅姟璇鋒眰鑰呮瘡涓涓鑹茬殑瑕佹眰銆傛瘡涓鑹插寮鍙戠敓鍛藉懆鏈熺殑姣忎竴鍏冪礌閮芥湁鐗瑰畾瑕佹眰銆?/p><p>Web 鏈嶅姟寮鍙戠敓鍛藉懆鏈熸湁浠ヤ笅鍥涗釜闃舵錛?/p><p>1. 鏋勫緩 <br />鐢熷懡鍛ㄦ湡鐨勬瀯寤洪樁孌靛寘鎷紑鍙戝拰嫻嬭瘯 Web 鏈嶅姟瀹炵幇銆佸畾涔夋湇鍔℃帴鍙f弿榪板拰瀹氫箟鏈嶅姟瀹炵幇鎻忚堪銆傛垜浠彲浠ラ氳繃鍒涘緩鏂扮殑 Web 鏈嶅姟銆佹妸鐜版湁鐨勫簲鐢ㄧ▼搴忓彉鎴?Web 鏈嶅姟鍜岀敱鍏跺畠 Web 鏈嶅姟鍜屽簲鐢ㄧ▼搴忕粍鎴愭柊鐨?Web 鏈嶅姟鏉ユ彁渚?Web 鏈嶅姟鐨勫疄鐜般?/p><p>2. 閮ㄧ講 <br />閮ㄧ講闃舵鍖呮嫭鍚戞湇鍔¤姹傝呮垨鏈嶅姟娉ㄥ唽涓績鍙戝竷鏈嶅姟鎺ュ彛鍜屾湇鍔″疄鐜扮殑瀹氫箟錛屼互鍙婃妸 Web 鏈嶅姟鐨勫彲鎵ц鏂囦歡閮ㄧ講鍒版墽琛岀幆澧冿紙鍏稿瀷鎯呭喌涓嬶紝Web 搴旂敤紼嬪簭鏈嶅姟鍣級涓?/p><p>3. 榪愯 <br />鍦ㄨ繍琛岄樁孌碉紝鍙互璋冪敤 Web 鏈嶅姟銆傚湪姝わ紝Web 鏈嶅姟瀹屾垚閮ㄧ講錛屾垚涓哄彲鎿嶄綔鐨勬湇鍔°傛湇鍔¤姹傝呭彲浠ヨ繘琛屾煡鎵懼拰緇戝畾鎿嶄綔銆?/p><p>4. 綆$悊 <br />綆$悊闃舵鍖呮嫭鎸佺畫鐨勭鐞嗗拰緇忚惀 Web 鏈嶅姟搴旂敤紼嬪簭銆傚畨鍏ㄦс佸彲鐢ㄦс佹ц兘銆佹湇鍔¤川閲忓拰涓氬姟嫻佺▼闂閮藉繀欏昏瑙e喅銆?/p><p> </p><p>鎺ヤ笅鏉ユ垜浠叿浣撳睍寮Web Services鍘熺悊銆?/p><p> </p><p>14.3錛嶹eb Services鍘熺悊</p><p> </p><p>棣栧厛錛屾垜浠皢鐪嬬湅 Web 鏈嶅姟鐨勪竴涓蹇墊у崗璁爤浠ュ強榪欎釜鍗忚鏍堢殑緇嗚妭銆傜劧鍚庢垜浠皢璁ㄨ閫夋嫨緗戠粶鍗忚鐨勬爣鍑嗐傛垜浠繕灝嗗洖欏句竴涓嬪熀鏈殑鍩轟簬 XML 鐨勬秷鎭紶閫掑垎甯冨紡璁$畻銆傛垜浠皢鐢ㄦ湇鍔℃弿榪版墿灞曞熀鏈殑 XML 娑堟伅浼犻掞紝鑰屾湇鍔℃弿榪版槸鏍規嵁瀹冪殑鍗忚鏍堟潵瑙i噴鐨勩傛帴涓嬫潵錛屾垜浠皢璁ㄨ鏈嶅姟鎻忚堪鍦?Web 鏈嶅姟浣撶郴緇撴瀯涓殑瑙掕壊錛岃鏄庢敮鎸侀潤鎬佸拰鍔ㄦ?Web 鏈嶅姟搴旂敤紼嬪簭鐨勬湇鍔″彂甯冩妧鏈殑鑼冨洿銆傛垜浠繕灝嗗洿緇曟湇鍔″彂甯冭璁烘湇鍔″彂鐜扮殑瑙掕壊銆傛渶鍚庯紝鎴戜滑灝嗘弿榪板熀鏈?Web 鏈嶅姟浣撶郴緇撴瀯鐨勬墿灞曪紝鐢靛瓙鍟嗗姟闇瑕佽繖浜涙墿灞曟墠鑳戒嬌鐢?Web 鏈嶅姟銆?/p><p> </p><p>14.3.1 Web 鏈嶅姟鍗忚鏍?/p><p>瑕佷互涓縐嶅彲浜や簰鎿嶄綔鐨勬柟寮忔墽琛屽彂甯冦佸彂鐜板拰緇戝畾榪欎笁涓搷浣滐紝蹇呴』鏈変竴涓寘鍚瘡涓灞傛爣鍑嗙殑 Web 鏈嶅姟鍗忚鏍堛傚浘 2 灞曠ず浜嗕竴涓蹇墊?Web 鏈嶅姟鍗忚鏍堛備笂闈㈢殑鍑犲眰寤虹珛鍦ㄤ笅闈㈠嚑灞傛彁渚涚殑鍔熻兘涔嬩笂銆傚瀭鐩寸殑鏉¤〃紺哄湪鍗忚鏍堜腑姣忎竴灞傚繀欏繪弧瓚崇殑闇姹傘?/p><p>鍥?. Web 鏈嶅姟姒傚康鎬у崗璁爤<br /><img src="http://www.ascenttech.cn/html/book/part/step3/xx12/image002.gif" width="424" height="312" alt="" /><br />Web 鏈嶅姟鍗忚鏍堢殑鍩虹鏄綉緇滃眰銆俉eb 鏈嶅姟瑕佽鏈嶅姟璇鋒眰鑰呰皟鐢紝灝卞繀欏繪槸鍙互閫氳繃緗戠粶璁塊棶鐨勩備簰鑱旂綉涓婂彲浠ュ叕鐢ㄧ殑 Web 鏈嶅姟浣跨敤鏅亶閫傜敤鐨勭綉緇滃崗璁侶TTP 鍑熷叾鏅亶鎬э紝鎴愪負浜嗕簰鑱旂綉鍙敤鐨?Web 鏈嶅姟鐪熸鐨勬爣鍑嗙綉緇滃崗璁俉eb 鏈嶅姟榪樺彲浠ユ敮鎸佸叾瀹冧簰鑱旂綉鍗忚錛屽寘鎷?SMTP 鍜?FTP銆傚唴閮ㄧ綉鍩熷彲浠ヤ嬌鐢ㄥ彲闈犳秷鎭紶閫掑拰璋冪敤鍩虹緇撴瀯錛屽 MQSeries 鍜?CORBA 絳夌瓑銆?/p><p> </p><p>涓嬩竴灞傛槸鍩轟簬 XML 鐨勬秷鎭紶閫掞紝瀹冭〃紺轟嬌鐢?XML 浣滀負娑堟伅浼犻掑崗璁殑鍩虹銆傞夋嫨 SOAP 浣滀負 XML 娑堟伅浼犻掑崗璁湁寰堝鍘熷洜錛?/p><p>瀹冩槸浣跨敤 XML 浼犻佷互鏂囨。涓轟腑蹇冪殑娑堟伅浠ュ強榪滅▼榪囩▼璋冪敤鐨勬爣鍑嗗寲灝佽鏈哄埗銆?nbsp;<br />SOAP 寰堢畝鍗曪紱瀹冨熀鏈笂鏄竴涓敤 XML 淇″皝浣滀負鏈夋晥璐熻澆鐨?HTTP POST銆?nbsp;<br />SOAP 姣斿 XML 綆鍗曠殑 HTTP POST 鏇村彈闈掔潗錛屽洜涓哄畠瀹氫箟浜嗕竴涓爣鍑嗘満鍒訛紝榪欎釜鏈哄埗灝嗘浜ゆ墿灞曪紙orthogonal extension錛夊悎騫朵負浣跨敤 SOAP 鎶ュご鍜屽鎿嶄綔鎴栧嚱鏁拌繘琛屾爣鍑嗙紪鐮佺殑娑堟伅銆?nbsp;<br />SOAP 娑堟伅鏀寔 Web 鏈嶅姟浣撶郴緇撴瀯涓殑鍙戝竷銆佹煡鎵懼拰緇戝畾鎿嶄綔銆?nbsp;<br />鏈嶅姟鎻忚堪灞傚疄闄呬笂鏄弿榪版枃妗g殑涓涓崗璁爤銆傞鍏堬紝WSDL 鏄熀浜?XML 鐨勬湇鍔℃弿榪扮殑鐪熸鏍囧噯銆傝繖鏄敮鎸佸彲浜や簰鎿嶄綔鐨?Web 鏈嶅姟鎵闇鐨勬渶灝忔爣鍑嗘湇鍔℃弿榪般俉SDL 瀹氫箟浜嗘湇鍔′氦浜掔殑鎺ュ彛鍜岀粨鏋勩傝鎸囧畾涓氬姟鐜銆佹湇鍔¤川閲忓拰鏈嶅姟涔嬮棿鐨勫叧緋伙紝鎴戜滑榪橀渶瑕佸彟澶栫殑鎻忚堪銆俉SDL 鏂囨。鍙互鐢卞叾瀹冩湇鍔℃弿榪版枃妗f潵琛ュ厖錛屼粠鑰屾弿榪?Web 鏈嶅姟鐨勮繖浜涙洿楂樼駭鐨勬柟闈€備緥濡傦紝鎻忚堪涓氬姟鐜闄や簡浣跨敤 WSDL 鏂囨。錛岃繕瑕佷嬌鐢?UDDI 鏁版嵁緇撴瀯銆俉eb 鏈嶅姟嫻佺▼璇█錛圵eb Services Flow Language錛學SFL錛夋枃妗d腑鍒欐弿榪頒簡鏈嶅姟緇勬垚鍜屾祦紼嬨?/p><p>鍥犱負 Web 鏈嶅姟琚畾涔変負鍙互閫氳繃 SOAP 浠庣綉緇滆繘琛岃闂紝騫剁敱鏈嶅姟鎻忚堪琛ㄧず錛屾墍浠ヨ鍗忚鏍堜腑鐨勫墠涓夊眰闇瑕佹彁渚涙垨浣跨敤 Web 鏈嶅姟銆傛渶綆鍗曠殑鍗忚鏍堝皢鍖呮嫭緗戠粶灞傜殑 HTTP銆乆ML 娑堟伅浼犻掑眰鐨?SOAP 鍗忚浠ュ強鏈嶅姟鎻忚堪灞傜殑 WSDL銆傛墍鏈変紒涓氶棿鎴栧叕鐢?Web 鏈嶅姟閮藉簲璇ユ敮鎸佽繖縐嶅彲浜や簰鎿嶄綔鐨勫熀紜鍗忚鏍堛俉eb 鏈嶅姟錛岀壒鍒槸浼佷笟鍐呴儴鎴栦笓鐢?Web 鏈嶅姟錛岃兘澶熸敮鎸佸叾瀹冪殑緗戠粶鍗忚鍜屽垎甯冨紡璁$畻鎶鏈傝鍗忚鏍堟彁渚涗簡浜掓搷浣滄э紝瀹冧嬌 Web 鏈嶅姟鑳藉鍒╃敤鐜版湁鐨勪簰鑱旂綉鍩虹緇撴瀯銆傝繖灝嗕嬌榪涘叆鏅亶瀛樺湪鐨勭幆澧冪殑鎴愭湰闈炲父浣庛傚彟澶栵紝鐏墊椿鎬у茍涓嶄細鍥犱負浜掓搷浣滄ч渶姹傝屾湁鎵闄嶄綆錛屽洜涓烘垜浠彲浠ヤ負閫夋嫨鎬у拰澧炲肩殑鎶鏈彁渚涘彟澶栫殑鏀寔銆備緥濡傦紝鎴戜滑蹇呴』鏀寔 HTTP 涓婄殑 SOAP錛屼絾涔熷彲浠ュ悓鏃舵敮鎸?MQ 涓婄殑 SOAP銆?/p><p>鍗忚鏍堢殑鏈涓嬮潰涓夊眰紜珛浜嗕繚璇佷竴鑷存у拰浜掓搷浣滄х殑鎶鏈紝鑰屽畠浠笂闈㈢殑涓ゅ眰錛屽嵆鏈嶅姟鍙戝竷鍜屾湇鍔″彂鐜幫紝鍙互鐢ㄥ縐嶈В鍐蟲柟妗堟潵瀹炵幇銆?/p><p>浠諱綍鑳藉璁╂湇鍔¤姹傝呬嬌鐢?WSDL 鏂囨。鐨勬搷浣滐紝涓嶇瀹冨浜庢湇鍔¤姹傝呯敓鍛藉懆鏈熺殑鍝釜闃舵錛岄兘絎﹀悎鏈嶅姟鍙戝竷鐨勬爣鍑嗐傝灞備腑鏈綆鍗曘佹渶闈欐佺殑瀹炰緥灝辨槸鏈嶅姟鎻愪緵鑰呯洿鎺ュ悜鏈嶅姟璇鋒眰鑰呭彂閫?WSDL 鏂囨。銆傝繖琚О涓虹洿鎺ュ彂甯冦傜數瀛愰偖浠舵槸鐩存帴鍙戝竷鐨勮澆浣撲箣涓銆傜洿鎺ュ彂甯冨闈欐佺粦瀹氱殑搴旂敤紼嬪簭鏉ヨ寰堟湁鐢ㄣ傚彟澶栵紝鏈嶅姟鎻愪緵鑰呰繕鍙互灝嗘弿榪版湇鍔$殑鏂囨。鍙戝竷鍒頒富鏈烘湰鍦?WSDL 娉ㄥ唽涓績銆佷笓鐢?UDDI 娉ㄥ唽涓績鎴?UDDI 榪愯惀鍟嗚妭鐐廣?/p><p>Web 鏈嶅姟濡傛灉娌℃湁琚彂甯冨氨涓嶈兘琚彂鐜幫紝鎵浠ヨ鏈嶅姟鍙戠幇渚濊禆浜庢湇鍔″彂甯冦傝灞傜殑鍚勭鍙戠幇鏈哄埗鍜屼竴緇勫彂甯冩満鍒朵簰鐩稿鉤琛屻備換浣曞厑璁告湇鍔¤姹傝呰幏寰楀鏈嶅姟鎻忚堪鐨勮闂潈錛屽茍鍦ㄨ繍琛屾椂浣垮簲鐢ㄧ▼搴忚兘澶熶嬌鐢ㄨ鏈嶅姟鎻忚堪鐨勬満鍒墮兘蹇呴』絎﹀悎鏈嶅姟鍙戠幇鐨勬爣鍑嗐傛渶綆鍗曘佹渶闈欐佺殑鍙戠幇鐨勫疄渚嬫槸闈欐佸彂鐜幫紝鍏朵腑鏈嶅姟璇鋒眰鑰呬粠鏈湴鏂囦歡鑾峰彇 WSDL 鏂囨。銆傝繖閫氬父閮芥槸閫氳繃鐩存帴鍙戝竷鑾峰彇鐨?WSDL 鏂囨。錛屾垨鑰呭墠闈㈡煡鎵炬搷浣滅殑緇撴灉銆傚彟澶栵紝涔熷彲浠ラ氳繃浣跨敤鏈湴 WSDL 娉ㄥ唽涓績銆佷笓鐢?UDDI 娉ㄥ唽涓績鎴?UDDI 榪愯惀鍟嗚妭鐐瑰湪璁捐鏃舵垨榪愯鏃跺彂鐜版湇鍔°傚洜涓?Web 鏈嶅姟瀹炵幇鏄竴縐嶈蔣浠舵ā鍧楋紝鎵浠ラ氳繃緇勫緩 Web 鏈嶅姟鏉ヤ駭鐢?Web 鏈嶅姟鏄緢鑷劧鐨勩俉eb 鏈嶅姟鐨勭粍鍚堝彲浠ユ壆婕斿緢澶氳鑹蹭箣涓銆備紒涓氬唴閮ㄧ殑 Web 鏈嶅姟鍙兘浼氱浉浜掑悎浣滐紝浠庤屽澶栨樉紺哄嚭涓涓崟鐙殑 Web 鏈嶅姟鎺ュ彛錛屾垨鑰咃紝鏉ヨ嚜涓嶅悓浼佷笟鐨?Web 鏈嶅姟鍙互鐩鎬簰鍚堜綔錛屼粠鑰屾墽琛屾満鍣ㄥ埌鏈哄櫒銆佷紒涓氬埌浼佷笟鐨勪簨鍔°傚彟澶栵紝宸ヤ綔嫻佺▼綆$悊鑰呰繕鍙互鍦ㄥ弬涓庝笟鍔℃祦紼嬬殑鏃朵警璋冪敤姣忎釜 Web 鏈嶅姟銆傛渶涓婇潰涓灞傦紝鍗蟲湇鍔℃祦紼嬶紝鎻忚堪浜嗗浣曟墽琛屾湇鍔″埌鏈嶅姟鐨勯氳銆佸悎浣滀互鍙婃祦紼嬨俉SFL 鐢ㄤ簬鎻忚堪榪欎簺浜や簰銆傝浣?Web 鏈嶅姟搴旂敤紼嬪簭婊¤凍褰撲粖鐢靛瓙鍟嗗姟鐨勮揩鍒囬渶姹傦紝灝卞繀欏繪彁渚涗紒涓氱駭鍩虹緇撴瀯錛屽寘鎷畨鍏ㄦс佺鐞嗗拰鏈嶅姟璐ㄩ噺銆傝繖鍑犱釜鍨傜洿鏉″湪鍗忚鏍堢殑姣忎竴灞傞兘蹇呴』寰楀埌瑙e喅銆傛瘡涓灞傜殑瑙e喅鏂規鍙互褰兼鐙珛銆傞殢鐫 Web 鏈嶅姟鑼冧緥鐨勯噰鐢ㄥ拰鍙戝睍錛屽皢浼氬嚭鐜版洿澶氭綾誨瀭鐩存潯銆?/p><p>璇ュ崗璁爤鐨勬渶涓嬮潰鍑犲眰琛ㄧず鍩虹 Web 鏈嶅姟鍗忚鏍堬紝瀹冧滑鐩稿浜庡崗璁爤涓笂闈㈠嚑灞傛潵璇存洿鎴愮啛錛屼篃鏇存爣鍑嗐俉eb 鏈嶅姟鐨勬垚鐔熷拰閲囩敤灝嗕細甯﹀姩鍗忚鏍堜腑涓婇潰鍑犲眰鍜屽瀭鐩存潯鐨勫紑鍙戝拰鏍囧噯鍖栥?/p><p>緗戠粶灞?/p><p>Web 鏈嶅姟鍗忚鏍堢殑鏈搴曞眰鏄綉緇滃眰銆傝灞傚彲琛ㄧず浠繪剰澶氫釜緗戠粶鍗忚錛欻TTP銆丗TP銆丼MTP銆佹秷鎭帓闃燂紙Message Queuing錛夈佷簰鑱旂綉 ORB 闂村崗璁紙Internet Inter ORB Protocol錛孖IOP錛変笂鐨勮繙紼嬫柟娉曡皟鐢紙Remote Method Invocation錛孯MI錛夈佺數瀛愰偖浠剁瓑絳夈傚湪浠諱綍緇欏畾鐨勬儏鍐典笅浣跨敤鐨勭綉緇滃崗璁兘渚濊禆浜庡簲鐢ㄧ▼搴忛渶姹傘?/p><p>瀵逛簬鍙互浠庝簰鑱旂綉璁塊棶鐨?Web 鏈嶅姟錛屼漢浠夋嫨緗戠粶鎶鏈殑鏃朵警閫氬父浼氬懼悜浜庨夋嫨鏅亶閮ㄧ講鐨勫崗璁紝濡?HTTP銆傚浜庡唴閮ㄧ綉涓彁渚涘拰浣跨敤鐨?Web 鏈嶅姟錛屼嬌鐢ㄥ彟澶栫殑緗戠粶鎶鏈篃浼氳璁ゅ悓銆傛垜浠彲浠ユ牴鎹叾瀹冮渶姹傞夋嫨緗戠粶鎶鏈紝鍖呮嫭瀹夊叏鎬с佸彲鐢ㄦс佹ц兘浠ュ強鍙潬鎬с傝繖浣垮緱 Web 鏈嶅姟鍙互鍒╃敤宸叉湁鐨勫姛鑳芥洿楂樼駭鐨勮仈緗戝熀紜緇撴瀯鍜岄潰鍚戞秷鎭殑涓棿浠訛紝濡?MQSeries銆傚湪鏈夊縐嶇綉緇滃熀紜緇撴瀯鐨勪紒涓氫腑錛孒TTP 鍙互鐢ㄦ潵鍦ㄨ繖浜涘熀紜緇撴瀯涔嬮棿鎼緩妗ユ銆?/p><p>Web 鏈嶅姟鐨勫ソ澶勪箣涓鍦ㄤ簬錛屽畠涓轟笓鐢ㄥ唴閮ㄧ綉鍜屽叕鐢ㄤ簰鑱旂綉鏈嶅姟鐨勫紑鍙戝拰浣跨敤鎻愪緵浜嗙粺涓鐨勭紪紼嬫ā鍨嬨傛墍浠ワ紝緗戠粶鎶鏈殑閫夋嫨瀵規湇鍔″紑鍙戣呮潵璇存槸閫忔槑鐨勩?/p><p>鍩轟簬 XML 娑堟伅浼犻掔殑鍒嗗竷寮忚綆?/p><p>Web 鏈嶅姟浣撶郴緇撴瀯鏈鍩虹鐨勬敮鏌辨槸 XML 娑堟伅浼犻掋傚綋鍓?XML 娑堟伅浼犻掔殑琛屼笟鏍囧噯鏄?SOAP銆侷BM銆丮icrosoft 浠ュ強鍏跺畠浼佷笟閮藉悜 W3C 寤鴻 SOAP 浣滀負 XML 鍗忚宸ヤ綔緇勶紙XML Protocol Working Group錛夌殑鍩虹銆俋ML 鍗忚灝嗕唬鏇?SOAP 浣滀負琛屼笟鏍囧噯 XML 娑堟伅浼犻掑崗璁殑浣嶇疆銆傚綋 W3C 鍙戝竷 XML 鍗忚鐨勮崏妗堟爣鍑嗘椂錛學eb 鏈嶅姟浣撶郴緇撴瀯灝變細浠?SOAP 榪佺Щ鍒?XML 鍗忚銆?/p><p>SOAP 鏄竴縐嶇畝鍗曠殑銆佽交閲忕駭鐨勫熀浜?XML 鐨勬満鍒訛紝鐢ㄤ簬鍦ㄧ綉緇滃簲鐢ㄧ▼搴忎箣闂磋繘琛岀粨鏋勫寲鏁版嵁浜ゆ崲銆係OAP 鍖呮嫭涓夐儴鍒嗭細涓涓畾涔夋弿榪版秷鎭唴瀹圭殑妗嗘灦鐨勪俊灝併佷竴緇勮〃紺哄簲鐢ㄧ▼搴忓畾涔夌殑鏁版嵁綾誨瀷瀹炰緥鐨勭紪鐮佽鍒欙紝浠ュ強琛ㄧず榪滅▼榪囩▼璋冪敤錛坮emote procedure calls錛孯PC錛夊拰鍝嶅簲鐨勭害瀹氥係OAP 鍙互鍜屽悇縐嶇綉緇滃崗璁紙濡?HTTP銆丼MTP銆丗TP 鍜?IIOP 鎴?MQ 涓婄殑 RMI錛夌浉緇撳悎浣跨敤錛屾垨鑰呯敤榪欎簺鍗忚閲嶆柊灝佽鍚庝嬌鐢ㄣ?/p><p>铏界劧鐞嗚В榪欎釜鍩虹寰堥噸瑕侊紝浣嗗鏁?Web 鏈嶅姟寮鍙戣呬笉蹇呯洿鎺ュ鐞嗚繖涓熀紜緇撴瀯銆傚ぇ澶氭暟 Web 鏈嶅姟閮戒細浣跨敤浠?WSDL 鐢熸垚鐨勭粡榪囦紭鍖栫殑鐗瑰畾浜庣紪紼嬭璦鐨勭粦瀹氥傚綋鏈嶅姟鎻愪緵鑰呭拰鏈嶅姟璇鋒眰鑰呴兘鍦ㄧ被浼肩殑鐜涓墽琛屾椂錛岃繖縐嶄紭鍖栧彲鑳藉挨涓洪噸瑕併?/p><p>鍥?4 灞曠ず浜?XML 娑堟伅浼犻掞紙鍗?SOAP錛夊拰緗戠粶鍗忚濡備綍緇勬垚Web 鏈嶅姟浣撶郴緇撴瀯鐨勫熀紜銆?/p><p><img src="http://www.ascenttech.cn/html/book/part/step3/xx12/image004.jpg" width="576" height="277" alt="" /></p><p>鍥?4. 浣跨敤 SOAP 鐨?XML 娑堟伅浼犻?/p><p>緗戠粶鑺傜偣鍦ㄥ熀浜?XML 娑堟伅浼犻掔殑鍒嗗竷寮忚綆椾腑鎵紨鎻愪緵鑰呭拰璇鋒眰鑰呰鑹茬殑鍩烘湰瑕佹眰鏄瀯寤恒佽В鏋?SOAP 娑堟伅鐨勮兘鍔涳紙鎴栦袱鑰呭吋鑰屾湁涔嬶級錛屼互鍙婂湪緗戠粶涓婇氫俊鐨勮兘鍔涳紙鎺ユ敹銆佸彂閫佹秷鎭紝鎴栦袱鑰咃級銆?/p><p>閫氬父錛屽湪 Web 搴旂敤紼嬪簭鏈嶅姟鍣ㄤ腑榪愯鐨?SOAP 鏈嶅姟鍣ㄥ皢鎵ц榪欎簺鍔熻兘銆傚彟澶栵紝鎴戜滑涔熷彲浠ヤ嬌鐢ㄥ湪 API 涓皝瑁呰繖浜涘姛鑳界殑鐗瑰畾浜庣紪紼嬭璦鐨勮繍琛屽簱銆傚簲鐢ㄧ▼搴忎笌 SOAP 鐨勯泦鎴愬彲浠ラ氳繃浣跨敤鍥涗釜鍩烘湰姝ラ鏉ュ疄鐜幫細</p><p>鍦ㄥ浘 4 涓紝鏈嶅姟鎻愪緵鑰呯殑搴旂敤紼嬪簭鍦紙1錛夊垱寤轟竴鏉?SOAP 娑堟伅銆傝繖鏉?SOAP 娑堟伅鏄皟鐢ㄧ敱鏈嶅姟鎻愪緵鑰呮彁渚涚殑 Web 鏈嶅姟鎿嶄綔鐨勮姹傘傛秷鎭富浣撲腑鐨?XML 鏂囨。鍙互鏄竴涓?SOAP RPC 璇鋒眰錛屼篃鍙互鏄竴涓湇鍔℃弿榪頒腑鎵鎻忚堪鐨勪互鏂囨。涓轟腑蹇冪殑娑堟伅銆傛湇鍔¤姹傝呭皢姝や俊鎭拰鏈嶅姟鎻愪緵鑰呯殑緗戝潃涓璧鋒彁渚涚粰 SOAP 鍩虹緇撴瀯錛堜緥濡備竴涓?SOAP 瀹㈡埛鏈鴻繍琛屾椂錛夈係OAP 瀹㈡埛鏈鴻繍琛屾椂涓庝竴涓簳灞傜綉緇滃崗璁紙渚嬪 HTTP錛変氦浜掞紝鐒跺悗鍦ㄧ綉緇滀笂灝?SOAP 娑堟伅鍙戦佸嚭鍘匯?nbsp;<br />緗戠粶鍩虹緇撴瀯鍦紙2錛夊皢娑堟伅浼犻佸埌鏈嶅姟鎻愪緵鑰呯殑 SOAP 榪愯鏃訛紙渚嬪涓涓?SOAP 鏈嶅姟鍣級銆係OAP 鏈嶅姟鍣ㄥ皢璇鋒眰娑堟伅璺敱鍒版湇鍔℃彁渚涜呯殑 Web 鏈嶅姟銆傚鏋滃簲鐢ㄧ▼搴忛渶瑕侊紝SOAP 榪愯鏃惰礋璐e皢 XML 娑堟伅杞崲涓虹壒瀹氫簬緙栫▼璇█鐨勫璞°傝繖涓漿鎹㈢敱娑堟伅涓彲浠ユ壘鍒扮殑緙栫爜妯″紡鎵鎺у埗銆?nbsp;<br />Web 鏈嶅姟璐熻矗澶勭悊璇鋒眰淇℃伅騫剁敓鎴愪竴涓搷搴斻傝鍝嶅簲涔熸槸涓鏉?SOAP 娑堟伅銆傚搷搴旂殑 SOAP 娑堟伅鍦紙3錛夎鎻愪緵緇?SOAP 榪愯鏃訛紝鍏剁洰鐨勫湴鏄湇鍔¤姹傝呫傚湪 HTTP 涓婄殑鍚屾璇鋒眰錛忓搷搴旂殑鎯呭喌涓紝鑱旂綉鍗忚鐨勫簳灞傝姹傦紡鍝嶅簲鏈川鐢ㄤ簬瀹炵幇娑堟伅浼犻掔殑璇鋒眰錛忓搷搴旀湰璐ㄣ係OAP 榪愯鏃跺皢 SOAP 娑堟伅鍝嶅簲鍙戦佸埌緗戠粶涓婄殑鏈嶅姟璇鋒眰鑰呫?nbsp;<br />鍝嶅簲娑堟伅鍦紙4錛夌敱鏈嶅姟璇鋒眰鑰呰妭鐐逛笂鐨勮仈緗戝熀紜緇撴瀯鎺ユ敹銆傛秷鎭細緇忚繃鏁翠釜 SOAP 鍩虹緇撴瀯錛涘彲鑳戒細灝?XML 娑堟伅杞崲涓虹洰鏍囩紪紼嬭璦涓殑瀵硅薄銆傜劧鍚庯紝鍝嶅簲娑堟伅琚彁渚涚粰搴旂敤紼嬪簭銆?nbsp;<br />鏈ず渚嬩嬌鐢ㄤ簡璇鋒眰錛忓搷搴斾紶閫佸熀鏈師鐞嗭紝榪欑鍘熺悊鍦ㄥぇ澶氭暟鍒嗗竷寮忚綆楃幆澧冧腑閮藉緢甯歌銆傝姹傦紡鍝嶅簲浜ゆ崲鍙互鏄悓姝ョ殑錛屼篃鍙互鏄紓姝ョ殑銆傚叾瀹冧紶閫佸熀鏈師鐞嗭紝濡傚崟鍚戞秷鎭紶閫掞紙鏃犲搷搴旓級錛岄氱煡錛堟帹鍔ㄥ紡鍝嶅簲錛変互鍙婂彂甯冿紡璁㈤槄錛屼篃鍙兘鐢ㄥ埌 SOAP銆?/p><p>閭d箞錛屾湇鍔¤姹傝呭浣曠煡閬撹姹傛秷鎭簲璇ヤ嬌鐢ㄤ粈涔堟牸寮忓憿錛熻繖涓棶棰樺湪涓嬮潰浼氬緱鍒板洖絳斻?/p><p> </p><p>鏈嶅姟鎻忚堪錛氫粠 XML 娑堟伅浼犻掑埌 Web 鏈嶅姟</p><p>鏈嶅姟鎻愪緵鑰呮槸閫氳繃鏈嶅姟鎻忚堪灝嗘墍鏈夌敤浜庤皟鐢?Web 鏈嶅姟鐨勮鑼冧紶閫佺粰鏈嶅姟璇鋒眰鑰呯殑銆傝瀹炵幇 Web 鏈嶅姟浣撶郴緇撴瀯鐨勬澗鏁h﹀悎錛屽茍鍑忓皯鏈嶅姟鎻愪緵鑰呭拰鏈嶅姟璇鋒眰鑰呬箣闂存墍闇鐨勫叡璇嗙殑紼嬪害鍜屽畾鍒剁紪紼嬩笌闆嗘垚鐨勭▼搴︼紝鏈嶅姟鎻忚堪灝辨槸鍏抽敭銆備緥濡傦紝涓嶇鏄姹傝呰繕鏄彁渚涜咃紝閮戒笉蹇呬簡瑙e鏂圭殑搴曞眰騫沖彴銆佺紪紼嬭璦鎴栧垎甯冨紡瀵硅薄妯″瀷錛堝鏋滄湁鐨勮瘽錛夈傛湇鍔℃弿榪頒笌搴曞眰 SOAP 鍩虹緇撴瀯鐩哥粨鍚堬紝瓚充互灝佽鏈嶅姟璇鋒眰鑰呯殑搴旂敤紼嬪簭鍜屾湇鍔℃彁渚涜呯殑 Web 鏈嶅姟涔嬮棿鐨勮繖涓粏鑺傘?/p><p>鍩烘湰鏈嶅姟鎻忚堪</p><p>Web 鏈嶅姟浣撶郴緇撴瀯浣跨敤 WSDL 浣滀負鍩烘湰鏈嶅姟鎻忚堪銆俉SDL 宸茬粡琚彁浜ゅ埌 W3C 浣滀負鏍囧噯銆俉SDL 鏄竴縐?XML 鏂囨。錛屽畠灝?Web 鏈嶅姟鎻忚堪涓轟竴緇勭鐐癸紝榪欎簺绔偣浼氬鐞嗗寘鍚潰鍚戞枃妗f垨闈㈠悜榪囩▼鐨勶紙RPC錛夋秷鎭殑娑堟伅銆傛搷浣滃拰娑堟伅閮芥槸琚娊璞℃弿榪扮殑錛岀劧鍚庡畠浠細琚粦瀹氬埌涓涓叿浣撶殑緗戠粶鍗忚鍜屾秷鎭牸寮忥紝鐢ㄦ潵瀹氫箟绔偣銆傜浉鍏崇殑鍏蜂綋绔偣琚悎騫跺埌鎶借薄鐨勭鐐規垨鏈嶅姟涓俉SDL 鍙互鎵╁睍涓哄厑璁哥鐐瑰拰鍏舵秷鎭殑鎻忚堪錛屼笉綆′嬌鐢ㄥ摢縐嶆秷鎭牸寮忔垨緗戠粶鍗忚榪涜閫氳閮藉彲浠ャ傜劧鑰岋紝鐩墠緇忚繃鎻忚堪鐨勭粦瀹氬彧鑳界敤浜?SOAP 1.1銆丠TTP POST 浠ュ強澶氱敤閫斾簰鑱旂綉閭歡鎵╁睍錛圡ultipurpose Internet Mail Extensions錛孧IME錛夈?/p><p>Web 鏈嶅姟浣撶郴緇撴瀯涓 WSDL 鐨勪嬌鐢ㄦ寜鐓у父瑙勫皢鍩烘湰鐨勬湇鍔℃弿榪板垎鎴愪簡涓ら儴鍒嗭細鏈嶅姟鎺ュ彛鍜屾湇鍔″疄鐜般傝繖浣挎瘡涓儴鍒嗛兘鍙互琚垎寮鐙珛瀹氫箟錛屽茍鍙互鐢卞彟涓閮ㄥ垎閲嶆柊浣跨敤銆?br /><img src="http://www.ascenttech.cn/html/book/part/step3/xx12/image006.jpg" width="528" height="405" alt="" /><br />鏈嶅姟鎺ュ彛瀹氫箟鏄竴縐嶆娊璞℃垨鍙噸鐢ㄧ殑鏈嶅姟瀹氫箟錛屽畠鍙互琚涓湇鍔″疄鐜板畾涔夊疄渚嬪寲鍜屽紩鐢ㄣ傛垜浠彲浠ュ皢鏈嶅姟鎺ュ彛瀹氫箟鎯寵薄鎴愭帴鍙e畾涔夎璦錛圛nterface Definition Language錛孖DL錛夈丣ava 鎺ュ彛鎴?Web 鏈嶅姟綾誨瀷銆傝繖浣垮父瑙佺殑琛屼笟鏍囧噯鏈嶅姟綾誨瀷鍙互琚涓湇鍔″疄鐜拌呭畾涔夊拰瀹炵幇銆傝繖綾諱技浜庡湪緙栫▼璇█涓畾涔夋娊璞℃帴鍙g劧鍚庡緱鍒板涓叿浣撳疄鐜般傛湇鍔℃帴鍙e彲浠ョ敱琛屼笟鏍囧噯緇勭粐瀹氫箟銆?/p><p>鏈嶅姟鎺ュ彛鍖呭惈 WSDL 鍏冪礌錛屽畠浠粍鎴愪簡鏈嶅姟鎻忚堪涓殑鍙噸鐢ㄩ儴鍒嗭紝榪欎簺鍏冪礌鏈夛細WSDL: binding銆乄SDL: portType銆乄SDL: message 鍜?WSDL: type 鍏冪礌錛屽鍥?5 涓墍鎻忚堪銆俉SDL: portType 鍏冪礌涓畾涔変簡 Web 鏈嶅姟鐨勬搷浣溿傛搷浣滃畾涔変簡杈撳叆鍜岃緭鍑烘暟鎹祦涓彲浠ュ嚭鐜扮殑 XML 娑堟伅銆傛偍鍙互灝嗘搷浣滄兂璞℃垚緙栫▼璇█涓殑鏂規硶璇存槑銆俉SDL: message 鍏冪礌鎸囧畾鍝簺 XML 鏁版嵁綾誨瀷緇勬垚娑堟伅鐨勫悇涓儴鍒嗐俉SDL: message 鍏冪礌鐢ㄤ簬瀹氫箟鎿嶄綔鐨勮緭鍏ュ拰杈撳嚭鍙傛暟銆俉SDL: types 鍏冪礌涓弿榪版秷鎭腑澶嶆潅鏁版嵁綾誨瀷鐨勪嬌鐢ㄣ俉SDL: binding 鍏冪礌鎻忚堪鐗瑰畾鏈嶅姟鎺ュ彛錛圵SDL: portType錛夌殑鍗忚銆佹暟鎹牸寮忋佸畨鍏ㄦу拰鍏跺畠灞炴с?/p><p>鏈嶅姟瀹炵幇瀹氫箟鏄竴涓弿榪扮粰瀹氭湇鍔℃彁渚涜呭浣曞疄鐜扮壒瀹氭湇鍔℃帴鍙g殑 WSDL 鏂囨。銆俉eb 鏈嶅姟琚緩妯℃垚 WSDL: service 鍏冪礌銆傛湇鍔″厓绱犲寘鍚竴緇勶紙閫氬父鏄竴涓級WSDL: port 鍏冪礌銆傜鍙e皢绔偣錛堜緥濡傜綉鍧浣嶇疆鎴?URL錛変笌鏉ヨ嚜鏈嶅姟鎺ュ彛瀹氫箟鐨?WSDL: binding 鍏冪礌鍏寵仈璧鋒潵銆?/p><p>涓轟簡璇存槑鑱岃矗鐨勫畨鎺掞紝寮鏀懼簲鐢ㄧ▼搴忕粍錛圤pen Applications Group錛孫AG錛変負寮鏀懼簲鐢ㄧ▼搴忕粍闆嗘垚瑙勮寖錛圤pen Applications Group Integration Specification錛孫AGIS錛夎喘涔版爣鍑嗗畾涔変簡涓涓湇鍔℃帴鍙e畾涔夈傝繖涓湇鍔℃帴鍙e畾涔変細瀹氫箟 WSDL: type銆乄SDL: message銆乄SDL: portType 鍜?WSDL: binding銆?/p><p>鏈嶅姟鎻愪緵鑰呭彲浠ラ夋嫨寮鍙戝疄鐜?OAGIS 璐拱璁㈠崟鏈嶅姟鎺ュ彛鐨?Web 鏈嶅姟銆傛湇鍔℃彁渚涜呬細寮鍙戜竴涓湇鍔″疄鐜板畾涔夋枃妗o紝鎻忚堪 WSDL 璁懼銆佺鍙e拰鍦板潃浣嶇疆鍏冪礌錛岃繖浜涘厓绱犳弿榪版彁渚涜呯殑 Web 鏈嶅姟鐨勭綉鍧鍙婂叾瀹冪壒瀹氫簬瀹炵幇鐨勭粏鑺傘?/p><p>鏈嶅姟鎺ュ彛瀹氫箟鍜屾湇鍔″疄鐜板畾涔夌粨鍚堝湪涓璧鳳紝緇勬垚浜嗘湇鍔″畬鏁寸殑 WSDL 瀹氫箟銆傝繖涓や釜瀹氫箟鍖呭惈涓烘湇鍔¤姹傝呮弿榪板浣曡皟鐢ㄤ互鍙婁笌 Web 鏈嶅姟浜や簰鐨勮凍澶熶俊鎭傛湇鍔¤姹傝呭彲浠ヨ姹傝幏寰楀叾瀹冨叧浜庢湇鍔℃彁渚涜呯鍙g殑淇℃伅銆傛淇℃伅鐢辨湇鍔″畬鏁寸殑 Web 鏈嶅姟鎻忚堪鎻愪緵銆?/p><p> </p><p>瀹屾暣鐨?Web 鏈嶅姟鎻忚堪</p><p>瀹屾暣鐨?Web 鏈嶅姟鎻忚堪寤虹珛鍦ㄦ湇鍔″熀鏈殑 WSDL 瀹氫箟涔嬩笂銆傚畬鏁寸殑 Web 鏈嶅姟鎻忚堪鍙互瑙e喅榪欐牱鐨勯棶棰橈細浠涔堜紒涓氬湪鎵樼榪欎釜鏈嶅姟錛熷畠鏄綍縐嶇被鍨嬬殑浼佷笟錛熶笌鏈嶅姟鐩稿叧鑱旂殑浜у搧鏈夊摢浜涳紵鍚勭鍏徃鍜屼駭鍝佺被鍒腑涓庤浼佷笟鎴栧叾 Web 鏈嶅姟鐩稿叧鑱旂殑鍒嗙被鏈夊摢浜涳紵鏈夋病鏈夋湇鍔$殑鍏跺畠鏂歸潰錛堝鏈嶅姟璐ㄩ噺錛変細褰卞搷鍒拌姹傝呮槸鍚﹂夋嫨璋冪敤鏈嶅姟錛熶負浜嗕嬌鏌ユ壘璇ユ湇鍔℃洿瀹規槗錛屽彲浠ユ彁渚涘摢浜涘叧閿瓧錛?/p><p>鍥?6 涓弿榪頒簡涓涓畬鏁寸殑 Web 鏈嶅姟鎻忚堪銆?/p><p>鍥?6. 瀹屾暣鐨?Web 鏈嶅姟鎻忚堪鍗忚鏍?br /><img src="http://www.ascenttech.cn/html/book/part/step3/xx12/image007.gif" width="594" height="303" alt="" /><br />UDDI 鎻愪緵浜嗕竴涓繚瀛?Web 鏈嶅姟鎻忚堪鐨勬満鍒躲傝櫧鐒?UDDI 閫氬父浼氳璁や負鏄竴縐嶇洰褰曟満鍒訛紝浣嗘槸瀹冧篃瀹氫箟浜嗕竴涓敤 XML 琛ㄧず鏈嶅姟鎻忚堪淇℃伅鐨勬暟鎹粨鏋勬爣鍑嗐俇DDI 鏉$洰涓湁鍥涚鍩烘湰鏁版嵁緇撴瀯錛屽鍥?7 涓墍紺恒?/p><p>鍥?7. 鍩烘湰 UDDI 鏁版嵁緇撴瀯<br /><img src="http://www.ascenttech.cn/html/book/part/step3/xx12/image009.jpg" width="564" height="363" alt="" /><br />UDDI 鏉$洰鐢?businessEntity 寮濮嬨俠usinessEntity 鍏冪礌瀵瑰叧浜庝紒涓氱殑淇℃伅榪涜寤烘ā錛屽寘鎷熀鏈殑浼佷笟淇℃伅錛堜緥濡備紒涓氬悕縐板拰鑱旂郴鏂瑰紡淇℃伅鏄粈涔堬紵錛夈佸垎綾諱俊鎭紙渚嬪榪欐槸浣曠綾誨瀷鐨勪紒涓氾紵錛変互鍙婃爣璇嗕俊鎭紙鍗?Dunn and Bradstreet 緙栧彿鏄粈涔堬紵錛夈俠usinessEntity 鍖呭惈涓緇?businessService 鍏冪礌錛屾瘡涓厓绱犲搴斾簬浼佷笟甯屾湜鍙戝竷鐨勬瘡涓?Web 鏈嶅姟銆傛瘡涓?businessService 鍏冪礌閮藉寘鍚拰 businessEntity 鍏冪礌鐨?Web 鏈嶅姟鏈夊叧鐨勬妧鏈у拰鎻忚堪鎬т俊鎭俠usinessService 鍖呭惈涓緇?bindingTemplate 鍏冪礌銆俠indingTemplate 鎻忚堪璁塊棶淇℃伅錛堜緥濡傜鐐瑰湴鍧錛夛紝榪樻弿榪?businessService 濡備綍浣跨敤鍚勭涓嶅悓鐨勬妧鏈鑼冦傛妧鏈鑼冨湪榪欓噷鐨勬ā鍨嬫槸 tModel銆倀Model 鍙互涓哄緢澶氫笉鍚屾蹇靛緩妯★紝濡傦細涓縐嶆湇鍔°佷竴涓濡?HTTPS 涔嬬被鐨勫鉤鍙版妧鏈垨涓涓被鍒備笌 businessService 鐩稿叧鑱旂殑閭d竴緇?bindingTemplate 鍏冪礌浠h〃浜?businessService 鎵浣跨敤鐨勬妧鏈殑鍗拌銆?/p><p>鍦╓eb 鏈嶅姟浣撶郴緇撴瀯涓紝瀹屾暣鐨?Web 鏈嶅姟鎻忚堪鍖呮嫭鐢ㄤ簬绔偣鎻忚堪鐨勪竴灞傦紝榪欎釜绔偣鎻忚堪浣跨敤 UDDI 鏉$洰鍚戞湇鍔℃弿榪版坊鍔犱紒涓氬拰瀹炵幇鐜銆?/p><p>绔偣鎻忚堪閬靛驚緇撳悎 WSDL 浣跨敤 UDDI 鐨勭害瀹氥傜鐐規弿榪頒嬌鐢?UDDI 鎻愪緵浼佷笟淇℃伅鍜岀被鍒殑鏍囧噯琛ㄧず銆傝繖涓?UDDI-WSDL 綰﹀畾瑙勫畾浜嗗浣曚粠鍜?Web 鏈嶅姟鐩稿叧鑱旂殑 UDDI 鏉$洰涓緱鍑烘湇鍔℃帴鍙e畾涔夊拰鏈嶅姟瀹炵幇瀹氫箟鐨?WSDL 鎻忚堪銆傝繖涓害瀹氬浜庡湪Web 鏈嶅姟浣撶郴緇撴瀯涓嬌鐢?UDDI 浣滀負鍩轟簬 WSDL 鐨勬湇鍔$殑鏈嶅姟娉ㄥ唽涓績鏉ヨ鑷沖叧閲嶈銆?/p><p>绔偣鎻忚堪鍚戝簲鐢ㄥ埌鏈嶅姟鐨勭壒瀹氬疄鐜扮殑鏈嶅姟鎻忚堪娣誨姞浜嗗彟澶栫殑璇箟銆傚畨鍏ㄥ睘鎬у彲浠ュ畾涔夊 Web 鏈嶅姟鐨勮闂繘琛屾帶鍒剁殑絳栫暐銆傛湇鍔¤川閲忓睘鎬ф寚瀹氶潰鍚戞ц兘鐨勮兘鍔涳紝渚嬪鏈嶅姟鍦ㄤ竴瀹氭椂闂村唴浣滃嚭鍝嶅簲鐨勮兘鍔涳紝鎴栨墍鏀寔鐨勫彲闈犳秷鎭紶閫掔殑綰у埆銆傛湇鍔″紑閿灞炴ф弿榪版湇鍔$殑璧勬簮闇姹傘傝繕鍙互瀹氫箟鏀寔鍝簺瀵硅瘽璇箟銆?/p><p>鏈嶅姟鎻忚堪鍗忚鏍堜腑鐨勬渶鍚庝竴灞傛槸鍗忚鎻忚堪銆傚崗璁弿榪板弽鏄犱袱涓紒涓氫紮浼翠箣闂翠負浜嗗畬鎴愪竴涓姝ヤ紒涓氫氦浜掕岃繘琛岀殑 Web 鏈嶅姟璋冪敤鐨勪竴涓畝鍗曠殑緙栨帓銆備緥濡傦紝“鍗忚瀹氫箟”瀹氫箟浜嗚喘涔板崗璁腑璇稿璐拱鑰呭拰鍑哄敭鑰呬箣綾葷殑瑙掕壊銆傚崗璁畾涔夎瀹氫簡姣忎釜瑙掕壊蹇呴』杈懼埌鐨勮姹傘備緥濡傦紝鍑哄敭鑰呭繀欏繪湁鎺ュ彈鎶ヤ環璇鋒眰錛坮equest for quote錛孯FQ錛夋秷鎭佽喘涔拌鍗曪紙purchase order錛孭O錛夋秷鎭拰浠樻娑堟伅鐨?Web 鏈嶅姟銆傝喘涔拌呯殑瑙掕壊蹇呴』鏈夋帴鍙楁姤浠鳳紙RFQ 鍝嶅簲淇℃伅錛夈佸彂紲ㄦ秷鎭拰甯愭埛鎽樿淇℃伅鐨?Web 鏈嶅姟銆傝繖涓畝鍗曠殑 Web 鏈嶅姟鍒頒紒涓氳鑹茬殑緙栨帓瀵逛簬鍦ㄤ紒涓氫紮浼翠箣闂村緩绔嬪姝ョ殑銆侀潰鍚戞湇鍔$殑浜や簰鏉ヨ鑷沖叧閲嶈銆傚湪寰堝涓嶅悓鐨勪紒涓氬崗璁爣鍑嗕笅錛屼竴涓粰瀹氱殑鏈嶅姟璇鋒眰鑰呮垨鏈嶅姟鎻愪緵鑰呬篃璁歌兘澶熸壆婕旇喘涔拌呮垨鍑哄敭鑰呯殑瑙掕壊銆傞氳繃鏄懼紡鍦板緩绔嬩紒涓氬崗璁拰姣忎釜鑺傜偣鍦ㄤ紒涓氬崗璁腑鎵紨鍚勭瑙掕壊鐨勮兘鍔涳紝璇鋒眰鑰呭彲浠ラ夋嫨鍦ㄩ潰瀵瑰悇縐嶆彁渚涜呬紒涓氫紮浼存椂鍔犲叆鍝浼佷笟鍗忚銆?/p><p>榪欎釜棰嗗煙鍏呮弧浜嗗垱鏂般傚浜庝紒涓氬崗璁畾涔夋潵璇達紝鐩墠榪樻病鏈変竴涓崟鐙殑鏍囧噯銆俥bXML 鍗忎綔-鍗忚姒傝鍜屽崗瀹氳鑼冿紙ebXML Collaboration-Protocol Profile and Agreement Specification錛夋弿榪頒簡榪欎簺姒傚康錛屼絾涓嶆槸鏍規嵁浣滀負璇ヤ綋緋葷粨鏋勭殑涓閮ㄥ垎鎻忚堪鐨?Web 鏈嶅姟鎶鏈屾弿榪扮殑銆俉eb 鏈嶅姟嫻佺▼鎻忚堪鍜?Web 鏈嶅姟绔偣鎻忚堪榪欎袱灞傛澶勪簬寮鍙戜腑錛屽畠浠彲浠ユ彁渚涜繖涓駭鍒殑鏈嶅姟鎻忚堪銆?/p><p> </p><p>鏈嶅姟鎻忚堪鐨勫彂甯冨拰鍙戠幇</p><p>鏈嶅姟鍙戝竷</p><p>Web 鏈嶅姟鐨勫彂甯冨寘鎷湇鍔℃弿榪扮殑鐢熸垚鍜屼箣鍚庣殑鍙戝竷銆傚彂甯冨彲浠ヤ嬌鐢ㄥ悇縐嶄笉鍚屾満鍒躲?/p><p>鐢熸垚鏈嶅姟鎻忚堪 <br />鎴戜滑鍙互鐢熸垚銆佹墜宸ョ紪鐮佹湇鍔℃弿榪幫紝涔熷彲浠ユ牴鎹凡鏈夌殑鏈嶅姟鎺ュ彛瀹氫箟緇勬垚鏈嶅姟鎻忚堪銆傚紑鍙戣呭彲浠ユ墜宸ョ紪鐮佹暣涓湇鍔℃弿榪幫紝鍖呮嫭 UDDI 鏉$洰銆傛湁浜涘伐鍏峰彲浠ヤ粠緙栫▼妯″瀷鍜屽彲鎵ц Web 鏈嶅姟鐨勯儴緗茬敓鎴?WSDL錛岃繕鏈夊彲鑳界敓鎴愭潵鑷厓鏁版嵁鏋勪歡鐨勯儴鍒?UDDI 鏉$洰銆傞儴鍒嗘湇鍔℃弿榪板彲鑳藉凡緇忓瓨鍦紙渚嬪錛學eb 鏈嶅姟鍙互鍩轟簬涓涓涓氭爣鍑嗘湇鍔℃帴鍙e畾涔夛級錛岃繖鏍峰氨鍙』榪涗竴姝ョ敓鎴愪竴灝忛儴鍒嗗氨鍙互浜嗐?/p><p>鍙戝竷鏈嶅姟鎻忚堪 <br />鏈嶅姟鎻忚堪鍙互浣跨敤鍚勭涓嶅悓鏈哄埗鏉ュ彂甯冦傛牴鎹簲鐢ㄧ▼搴忓皢浣跨敤鏈嶅姟鐨勫姩鎬佺▼搴︼紝榪欎簺涓嶅悓鐨勬満鍒舵彁渚涗笉鍚岀殑鑳藉姏銆傛湇鍔℃弿榪板彲浠ヤ嬌鐢ㄥ縐嶄笉鍚屾満鍒跺彂甯冨埌澶氫釜鏈嶅姟娉ㄥ唽涓績銆?/p><p>鏈綆鍗曠殑鎯呭喌鏄洿鎺ュ彂甯冦傜洿鎺ュ彂甯冩剰鍛崇潃鏈嶅姟鎻愪緵鑰呯洿鎺ュ皢鏈嶅姟鍙戝竷緇欐湇鍔¤姹傝呫傝繖鍙互閫氳繃浣跨敤鐢靛瓙閭歡闄勪歡銆丗TP 绔欑偣鐢氳嚦鍏夌洏鍒嗗彂鏉ュ疄鐜般傜洿鎺ュ彂甯冨彲浠ュ湪浼佷笟浼欎即鍙屾柟灝卞湪 Web 涓婁嬌鐢ㄧ數瀛愬晢鍔$殑鏉℃杈炬垚涓鑷村悗榪涜錛屾垨鍦ㄨ姹傝闂湇鍔$殑鏈嶅姟璇鋒眰鑰呮敮浠樹簡璐圭敤涔嬪悗榪涜銆傚湪榪欑鎯呭喌涓嬶紝鏈嶅姟璇鋒眰鑰呭彲浠ヤ繚鐣欐湇鍔℃弿榪扮殑涓浠芥湰鍦板壇鏈?/p><p>紼嶅井鏇村姩鎬佷竴鐐圭殑鍙戝竷浣跨敤 DISCO 鎴?ADS銆侱ISCO 鍜?ADS 涓よ呴兘瀹氫箟浜嗕竴涓粠緇欏畾 URL 鑾峰彇 Web 鏈嶅姟鎻忚堪鐨勭畝鍗曠殑 HTTP GET 鏈哄埗銆傚寮虹殑鏈嶅姟鎻忚堪璧勬簮搴撲細鎻愪緵鏈嶅姟鎻忚堪鐨勪竴涓湰鍦伴珮閫熺紦瀛橈紝涓嶈繃榪樻彁渚涗簡闄勫姞鐨勬悳绱㈣兘鍔涖傚浜庡湪浼佷笟鍐呴儴璺ㄨ秺涓繪満鐨勬湇鍔℃弿榪拌祫婧愬簱鏉ヨ錛屾湇鍔℃彁渚涜呬細鍚戜笓鐢ㄧ殑 UDDI 鑺傜偣鍙戝竷銆傛垜浠彲浠ユ牴鎹彂甯冨埌鑺傜偣鐨?Web 鏈嶅姟鐨勫煙鐨勮寖鍥達紝浣跨敤鍑犵涓撶敤鐨?UDDI 鑺傜偣銆?/p><p>鍐呴儴浼佷笟搴旂敤紼嬪簭 UDDI 鑺傜偣錛圛nternal Enterprise Application UDDI node錛夎妭鐐癸細鍏徃鍐呴儴涓轟簡榪涜鍐呴儴浼佷笟搴旂敤紼嬪簭闆嗘垚鑰屼嬌鐢ㄧ殑 Web 鏈嶅姟搴旇琚彂甯冨埌榪欎竴綾?UDDI 鑺傜偣銆傛綾?UDDI 鑺傜偣鐨勮寖鍥村彲浠ユ槸閮ㄩ棬鐨勬垨鍏徃鐨勫崟鐙殑搴旂敤紼嬪簭銆傝繖浜?UDDI 浣嶄簬闃茬伀澧欎箣鍚庯紝鍏佽鏈嶅姟鍙戝竷鑰呭浠栦滑鐨勬湇鍔℃敞鍐屼腑蹇冨拰瀹冪殑璁塊棶鏉冦佸彲鐢ㄦт互鍙婂彂甯冭姹傛湁鏇村鐨勬帶鍒躲?nbsp;<br />闂ㄦ埛緗戠珯 UDDI 鑺傜偣錛圥ortal UDDI node錛夎妭鐐癸細鐢卞叕鍙稿彂甯冧互渚涘閮ㄤ紮浼存煡鎵懼拰浣跨敤鐨?Web 鏈嶅姟鍙互浣跨敤闂ㄦ埛緗戠珯 UDDI 鑺傜偣銆傞棬鎴風綉绔欒妭鐐硅繍琛屽湪鏈嶅姟鎻愪緵鑰呯殑闃茬伀澧欎箣澶栨垨涔嬮棿銆傝繖縐嶄笓鐢?UDDI 鑺傜偣鍙寘鍚叕鍙稿笇鏈涘悜鏉ヨ嚜澶栭儴浼欎即鐨勮姹傝呮彁渚涚殑閭d簺鏈嶅姟鎻忚堪銆傝繖鍏佽鍏徃淇濈暀瀵逛粬浠湇鍔℃弿榪扮殑鎺у埗銆乁DDI 鑺傜偣鐨勮闂互鍙?UDDI 鑺傜偣鐨勬湇鍔¤川閲忋傛澶栵紝閫氳繃浣跨敤闂ㄦ埛緗戠珯涓浐鏈夌殑鍩轟簬瑙掕壊鐨勫彲瑙佹э紝浼佷笟灝嗘湇鍔℃弿榪扮殑鍙鎬у眬闄愬湪鍏佽鐪嬪埌瀹冧滑瀛樺湪鐨勪紮浼翠腑銆?nbsp;<br />浼欎即鐩綍 UDDI 鑺傜偣錛圥artner Catalog UDDI node錛夎妭鐐癸細鐢辯壒瀹氬叕鍙鎬嬌鐢ㄧ殑 Web 鏈嶅姟鍙互琚彂甯冨埌浼欎即鐩綍 UDDI 鑺傜偣銆備紮浼寸洰褰?UDDI 鑺傜偣浣嶄簬闃茬伀澧欎箣鍚庛傛綾諱笓鐢?UDDI 鑺傜偣鍙寘鍚潵鑷悎娉曚紒涓氫紮浼寸殑緇忚繃鍏佽鐨勩佹祴璇曡繃鐨勩佹湁鏁堢殑 Web 鏈嶅姟銆傛綾?Web 鏈嶅姟鐨勪笟鍔$幆澧冨拰鍏冩暟鎹彲浠ヨ瀹氫綅鍒扮壒瀹氱殑璇鋒眰鑰呫?nbsp;<br />鐢靛瓙甯傚満 UDDI 鑺傜偣錛圗-Marketplace UDDI node錛夎妭鐐癸細瀵逛簬鏈嶅姟鎻愪緵鑰呮墦綆楃敤鏉ヤ笌鍏跺畠 Web 鏈嶅姟绔炰簤璇鋒眰鑰呯殑涓氬姟鐨?Web 鏈嶅姟鏉ヨ錛屾湇鍔℃弿榪板簲璇ヨ鍙戝竷鍒扮數瀛愬競鍦?UDDI 鑺傜偣鎴?UDDI 榪愯惀鍟嗚妭鐐廣傜數瀛愬競鍦?UDDI 鑺傜偣鐢變竴涓涓氭爣鍑嗙粍緇囨垨紺懼洟鎵樼錛屽寘鍚壒瀹氳涓氫腑鐨勪紒涓氱殑鏈嶅姟鎻忚堪銆傛垜浠彲浠ヨ姹傝繖浜涙湇鍔℃敮鎸佺壒瀹氱殑鏍囧噯銆佸彲鎼滅儲鍏冩暟鎹佹帴鍙f垨鏁版嵁綾誨瀷銆傜數瀛愬競鍦?UDDI 鑺傜偣涓鑸細榪囨護鎺夋煇浜涢潪娉曠殑鏉$洰錛屽茍鎻愪緵鏈変繚璇佺殑鏈嶅姟璐ㄩ噺銆?nbsp;<br />UDDI 榪愯惀鍟嗚妭鐐癸細濡傛灉鎮ㄥ笇鏈?Web 鏈嶅姟鍙互琚綔鍦ㄧ殑鏂扮殑浼佷笟浼欎即鎴栨湇鍔$敤鎴峰彂鐜幫紝榪樺彲浠ュ皢鍏跺彂甯冨埌 UDDI 榪愯惀鍟嗚妭鐐廣侷BM銆丮icrosoft 鍜?Ariba 閮芥敮鎸併佸鍒跺拰鎵樼 UDDI 榪愯惀鍟嗚妭鐐廣傚湪鍙戝竷 UDDI 榪愯惀鍟嗚妭鐐圭殑鏃朵警錛屽鏋滆璁╂綔鍦ㄧ殑鏈嶅姟璇鋒眰鑰呭彂鐜版湇鍔$殑璇濓紝瀹屾暣鐨勪笟鍔$幆澧冨拰緇忚繃娣辨濈啛铏戠殑鍒嗙被娉曟槸寰堝繀瑕佺殑銆?br /></p><p>鍥?8. 鏈嶅姟鍙戠幇榪炵畫浣?br /><img src="http://www.ascenttech.cn/html/book/part/step3/xx12/image010.gif" width="575" height="392" alt="" /><br />鍥?8 灞曠ず浜嗕粠鍙戝竷鍜屽彂鐜頒腑鏈闈欐併佹渶綆鍗曠殑鎶鏈埌鏈鍔ㄦ併佹洿澶嶆潅鐨勬妧鏈殑榪炵畫浣撱俉eb 鏈嶅姟鐨勭敤鎴鋒垨瀹炵幇鑰呬笉蹇呬弗鏍奸伒寰繖涓彂灞曢『搴忋?/p><p>鏈嶅姟鍙戠幇</p><p>Web 鏈嶅姟鐨勫彂鐜板寘鎷幏鍙栨湇鍔℃弿榪板拰浣跨敤鎻忚堪銆傝幏鍙栬繃紼嬪彲浠ヤ嬌鐢ㄥ悇縐嶄笉鍚屾満鍒躲?/p><p>鑾峰彇鏈嶅姟鎻忚堪</p><p>鍜屽彂甯?Web 鏈嶅姟鎻忚堪涓鏍鳳紝鏍規嵁鏈嶅姟鎻忚堪濡備綍琚彂甯冧互鍙?Web 鏈嶅姟搴旂敤紼嬪簭鍙兘杈懼埌鐨勫姩鎬佺▼搴︼紝鑾峰彇 Web 鏈嶅姟鎻忚堪涔熶細鏈夋墍涓嶅悓銆傛湇鍔¤姹傝呭皢鍦ㄥ簲鐢ㄧ▼搴忕敓鍛藉懆鏈熺殑涓や釜涓嶅悓闃舵錛屽嵆璁捐鏃跺拰榪愯鏃舵煡鎵?Web 鏈嶅姟銆傚湪璁捐鏃訛紝鏈嶅姟璇鋒眰鑰呮寜鐓т粬浠敮鎸佺殑鎺ュ彛綾誨瀷鎼滅儲 Web 鏈嶅姟鎻忚堪銆傚湪榪愯鏃訛紝鏈嶅姟璇鋒眰鑰呮牴鎹粬浠氳鐨勬柟寮忔垨鍏憡鐨勬湇鍔¤川閲忔悳绱?Web 鏈嶅姟銆?/p><p>浣跨敤鐩存帴鍙戝竷鏂規硶鏃訛紝鏈嶅姟璇鋒眰鑰呭湪璁捐鏃跺鏈嶅姟鎻忚堪榪涜楂橀熺紦瀛橈紝浠ュ湪榪愯鏃朵嬌鐢ㄥ畠銆傛湇鍔℃弿榪板彲浠ヨ闈欐佸湴鐢ㄧ▼搴忛昏緫琛ㄧず錛屽茍瀛樺偍鍦ㄦ枃浠舵垨綆鍗曠殑鏈湴鏈嶅姟鎻忚堪璧勬簮搴撲腑銆?/p><p>鏈嶅姟璇鋒眰鑰呭彲浠ュ湪璁捐鏃舵垨榪愯鏃跺湪鏈嶅姟鎻忚堪璧勬簮搴擄紙綆鍗曠殑鏈嶅姟娉ㄥ唽涓績鎴?UDDI 鑺傜偣錛変腑媯绱竴鏉℃湇鍔℃弿榪般傛煡鎵炬満鍒墮渶瑕佹敮鎸佷竴縐嶆煡璇㈡満鍒訛紝瀹冩彁渚涙寜鎺ュ彛綾誨瀷錛堝熀浜?WSDL 妯℃澘錛夈佺粦瀹氫俊鎭紙鍗沖崗璁級銆佸睘鎬э紙濡?QoS 鍙傛暟錛夈佹墍闇鐨勪腑浠嬬被鍨嬨佹湇鍔″垎綾繪硶銆佷紒涓氫俊鎭瓑絳夌殑鏌ユ壘銆?/p><p>涓嶅悓綾誨瀷鐨?UDDI 鑺傜偣浼氭樉紺哄彲浠ラ夋嫨鐨勮繍琛屾椂緇戝畾 Web 鏈嶅姟鐨勬暟鐩佸閫変竴鐨勭瓥鐣ワ紝鎴栬呰皟鐢ㄦ湇鍔′箣鍓嶅繀欏葷敱璇鋒眰鑰呬綔鍑洪閫夌殑閲忋?/p><p>鍐呴儴浼佷笟搴旂敤紼嬪簭 UDDI 鑺傜偣鍜屼紮浼寸洰褰?UDDI 鑺傜偣灝嗕笉闇瑕侀閫夋潵寤虹珛瀵規湇鍔$殑淇′換銆傛湇鍔¢夋嫨鍙互寤虹珛鍦ㄧ粦瀹氭敮鎸併佸巻鍙叉ц兘銆佹湇鍔¤川閲忓垎綾匯佺浉浼兼ф垨璐熻澆騫寵 鐨勫熀紜涔嬩笂銆?/p><p>鐢靛瓙甯傚満 UDDI 鑺傜偣灝嗘湁鏇村鐨勮繍琛屾椂鏈嶅姟鍙互閫夋嫨銆傚繀欏繪墽琛屾煇縐嶉閫変互淇濊瘉 Web 鏈嶅姟鎻愪緵鑰呮槸鏈変環鍊肩殑浼欎即銆傛垜浠彲浠ユ牴鎹環鏍兼壙璇恒佸紑閿銆佺粡榪囧厑璁哥殑浼欎即鍒楄〃鐨勫嚭甯儏鍐碉紝鍚屾牱榪樻湁緇戝畾鏀寔銆佸巻鍙叉ц兘銆佹湇鍔¤川閲忓垎綾誨拰鐩鎬技鎬ф潵閫夋嫨鏈嶅姟銆?/p><p>濡傛灉鏈嶅姟璇鋒眰鑰呬粠 UDDI 榪愯惀鍟嗚妭鐐規煡璇?Web 鏈嶅姟鎻愪緵鑰咃紝浠栦滑鍦ㄩ閫夊彲鑳界殑鏈嶅姟鎻愪緵鑰呮椂灝卞繀欏誨敖鍙兘璋ㄦ厧鍜岃鐪熴傚簲璇ユ湁涓涓湁鏁堝拰鍑嗙‘鐨勬満鍒跺氨浣嶏紝榪囨護鎺夋棤鐢ㄧ殑鏈嶅姟鎻忚堪鍜屾病鏈変環鍊肩殑鏈嶅姟鎻愪緵鑰呫?/p><p>浣跨敤鏈嶅姟鎻忚堪 <br />鍦ㄨ幏鍙栦簡鏈嶅姟鎻忚堪涔嬪悗錛屾湇鍔¤姹傝呴渶瑕佸鐞嗗畠浠ヨ皟鐢ㄦ湇鍔°傛湇鍔¤姹傝呬嬌鐢ㄦ湇鍔℃弿榪扮敓鎴愬 Web 鏈嶅姟鐨?SOAP 璇鋒眰鎴栫壒瀹氫簬緙栫▼璇█鐨勪唬鐞嗐傝鐢熸垚鍙互鍦ㄨ璁℃椂鎴栬繍琛屾椂榪涜錛屼粠鑰屽 Web 鏈嶅姟鐨勮皟鐢ㄨ繘琛屾牸寮忓寲銆傛垜浠湪璁捐鏃跺拰榪愯鏃跺彲浠ヤ嬌鐢ㄥ悇縐嶅伐鍏蜂粠 WSDL 鏂囨。鐢熸垚緙栫▼璇█緇戝畾銆傝繖浜涚粦瀹氳〃紺哄簲鐢ㄧ▼搴忕殑 API錛屽茍灝佽浜嗘潵鑷簲鐢ㄧ▼搴忕殑 XML 娑堟伅浼犻掔殑緇嗚妭銆?/p><p>鍦ㄤ笅涓閮ㄥ垎錛屾垜浠皢鎻忚堪鍩烘湰 Web 鏈嶅姟浣撶郴緇撴瀯鐨勬墿灞曪紝鐢靛瓙鍟嗗姟闇瑕佽繖浜涙墿灞曟墠鑳戒嬌鐢?Web 鏈嶅姟銆?/p><p> </p><p>鍦ㄤ笅涓閮ㄥ垎錛屾垜浠皢鎻忚堪鍩烘湰 Web 鏈嶅姟浣撶郴緇撴瀯鐨勬墿灞曪紝鐢靛瓙鍟嗗姟闇瑕佽繖浜涙墿灞曟墠鑳戒嬌鐢?Web 鏈嶅姟銆?/p><p> </p><p>14.3.2 鐪熸鐨勭數瀛愬晢鍔$殑 Web 鏈嶅姟</p><p>铏界劧瀵逛簬鍙簰鎿嶄綔鐨?XML 娑堟伅浼犻掓潵璇?SOAP 鍜?HTTP 灝辮凍澶熶簡錛岃屼笖 WSDL 涔熻凍鍙互浼犺揪鏈嶅姟璇鋒眰鑰呭拰鏈嶅姟鎻愪緵鑰呬箣闂撮渶瑕佷粈涔堟牱鐨勬秷鎭紝浣嗘槸瑕佽鐩栫數瀛愬晢鍔$殑鍏ㄩ儴闇姹傝繕闇瑕佹洿澶氱殑鎶鏈備負浜嗗畬鍏ㄦ敮鎸佺數瀛愬晢鍔★紝瀹夊叏鎬с佸彲闈犵殑娑堟伅浼犻掋佹湇鍔¤川閲忋乄eb 鏈嶅姟鍗忚鏍堢殑姣忎竴灞傜殑綆$悊閮介渶瑕佹墿灞曘?/p><p> </p><p>瀹夊叏鎬?/p><p>鐪熺殑闇瑕?Web 鏈嶅姟瀹夊叏灞傚悧錛熷浜庡熀浜庢秷鎭殑浣撶郴緇撴瀯錛屼笟鐣屽凡緇忔湁涓濂楃幇鎴愮殑鑰屼笖騫挎硾鎺ュ彈鐨勪紶杈撳眰瀹夊叏鏈哄埗錛屾瘮濡傦紝瀹夊叏濂楁帴瀛楀眰錛圫ecure Sockets Layer錛孲SL錛夊拰緗戦檯鍗忚瀹夊叏錛圛nternet Protocol Security錛孖PSec錛夛紝涓轟粈涔堣繕瑕佸啀鍔犲埆鐨勫憿錛熶負浜嗗洖絳旇繖涓棶棰橈紝鎴戜滑涓嶄粎瑕佺爺絀惰姹傦紝榪樺皢鎺㈣涓浜涘彧渚濋潬鐜版湁鐨勫嚑綾諱紶杈撳眰瀹夊叏鏈哄埗騫朵笉鑳藉湪 Web 鏈嶅姟妯″瀷鍐呮彁渚涜凍澶熺殑瀹夊叏鎬х殑鎯呭喌銆?/p><p>閫氬父錛學eb 鏈嶅姟瀹夊叏灞傚繀欏繪彁渚涗互涓嬪洓涓熀鏈殑瀹夊叏鎬ц姹傦細</p><p>鏈哄瘑鎬э紙Confidentiality錛夋槸鎸囦俊鎭娌℃湁緇忚繃鎺堟潈鐨勪釜浜恒佸疄浣撴垨榪涚▼鐨勪笉鍙敤鎬ф垨涓嶅叕寮鎬э紝騫朵繚璇佹秷鎭唴瀹逛笉瀵規病鏈夌粡榪囨巿鏉冪殑涓漢鍏紑銆?nbsp;<br />鎺堟潈錛圓uthorization錛夋槸鎸囨潈闄愮殑鎺堜簣錛屽寘鎷牴鎹闂潈闄愭巿浜堣闂潈鍜屼繚璇佸彂閫佹柟琚巿鏉冨彂閫佹秷鎭?nbsp;<br />鏁版嵁瀹屾暣鎬э紙Data integrity錛夋槸鎸囨暟鎹病鏈変互鏈粡鎺堟潈鐨勬柟寮忔垨琚湭緇忔巿鏉冪殑鐢ㄦ埛涓嶅彲瀵熻鐨勬敼鍙樻垨鑰呯牬鍧忕殑鎬ц川錛屼粠鑰岀‘淇濇秷鎭湪浼犻佺殑榪囩▼涓笉浼氳鍋剁劧鎴栨晠鎰忎慨鏀廣?nbsp;<br />鍘熷鎬ц瘉鏄庯紙Proof of origin錛夋槸瀵規秷鎭垨鏁版嵁鐨勫彂閫佽呰繘琛屾爣璇嗙殑璇佹嵁銆傛柇璦娑堟伅鐢辨紜爣璇嗙殑鍙戦佽呬紶閫侊紝騫朵笖涓嶄細閲嶆柊鍙戦佷互鍓嶄紶閫佽繃鐨勬秷鎭傝繖涓瑕佹眰闅愬惈浜嗘暟鎹畬鏁存х殑瑕佹眰銆?nbsp;<br />鐢變簬闇瑕佸湪鍩轟簬 XML 娑堟伅鍜屽伐浣滄祦鐨勫姩鎬?Web 鏈嶅姟涓栫晫涓鐞嗕笉鍚岄鏍肩殑璧勬簮璁塊棶錛屾墍浠ュ繀欏婚噸鏂拌瘎浼扮瓥鐣ャ佷俊浠誨拰椋庨櫓璇勪及榪欎笁鑰呯浉浜掍箣闂寸殑鍏崇郴銆傜幇鏈夌殑鍩轟簬涓漢韜喚鐨勮闂帶鍒舵ā鍨嬫鍦ㄥ彂灞曟垚涓哄熀浜庤鑹茬殑淇′換鍩熷叧緋伙紝鍦ㄨ縐嶅叧緋諱腑錛屽彲淇′換鐨勬潈濞佹満鏋勫皢鎵ц鏌愰」浠誨姟鐨勬潈闄愭巿浜堜釜浜猴紝鍏惰涓哄彈璇ユ潈闄愰檺鍒躲俉eb 鏈嶅姟浣撶郴緇撴瀯瀹氫箟浜嗛渶瑕佷俊鎭殑浠g悊錛堟湇鍔¤姹傝咃級銆佹彁渚涗俊鎭殑浠g悊錛堟湇鍔℃彁渚涜咃級錛屾湁鏃惰繕鏈夋彁渚涘叧浜庝俊鎭殑淇℃伅鐨勪唬鐞嗭紙鏈嶅姟涓粙鑰呫佸厓淇℃伅鎻愪緵鑰呮垨鏈嶅姟娉ㄥ唽涓績錛夈傛湇鍔′腑浠嬭呯粡甯鎬細鏀跺埌澶ч噺淇℃伅璇鋒眰錛岃繖鏍峰氨闇瑕佸畠鑳藉鍐沖畾璋佹兂瑕佸摢浜涗俊鎭互鍙婅姹傝呮槸涓嶆槸宸茬粡琚巿浜堣闂潈銆傚熀紜璁炬柦鍜屽叧緋誨彉鍖栬繀閫燂紝鍥犳鏈夊叧鐨勭瓥鐣ラ渶瑕佽兘鐏墊椿鐨勫厑璁告垨鎷掔粷璁塊棶銆?/p><p>姝ゅ錛屽敖綆?XML 鍙戣獡瑕佷負榪欐牱鐨勬湇鍔℃彁渚涢氱敤鎺ュ彛錛屼絾 XML 涓嶄細鎻愪緵瀹炵幇榪欎竴姊︽兂鎵闇瑕佺殑鏁翠釜鍩虹璁炬柦銆傝屼笖錛孹ML 鍙兘涓嶉傚悎鏋勫緩鏁翠釜 Web 鏈嶅姟瀹夊叏灞傘傜洰鏍囨槸瑕佺‘瀹氬湪鍝簺鍦哄悎鐢?XML 鏍煎紡鎻愪緵淇℃伅浠ラ【鍙婇氱敤鏁版嵁浜ゆ崲杈冧負閲嶈錛屼互鍙婂湪鍝簺鍦哄悎鍒╃敤鐩墠宸插瓨鍦ㄤ簬騫沖彴涔嬩笂鐨勭幇鏈夊畨鍏ㄦф満鍒惰緝涓洪噸瑕併?/p><p>SOAP 淇″皝鏄敤 XML 瀹氫箟鐨勶紝浠庤屼嬌鎮ㄥ彲浠ュ悜娑堟伅娣誨姞縐嶇被浼楀鐨勫厓淇℃伅錛屾瘮濡備簨鍔?ID銆佹秷鎭礬鐢變俊鎭拰娑堟伅瀹夊叏鎬с係OAP 淇″皝鐢變袱涓儴鍒嗙粍鎴愶細澶村拰涓諱綋銆傚ご鏄妸鍔熻兘娣誨姞鍒?SOAP 娑堟伅涓殑閫氱敤鏈哄埗銆係OAP 澶村厓绱犱笅涓綰х殑鎵鏈夊瓙鍏冪礌閮藉彨鍋氬ご鏉$洰銆備富浣撴槸涓烘渶緇堢殑娑堟伅鎺ユ敹鏂規兂瑕佺殑搴旂敤鏁版嵁錛堝 RPC錛夊噯澶囩殑瀹瑰櫒銆傚洜姝わ紝鍙互鎶?SOAP 鐪嬩綔鏄湪浼犺緭灞傦紙渚嬪 HTTP錛夊拰搴旂敤灞傦紙渚嬪錛屼笟鍔℃暟鎹級涔嬮棿寮曞叆鐨勫彟澶栦竴灞傦紝鍦ㄦ鍙互鏂逛究鐨勪紶閫佹秷鎭厓淇℃伅銆係OAP 澶存彁渚涘彲鎵╁睍鏈哄埗浠ユ墿灞?SOAP 娑堟伅浣垮叾鍙互閫傜敤浜庡縐嶇敤閫斻傝櫧鐒?SOAP 澶存槸鍚戞秷鎭坊鍔犲畨鍏ㄦу姛鑳芥渶鍚堢悊鐨勫湴鏂癸紝浣嗘槸 SOAP 瑙勮寖鏈韓騫舵病鏈夋寚瀹氳繖鏍風殑澶村厓绱犮?/p><p>璁╂垜浠粩緇嗙殑鍒嗘瀽涓涓嬪湪 Web 鏈嶅姟妯″瀷涓幇鏈夌殑鍚勭鍚勬牱鐨勪紶杈撳眰瀹夊叏鏈哄埗涓轟粈涔堜笉澶燂紝鍙堜負浠涔堜細闇瑕?Web 鏈嶅姟瀹夊叏灞傦紝浠ュ強榪欎釜瀹夊叏灞傛渶鍒濇槸鎬庢牱鐨勩?/p><p>绔绔殑娑堟伅浼犻掋傚畨鍏ㄤ紶杈撳崗璁紝濡?SSL 鍜?IPSec錛屽彲浠ュ湪浼犺緭榪囩▼涓彁渚涙秷鎭畬鏁存у拰鏈哄瘑鎬э紝浣嗗彧鏈夊湪鐐瑰鐐圭殑鎯呭喌涓嬶紝瀹冧滑鎵嶄細榪欐牱鍋氥備絾鏄紝鍥犱負 SOAP 娑堟伅鏄敱涓粙浣撴帴鏀跺茍澶勭悊鐨勶紝鎵浠ュ嵆渚夸袱涓や箣闂寸殑閫氫俊閾捐礬錛坈ommunication link錛夋槸鍙俊浠葷殑錛屽彧瑕佸湪鎵鏈夌殑涓粙浣撻棿娌℃湁淇′換鍏寵仈錛坱rust association錛夛紝閭d箞瀹夊叏鐨勭瀵圭閫氫俊灝辨槸涓嶅彲鑳界殑銆傚鏋滄湁涓鏉¢氫俊閾捐礬涓嶅畨鍏紝閭d箞绔绔畨鍏ㄦт篃浼氳鍓婂急銆傚氨 Web 鏈嶅姟鎷撴墤鏉ョ湅錛屽畨鍏ㄧ殑浼犺緭瀵逛簬 SOAP 娑堟伅鐨勭瀵圭瀹夊叏鎬ф槸涓嶅鐨勩?/p><p>涓棿浠剁殑鐙珛鎬с傛渶緇堬紝鍞竴鑳芥彁渚涚瀵圭瀹夊叏鎬х殑鏂瑰紡灝卞湪浜庡簲鐢ㄥ眰鎴栦腑闂翠歡灞傘傚鏋滄秷鎭湪閫氫俊鏂逛箣闂寸殑鏌愮偣鏄函鏂囨湰錛岄偅涔堝氨鏈夊彲鑳藉湪榪欑偣鍙楀埌鏀誨嚮銆備絾鏄紝鏃㈣鍦ㄦ柊鐨勬垨鐜版湁鐨勫簲鐢ㄤ腑闆嗘垚鍔犲瘑鍔熻兘錛屽張涓嶈兘寮曞叆棰濆鐨勫畨鍏ㄦу急鐐規垨澧炲姞椋庨櫓錛岃繖鏄竴欏逛笉瀹規槗鍙堜笉鍙楁榪庣殑浠誨姟銆傚洜姝わ紝鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝浜轟滑甯屾湜瀹夊叏鎬у姛鑳藉敖鍙兘闈犺繎搴旂敤錛屼絾涓嶅湪搴旂敤鏈韓涓瀯寤恒?/p><p>浼犺緭鐨勭嫭绔嬫с係OAP 涓粙浣撶殑鍘熸剰鏄敤鏉ユ妸淇℃伅杞彂鍒頒笉鍚岀殑緗戠粶涓婂幓錛岄氬父浣跨敤鐨勪紶杈撳崗璁篃浼氭湁鎵涓嶅悓銆傝櫧鐒舵墍鏈夌殑閫氫俊閾捐礬閮芥槸瀹夊叏鐨勶紝涓粙浣撲篃鏄煎緱淇¤禆鐨勶紝浣嗘槸錛屽畨鍏ㄤ俊鎭紙濡傛秷鎭彂閫佽呯殑韜喚楠岃瘉錛夐渶瑕佽杞Щ鍒版秷鎭礬寰勪笂鐨勪笅涓涓紶杈撳崗璁畨鍏ㄦу煙錛岃繖涓繃紼嬪啑闀胯屼笖澶嶆潅錛岃繕鍙兘浼氬鑷村畬鏁存ф柟闈㈢殑緙洪櫡銆?/p><p>寮傛澶氶樁娑堟伅浼犻掋備紶杈撳眰瀹夊叏鎬т繚璇佹暟鎹湪閫氫俊閾捐礬涓婁紶杈撴椂鐨勫畨鍏ㄣ傚畠涓庡瓨鍌ㄥ湪浠諱綍涓粙浣撲笂鐨勬暟鎹兘鏃犲叧銆傚湪涓嬈′紶杈撹鎺ユ敹騫惰В瀵嗗悗錛屼紶杈撳眰瀹夊叏鎬у淇濇姢鏁版嵁鍏嶅彈娌℃湁緇忚繃鎺堟潈鐨勮闂拰鍙兘鐨勬敼鍙樺氨涓嶆槸寰堟湁甯姪浜嗐傚湪鍏堝瓨鍌ㄦ秷鎭劧鍚庤漿鍙戠殑鎯呭喌涓嬶紙鎸佷箙鐨勬秷鎭槦鍒楋級錛屾秷鎭眰淇濇姢鏄湁蹇呰鐨勩?/p><p>鍥犱負鎴戜滑宸茬粡鐪嬪埌瀹夊叏鐨勪紶杈撴満鍒朵笉瓚充互婊¤凍 Web 鏈嶅姟寮鍙戞柟娉曞拰浣跨敤鍦烘櫙鐨勮姹傦紝鎵浠ユ垜浠殑浠誨姟灝辨槸瑕佸垱寤轟竴涓蹇墊?Web 瀹夊叏灞傦紝鍖呮嫭涓嬪垪鍑犱釜緇勪歡錛?/p><p>瀵逛簬緗戠粶瀹夊叏鎬э細 <br />鏀寔濡?SSL 鍜?HTTPS 絳夋彁渚涙満瀵嗘у拰瀹屾暣鎬х殑瀹夊叏浼犺緭鏈哄埗銆?nbsp;<br />瀵逛簬 XML 娑堟伅錛?nbsp;<br />濡傛灉閫氫俊娌℃湁涓棿鑺傜偣錛岄偅涔堝彂閫佹柟鍙互渚濋潬 SSL 鎴?HTTPS 鏉ヤ繚璇佺敤鎴鋒爣璇嗗拰瀵嗙爜鐨勬満瀵嗘с?nbsp;<br />W3C 姝e湪鏍囧噯鍖?XML 鏁板瓧絳懼悕宸ヤ綔鐨勬敮鎸併傚畠瀹氫箟浜嗙敓鎴愭秷鎭憳瑕佷笌鍒╃敤鍙戦佹柟鐨勭閽ユ潵絳懼彂娑堟伅鐨勬爣鍑?SOAP 澶村拰綆楁硶銆傚洜姝わ紝鎺ユ敹鏂瑰氨鍙互璇佹槑娑堟伅鍙戦佹柟鐨勮韓浠姐?nbsp;<br />瀵圭綉緇滃唴閮ㄧ殑銆佸彲淇′換鐨勭涓夋柟楠岃瘉鏈嶅姟錛堜緥濡?Kerberos錛夌殑鏀寔銆?nbsp;<br />姒傚康鎬?XML 娑堟伅浼犻掓ā鍨嬭繕蹇呴』鏀寔绔绔繚鎶ゆ秷鎭強鍏跺瓙鍏冪礌銆備負浜嗗叏闈㈢殑鏀寔錛岃繃紼嬪拰嫻佽兘鍔涢渶瑕佽鎵╁睍鍒板寘鎷秷鎭氦鎹㈢殑瀹夊叏鎬х壒寰併傚簲璇ユ湁涓縐嶆柟寮忓彲浠ュ畾涔夊孌墊秷鎭拰鐢ㄩ鏈熸帴鏀舵柟鐨勫叕閽ユ潵淇濇姢娑堟伅孌點傞渶瑕佹帰璁ㄧ殑涓浜涜棰樻湁錛?/p><p>绔偣璐熻矗瀹炵幇楠岃瘉鍙婃巿鏉冦傚簲璇ユ敮鎸佸湪浼佷笟涔嬮棿浜ゆ崲淇℃伅鐨勫悎鍚岀殑浠諱綍鎻忚堪涓兘瑕佸畾涔夊摢浜涢泧鍛樺彲浠ヤ嬌鐢ㄥ摢浜涙湇鍔°備腑浠嬩綋璐熻矗瀹¤鍜屾湇鍔″師濮嬫ц瘉鏄庛備腑浠嬩綋榪樺彲鑳介渶瑕佹墽琛岄獙璇併佹巿鏉冨拰鏁板瓧絳懼悕楠岃瘉浠ュ強鏈夋晥鎬ф鏌ャ?nbsp;<br />鍦ㄦ湇鍔$鐐圭殑鏈嶅姟鎻忚堪灞備腑闇瑕佸畾涔夋敮鎸佷笂鏂囪榪扮殑瀹夊叏鎬ч棶棰樼殑闈㈠悜瀹夊叏鎬у厓鏁版嵁銆傝繖浜涘畨鍏ㄦф弿榪板皢鏍規嵁涓諱綋鎴栬鑹插畾涔?Web 鏈嶅姟灞傝闂帶鍒躲傛湇鍔℃弿榪板皢浼氭弿榪版槸鍚︽敮鎸佹暟瀛楃鍚嶃佸姞瀵嗐侀獙璇佸拰鎺堟潈浠ュ強濡備綍鏀寔瀹冧滑銆?nbsp;<br />璇鋒眰鑰呭皢浣跨敤鏈嶅姟鎻忚堪鐨勫畨鍏ㄦу厓绱犳潵鏌ユ壘鏈嶅姟绔偣錛岃绔偣搴旂鍚堟斂絳栬姹傚強鍏跺畨鍏ㄦф柟娉曘?nbsp;<br />鏍囧噯緇勬鍦ㄨ皟鏌ュ涓嬩富棰樺拰鎶鏈傞殢鐫榪欎簺鏍囧噯鍥哄畾涓嬫潵錛屽畠浠皢浼氳騫跺叆 Web 鏈嶅姟瀹夊叏鎬т綋緋葷粨鏋勩?/p><p>W3C 鏈変竴涓?XML 鍔犲瘑宸ヤ綔緇勶紝甯姪鎻愪緵鏁版嵁鍏冪礌鐨勬満瀵嗘э紝榪欐牱楠岃瘉浜ゆ崲鎴愪負鍙兘銆?nbsp;<br />W3C 宸插彂甯冧簡涓涓?XML 瀵嗛挜綆$悊鏈嶅姟錛圶ML Key Management Services錛孹KMS錛夌殑澶囧繕褰曪紝鏉ュ府鍔╁垎鍙戝強綆$悊鍦ㄧ鐐逛箣闂磋繘琛屽畨鍏ㄧ殑閫氫俊鎵闇鐨勫瘑閽ャ?nbsp;<br />OASIS 宸茬粡鎴愮珛浜嗕竴涓妧鏈鍛樹細鏉ュ畾涔夋巿鏉冨拰楠岃瘉鏂█錛圓uthorization and Authentication assertions錛孲AML錛夈傝繖灝嗗府鍔╃鐐規帴鍙楀拰鍐蟲柇璁塊棶鎺у埗鏉冦?nbsp;<br />OASIS 宸茬粡鎴愮珛浜嗕竴涓妧鏈鍛樹細鏉ユ爣鍑嗗寲璁塊棶鎺у埗鏉冪殑琛ㄨ揪錛圶ACML錛夈傝繖灝嗗府鍔╃鐐硅兘澶熶互涓鑷寸殑鏂瑰紡瑙f瀽 SAML 鏂█銆?nbsp;<br />闅忕潃鎴戜滑涓嶆柇鐨勭爺絀?Web 鏈嶅姟妯″瀷涓亣鍒扮殑鎵鏈夊▉鑳佸拰瀵圭瓥錛學eb 鏈嶅姟瀹夊叏鎬т綋緋葷粨鏋勪篃鍦ㄤ笉鏂彂灞曠潃銆?/p><p> </p><p>鏈嶅姟璐ㄩ噺錛圦oS錛夊拰鍙潬鐨勬秷鎭紶閫?/p><p>鏈嶅姟璐ㄩ噺鍨傜洿濉旀彁渚涗笌 Web 鏈嶅姟姒傚康鏍堟瘡涓灞傛湁鍏崇殑淇℃伅鐨勮鑼冦傚浜庣綉緇滃眰錛岃繖灝嗕細鏆楃ず鑳戒嬌鐢ㄥ悇縐嶇駭鍒殑鏈嶅姟璐ㄩ噺鐨勭綉緇溿?/p><p>鐢變簬闇瑕侀氳繃緗戠粶榪涜鍙潬鐨勬秷鎭紶閫掞紝鎵浠ュ緱鏍規嵁鍦ㄨ繖涓棰嗗煙鍐呭彂閫侀珮璐ㄩ噺鏈嶅姟鐨勮兘鍔涙潵閫夋嫨緗戠粶鎶鏈傚彲闈犵殑娑堟伅浼犻掓寚鍩虹璁炬柦鎶婃秷鎭竴嬈″彂閫侊紙鍙彂閫佷竴嬈★級鍒伴瀹氱洰鏍囨垨鎻愪緵紜畾鐨勪簨浠訛紙濡傛灉鍙戦佹病鑳藉畬鎴愶紝涔熻浼氶噸鏂板彂閫佸埌婧愶級鐨勮兘鍔涖傜粨鍚堢綉緇滃眰涓?XML 娑堟伅浼犻掑皢闇瑕佹敮鎸佸洓涓瓑綰х殑娑堟伅浼犻掓湇鍔¤川閲忥細</p><p>1. 鏈浣沖姫鍔涳細鏈嶅姟璇鋒眰鑰呭彂閫佹秷鎭紝鏈嶅姟璇鋒眰鑰呭拰鍩虹璁炬柦涓嶅皾璇曢噸鍙戙?/p><p>2. 鑷沖皯涓嬈★細鏈嶅姟璇鋒眰鑰呮彁鍑鴻姹傦紝騫朵竴鐩撮噸璇曠洿鍒板畠鎺ユ敹鍒扮‘璁や負姝€傛湇鍔℃彁渚涜呴噸澶嶆秷鎭鐞嗕笉鏄棶棰橈紝渚嬪綆鍗曠殑鏌ヨ澶勭悊銆傚疄鐜拌繖鍙兘鎰忓懗鐫姣忎釜娑堟伅鍖呭惈鍞竴鐨勬爣璇嗐傛湇鍔¤姹傝呬互鑷繁紜畾鐨勬椂闂撮棿闅旈噸鍙戞病鏈夊緱鍒扮‘璁ょ殑娑堟伅銆傛湇鍔℃彁渚涜呭彂鍑虹‘璁ゆ秷鎭紝涓?RPC 鍝嶅簲娑堟伅錛屽鏋滀笉鑳藉鐞嗙殑璇濓紝灝卞彂閫佷笉鑳藉鐞嗙殑娑堟伅寮傚父銆?/p><p>3. 鑷沖涓嬈★細榪欏緩绔嬪湪鏈灝戜竴嬈℃儏鍐電殑鍩虹涔嬩笂銆傛湇鍔¤姹傝呰瘯鐫璇鋒眰鐩村埌瀹冨緱鍒板洖搴斻傝薄鐜版湁鐨勫叏灞鍞竴鏍囪瘑絎︼紙universal unique identifier錛孶UID錛夎繖鏍風殑鏈哄埗鍏佽鏈嶅姟鎻愪緵鑰呮姂鍒墮噸澶嶅嬈$殑璇鋒眰錛屼互紜繚璇鋒眰涓嶄細琚嬈℃墽琛屻備緥濡傦紝璇鋒眰鏍規嵁搴撳瓨鐩綍涓殑涓涓彿鐮佹嬁涓浠朵笢瑗褲?/p><p>4. 鍒氬ソ涓嬈★細鏈嶅姟璇鋒眰鑰呮彁鍑鴻姹傦紝璇鋒眰宸茬粡鎵ц鐨勫洖搴斾嬌鍏跺緱鍒頒繚璇併傚垰濂戒竴嬈′氦鎹㈡ā寮忔帓闄や簡閲嶄紶璇鋒眰鐨勯渶瑕佸茍涓旈傚簲澶辨晥鐨勬儏鍐點?/p><p>鍙潬鐨勬秷鎭紶閫掗氬父鏄氳繃鏍囧噯璁捐妯″紡浼犻佺殑錛屽湪璇ユā寮忎腑錛屼竴浠跺熀紜璁炬柦錛屾湁鏃跺彨鍋氱鐐圭鐞嗗櫒錛屽皢浼氳鐢ㄦ潵鍦ㄩ氫俊鐨勬瘡涓绔崗璋冩秷鎭彂閫併傚湪榪欑妯″紡涓紝鍙戦佹柟閫氳繃鍚屾璇鋒眰鎶婃秷鎭彂緇欑鐐圭鐞嗗櫒銆備竴鏃﹀彂閫佸埌錛屽彂閫佹柟灝卞彲浠ュ緱鍒頒繚璇侊紝涓瀹氫細鎶婃秷鎭彂閫佸嚭鍘繪垨寮曞彂紜畾鐨勪簨浠訛紙渚嬪瓚呮椂錛夈傜鐐圭鐞嗗櫒涓庡叾瀹冭祫婧愮鐞嗗櫒鍙備笌鏈湴浜嬪姟錛屽湪涓嬈′簨鍔′腑涓嶄粎鍙互鐢辯鐐圭鐞嗗櫒瀵規秷鎭繘琛屾帓闃燂紝榪樻湁鍙兘鍦ㄦ暟鎹簱涓褰曚笟鍔¤繃紼嬫楠ゃ傚簲鐢ㄧ▼搴忓簲璇ユ寚媧劇鐐圭鐞嗗櫒鏉ヨ礋璐e彂閫佹秷鎭垨鑰呮嫻嬪彂閫佸け璐ョ殑鍘熷洜錛屽畠鍦ㄧ綉緇滀紶杈撳眰鎴?XML 娑堟伅浼犻掑眰閮藉彲浠ヨ搗浣滅敤銆?/p><p>鍙潬鐨勪竴嬈℃ф秷鎭彂閫佺殑鎶鏈拰鐩殑閮戒笉浼氬紩璧蜂簤璁備絾鏄紝鍥寸粫濡備綍鍦?SOAP 鍜?XML 鐨勪笂涓嬫枃涓敮鎸佽繖欏規妧鏈凡緇忔彁鍑轟簡閲嶈鐨勮川鐤戙傚叧閿棶棰樻槸錛氬簲涓嶅簲璇ュ湪 XML 娑堟伅灞備笂瀹氫箟蹇呰鐨勫崗璁拰娑堟伅鏍煎紡錛屼粠鑰屽厑璁稿彲闈犵殑娑堟伅鍙戦佹垚涓轟袱绔簲鐢ㄧ▼搴忕殑璐d換錛屾垨鑰呰兘涓嶈兘鍦ㄨ緝浣庣殑灞傦紙濡備紶杈撳眰涓婏級瀹氫箟鍗忚鍜屾秷鎭牸寮忥紵</p><p>鍦ㄦ病鏈夋敮鎸佸彲闈犵殑娑堟伅浼犻掔殑浼犺緭鏂瑰紡鐨勬儏鍐典笅錛堝嵆浜掕仈緗戯級錛孹ML 娑堟伅浼犻掑眰灝嗛渶瑕佸湪涓嶅彲闈犵殑鍩虹璁炬柦涔嬩笂鏀寔榪欎簺鏈嶅姟璐ㄩ噺銆傜鐐圭鐞嗗櫒灝嗛渶瑕佷慨鏀規秷鎭紝鑰屼笉鏄慨鏀規秷鎭殑浼犺緭淇″皝錛岃繖鏍鋒墠鑳芥垚鍔熸壆婕斿叾瑙掕壊銆傚簲鐢ㄧ▼搴忓拰涓氬姟榪囩▼鐨勫畾涔夊皢蹇呴』鑰冭檻鎵鏈夊彲鑳界殑緇撴灉錛屽鎷掓敹娑堟伅鎴栧湪鍙帴鍙楃殑鏃墮棿闀垮害鍐呭彂閫佷笉鍑哄幓銆備絾鏄紝榪欎簺瀹氫箟榪橀渶瑕佽冭檻鍦ㄥ彂閫佽繃紼嬩腑鍙戠敓鐨勪腑闂寸姸鎬併傚悜涓氬姟榪囩▼鍏紑榪欎簺鐘舵佸彲鑳戒細澶уぇ澧炲姞鍏跺畾涔夌殑澶嶆潅紼嬪害錛屼絾瀵逛簬瀹氫箟榪囩▼鐨勪笟鍔″垎鏋愬笀鑰岃█騫舵棤澶ぇ鎰忎箟銆傚湪涓浜涙儏鍐典笅錛屼嬌鐢?XML 娑堟伅浼犻掓潵鍙戦佸彲闈犵殑娑堟伅浼犻掓牸寮忓彲鑳戒細瀵艱嚧浣跨敤鐜版湁鐨勮繖浜涗紶杈撴鏃犳晥鐜囥傛渶濂借兘寮鍙戜竴縐嶅湪浜掕仈緗戜笂浣跨敤鐨勫彲闈犵殑 HTTP 鏍囧噯銆?/p><p>鍦ㄦ湁鏀寔鍙潬鐨勬秷鎭紶閫掔殑浼犺緭鏂瑰紡鐨勬儏鍐典笅錛堝嵆鍦ㄤ紒涓氬唴閮級錛屽畠鍙互鐢ㄤ簬鍙戦佸彲闈犵殑娑堟伅錛岃屼笉鏄?XML 娑堟伅浼犻掑眰錛堝彲鑳界己鐪佷負絀哄疄鐜幫級銆傜鐐圭鐞嗗櫒灝嗕細鍙慨鏀逛紶杈撲俊灝侊紝鑰屼笉浼氫慨鏀?XML 娑堟伅銆備嬌鐢ㄥ彲闈犵殑浼犺緭浣垮簲鐢ㄧ▼搴忓拰涓氬姟榪囩▼瀹氫箟涓嶉渶瑕佺煡閬撴垨澶勭悊娑堟伅鍙戦佺殑涓棿鐘舵併?/p><p>闇瑕佸湪灝嗘潵榪涜鐨勫嚑鐐硅ˉ鍏咃細</p><p>浜掕仈緗戠殑 HTTP 闇瑕佸姞浠ユ敼榪涙墠鑳芥彁渚涘彲浠ュ湪浼佷笟闂翠嬌鐢ㄧ殑綆鍗曞彲闈犵殑娑堟伅浼犻掋傝繖浼氬甫鏉ラ澶栫殑濂藉錛氫笉姝?SOAP錛岃澶氱娑堟伅綾誨瀷閮藉彲浠ラ噰鐢ㄥ彲闈犵殑娑堟伅浼犻掋傞渶瑕?XML 娑堟伅浼犻掑眰澶勭悊鍙潬鐨勬秷鎭紶閫掔殑鎯呭喌灝變細闅忎箣鍑忓皯錛屼績榪涗笉渚濊禆浜庣綉緇滈夋嫨鐨勫簲鐢ㄧ▼搴忓紑鍙戙?nbsp;<br />HTTP 涓婄殑 XML 娑堟伅浼犻掑眰涔熼渶瑕佸鐞嗗彂甯冨拰璁㈤槄銆佹秷鎭帓搴忋佸彂閫佹椂闂撮檺鍒躲佷紭鍏堢駭鍜屽鐐逛紶閫佺瓑絳夐棶棰樸?nbsp;<br />鏈嶅姟鎻愪緵鑰呭鍙潬鐨勬秷鎭紶閫掔殑璐ㄩ噺鍜屽疄鐜扮殑鏀寔鎯呭喌灝嗕細鍦ㄦ湇鍔℃弿榪扮殑緇戝畾淇℃伅涓畾涔夈?/p><p>鏈嶅姟瀹炵幇灞傦紙渚嬪錛岄氳繃浜嬪姟鐨勬垨瀹夊叏鐨?SOAP 緇戝畾錛夌殑鏈嶅姟鎻忚堪浠ュ強鎺ュ彛灞傦紙渚嬪錛屼粠璇鋒眰鑰呭紑濮嬬瓑寰呮潵鑷彁渚涜呯殑鍝嶅簲涔嬪悗鏈闀跨粡榪囧涔咃級鐨勫叾瀹冩湇鍔℃弿榪頒腑閮戒細鍏崇郴鍒版湇鍔¤川閲忥紙Quality of Service錛変俊鎭備漢浠湡寰呯潃寮鍙戝嚭 WSDL 鎵╁睍鎴栨柊鐨勬湇鍔℃弿榪板眰鏉ュ厑璁告寚瀹氬叾瀹冩湇鍔¤川閲忓拰鍔熻兘鐨勮鑼冦?/p><p>Web 鏈嶅姟灞備笂鐨勬湇鍔¤川閲忓彲浠ュ湪鏈嶅姟鍚堟垚鍜屾湇鍔℃祦涓嬌鐢ㄣ傚湪涓烘祦閫夋嫨鏈嶅姟鎴栨彁紺烘祦綆$悊鍣ㄨ寮濮嬫仮澶嶆垨鍏跺畠鐨勬祦鏃訛紝棰勬湡鐨勬墽琛屾椂闂淬佽秴鏃跺箋佸巻鍙插鉤鍧囨墽琛屾椂闂村奸兘鍙互浣滀負杈撳叆銆傛湇鍔℃弿榪版爤鐨勭鐐規弿榪板眰鍜屽伐浣滄祦鎻忚堪灞傚繀欏繪彁渚涜繖涓淇℃伅銆?/p><p>Web 鏈嶅姟鐨勬湇鍔¤川閲忛棶棰樺拰瑙e喅鏂規浠嶇劧寰堢揣榪?/p><p> </p><p>緋葷粺鍜屽簲鐢ㄧ▼搴忕鐞?Management)</p><p>闅忕潃 Web 鏈嶅姟鎴愪負鍟嗕笟榪愪綔鐨勯噸瑕佸洜绱狅紝灝遍渶瑕佸鍏惰繘琛岀鐞嗐傚湪榪欑鎯呭喌涓嬶紝鎵璋撶鐞嗘槸鎸囦笓涓哄簲鐢ㄧ▼搴忓畾鍒剁殑鎴栦粠鍘傚晢閭i噷涔版潵鐨勭鐞嗗簲鐢ㄧ▼搴忓彲浠ュ彂鐜?Web 鏈嶅姟鐨勫熀紜璁炬柦銆乄eb 鏈嶅姟銆佹湇鍔℃敞鍐屼腑蹇冨拰 Web 鏈嶅姟搴旂敤紼嬪簭瀛樺湪鎬с佸彲鐢ㄦт互鍙婂仴搴峰害銆傛渶浠や漢婊℃剰鐨勭粨鏋滄槸綆$悊緋葷粺榪樺簲褰撹兘澶熸帶鍒跺拰閰嶇疆鍩虹璁炬柦鍙婄粍浠躲?/p><p>綆$悊姒傚康鎬?Web 鏈嶅姟鏍堝悇灞傜殑 Web 鏈嶅姟鍜?Web 鏈嶅姟妯″瀷緇勪歡蹇呭畾鏄湁鍙兘鐨勩傚綆$悊鐨勯渶姹傚彲浠ュ垎鎴愪袱涓泦涓殑棰嗗煙銆傜涓涓鍩熸槸鐢ㄤ簬瀹炵幇 Web 鏈嶅姟鐨勫熀紜璁炬柦鐨勫彲綆$悊鎬с備富瑕佺殑鑰冭檻搴斿綋鏄‘淇濆彲鐢ㄦу拰鎻愪緵鏈嶅姟鎻忚堪銆佹秷鎭紶閫掑拰緗戠粶鐨勫叧閿厓绱犵殑鎬ц兘銆俉eb 鏈嶅姟鍩虹璁炬柦鎻愪緵鑰呭簲褰撴彁渚涜繖涓灞備笂鐨勭郴緇熺鐞嗐?/p><p>浼佷笟瀵瑰叾鑷繁鐨勫熀紜璁炬柦鍙婄鐞嗘嫢鏈夊畬鍏ㄧ殑鑷富鏉冦備絾鏄紝褰撲紒涓氬湪瀵圭瓑鍩虹涓婄浉浜掍綔鐢ㄦ椂錛屽氨搴斿綋鎻愪緵瀵圭綉緇滃眰銆乆ML 娑堟伅浼犻掑眰銆佹湇鍔℃敞鍐屼腑蹇冨拰 Web 鏈嶅姟瀹炵幇鐨勫熀鏈姤鍛婂拰鎭㈠鍔炴硶銆傛澶栵紝浼佷笟鍚戝叾鍚堜紮浜烘彁渚涚殑綆$悊鎺ュ彛搴斿綋鏄湪鏈嶅姟灞備笂鎿嶄綔鐨勶紝鑰屼笉鏄湪鐩稿浣庣駭鐨勫熀紜璁炬柦灞備笂銆傚悎浼欎漢搴旇鑳藉璁塊棶鍒版姤鍛婃搷浣滃拰璇鋒眰澶勭悊鐨勭姸鎬佸拰鍋ュ悍搴︾殑鎺ュ彛錛屼絾涓嶄竴瀹氳鐞嗚В浼佷笟濡備綍綆$悊鍏惰姹傜殑緇嗚妭銆?/p><p>瀵逛簬緗戠粶灞傦紝鐜版湁鐨勭綉緇滅鐞嗕駭鍝佸嚑涔庢敮鎸佺洰鍓嶆墍鏈夌殑緗戠粶鍩虹璁炬柦銆傝繖浜涗駭鍝佸簲褰撶敤浜庣鐞嗕紒涓氬唴閮ㄧ殑 Web 鏈嶅姟鐨勭綉緇滃熀紜璁炬柦銆傚綋浼佷笟鐩鎬簰浣滅敤鏃訛紝灝卞簲璇ュ悜鍏跺悎浼欎漢鎻愪緵鏈夊叧 Web 鏈嶅姟鍩虹璁炬柦鍙敤鎬х殑鍩烘湰鎶ュ憡銆傚獎鍝?Web 鏈嶅姟鍩虹璁炬柦鍙敤鎬х殑緗戠粶鍙敤鎬у簲浣滀負鍥犵礌涔嬩竴鍐欏叆鎶ュ憡銆?/p><p>鍦?XML 娑堟伅浼犻掑眰錛屽崗璁簲璇ュ湪浼佷笟鍐呴儴鐢辯幇鏈夌殑鍩虹璁炬柦綆$悊宸ュ叿鏉ョ鐞嗐傚湪浼佷笟鐩鎬簰浣滅敤鐨勬儏鍐典笅錛屾瘡涓珯鐐歸兘鏈夊繀瑕佹彁渚涘崗璁殑鍩烘湰鎶ュ憡鍜屾仮澶嶅姙娉曘備緥濡傦紝濡傛灉绔欑偣 A 鏀寔浼氳瘽錛屽氨璇ュ悜绔欑偣 B 鎻愪緵鍙敤浜庢煡璇㈡椿璺冪殑 IBM Software Group Architecture Overview Web Services Conceptual Architecture 28 浼氳瘽浠ュ強寮鴻鍥炴粴鐨勬帴鍙c傚崗璁眰闇瑕佹甯哥殑棰戦亾涓庡崗璁拰綾諱技瀵圭瓑鐨勬帶鍒舵帴鍙c?/p><p>綆$悊鐨勭浜屼釜鏂歸潰鏄?Web 鏈嶅姟鏈韓鐨勫彲綆$悊鎬с備竴浜涗富瑕佺殑鑰冭檻鏄ц兘銆佸彲鐢ㄦс佷簨浠跺拰浣跨敤閲忓害錛屽洜涓哄畠浠皢涓烘湇鍔℃彁渚涜呭競鍦烘敹鍙栨墍鎻愪緵鐨勬湇鍔′嬌鐢ㄨ垂鎻愪緵蹇呰淇℃伅銆?/p><p>鏈嶅姟鎻忚堪鍙互鐢ㄤ簬瀹d紶鍙鐞嗘х壒寰佸拰綆$悊闇姹傘傝繖鏂歸潰鐨勭害瀹氭鍦ㄥ紑鍙戜箣涓?/p><p>鏈嶅姟娉ㄥ唽涓績鐨勪換浣曞疄鐜幫紝涓嶇鏄敤浜庣浜烘秷璐硅繕鏄叕鍏辨秷璐癸紝閮借姹傚熀紜璁炬柦鏄彲鐢ㄧ殑銆佸彂閫佹壙璇虹殑鏈嶅姟璐ㄩ噺騫惰兘澶熸姤鍛婁嬌鐢ㄦ儏鍐點傝繖浜涚郴緇熺鐞嗗厓绱犲浜庢垚鍔熼噰鐢?UDDI 鏄崄鍒嗛噸瑕佺殑銆?/p><p>瀵逛簬 Web 鏈嶅姟搴旂敤紼嬪簭緇勪歡鏉ヨ錛屾敮鎸佺鐞嗙幆澧冨彲鑳戒細澶уぇ澧炲姞搴旂敤紼嬪簭鐨勫鏉傛с傜敱浜?Web 鏈嶅姟蹇呴』鏄撲簬寮鍙戯紝鎵浠ュ繀欏誨敖鍙兘鍚戝紑鍙戣呴殣钘忚繖鏍風殑澶嶆潅鎬с俉eb 鏈嶅姟鐨勭鐞嗘柟寮忚浣垮熀紜璁炬柦鑳借嚜鍔ㄦ彁渚涢噺搴︺佸璁℃棩蹇椼佸惎鍔ㄥ拰鍋滄澶勭悊榪囩▼銆佷簨浠墮氱煡鍜屼綔涓?Web 鏈嶅姟榪愯鏃剁殑涓閮ㄥ垎錛堜篃灝辨槸璇達紝璧風爜鏄?SOAP 鏈嶅姟鍣級鐨勫叾瀹冪鐞嗗姛鑳姐傚洜涓哄熀紜璁炬柦閫氳繃瑙傚療瀹冩墍鎵樼鐨勭粍浠剁殑琛屼負涓嶅彲鑳芥敹闆嗗埌鎵鏈夌殑淇℃伅錛屾墍浠?Web 鏈嶅姟瀹炵幇涔熻浼氶渶瑕佸悜鎵樼瀹冪殑鏈嶅姟鍣ㄦ彁渚涘熀鏈殑鍋ュ悍搴﹀拰鐩戠潱淇℃伅銆?/p><p>Web 鏈嶅姟鍩虹璁炬柦搴旇涓烘湇鍔℃彁渚涗竴縐嶇畝鍗曠殑鏂瑰紡浠ュ弬涓庣鐞嗗拰鍒╃敤綆$悊鍩虹璁炬柦銆傚彲綆$悊鐨勬湇鍔$殑 WSDL 鏂囨。鐨勫畾涔夊簲褰撴槸 Web 鏈嶅姟鑳藉疄鐜版彁渚涢氳繃綆$悊緋葷粺璁塊棶 Web 鏈嶅姟鐨勭鐞嗕俊鎭殑鍔熻兘銆傝繖涓鎺ュ彛鍙兘鍖呮嫭鐨勮兘鍔涙槸鑾峰緱閰嶇疆鍜岄噺搴︽暟鎹佹洿鏂伴厤緗強鎺ユ敹鏉ヨ嚜鍙鐞嗙殑 Web 鏈嶅姟鐨勪簨浠躲?/p><p>Web 鏈嶅姟浣撶郴緇撴瀯鐨勫鉤鍙扮嫭绔嬫т嬌瀹冧笉閫傚悎濂楃敤浠諱綍涓鏉?Web 鏈嶅姟綆$悊鏍囧噯銆傚洜姝わ紝闇瑕佹湁涓縐嶅熀浜?Web 鏈嶅姟鑰屼笖鍏佽 Web 鏈嶅姟涓庣鐞嗙郴緇熼氫俊鐨勬柟娉曘備負浜嗚揪鍒拌繖涓鐩殑錛岃繕搴斿綋瀹氫箟鐢?WSDL 鏂囨。鎻忚堪鐨勩佸彲鎺ユ敹鏉ヨ嚜鍙鐞?Web 鏈嶅姟鐨勪簨浠朵互鍙婇噺搴︽洿鏂扮殑綆$悊鏈嶅姟錛屽茍浣垮叾鍙敤銆傜鐞嗘湇鍔$殑瀹炵幇鎶鏈笌 Web 鏈嶅姟鏃犲叧銆備絾鏄紝瀵逛簬鍩轟簬 Java 鎶鏈殑鐜錛孞ava 綆$悊鎵╁睍錛圝ava Management Extension錛孞MX錛夊簲璇ユ槸鍚堜箮閫昏緫鐨勮屼笖鍘傚晢涓嶅彲鐭ョ殑閫夋嫨銆傞氳繃浣跨敤 JMX 榪欐牱鐨勫紑鏀炬爣鍑嗭紝瀵圭幇鏈夌殑緋葷粺綆$悊鎻愪緵鑰呮潵璇達紝瑕佹妸鍏剁洰鍓嶆墍鎻愪緵鐨勪駭鍝佹墿灞曚負鍖呮嫭 Web 鏈嶅姟鍏抽敭鍏冪礌鐨勭鐞嗗簲璇ユ槸寰堝鏄撶殑銆俉eb 鏈嶅姟鐨勭鐞嗕綋緋葷粨鏋勪粛鍦ㄥ悜鍓嶅彂灞曘?/p><p> </p><p>14.4 Web Services 欏圭洰瀹炴垬</p><p>14錛?錛? Web Services瀹炵幇</p><p> </p><p>鏈功鏄噸鐐硅瑙JB 3.0鐨勩傚湪鐞嗚В浜哤eb Services鍘熺悊涔嬪悗錛?鎺ヤ笅鏉ユ垜浠瑙e浣曚嬌鐢↗2EE鍜孍JB3.0鏉ュ疄鐜癢eb Services</p><p> </p><p>Web 鏈嶅姟閬靛驚 Java 2 騫沖彴錛屼紒涓氱増錛圝ava 2 Platform錛孍nterprise Edition錛孞2EE錛夈侀氱敤瀵硅薄璇鋒眰浠g悊浣撶郴緇撴瀯錛圕ommon Object Request Broker Architecture錛孋ORBA錛変互鍙婂叾瀹冮拡瀵逛笌鑰﹀悎杈冪揣鐨勫垎甯冨紡鎴栭潪鍒嗗竷寮忓簲鐢ㄧ▼搴忛泦鎴愮殑鏍囧噯銆俉eb 鏈嶅姟鏄儴緗插茍鎻愪緵閫氳繃 Web 璁塊棶涓氬姟鍔熻兘鐨勬妧鏈紱J2EE銆丆ORBA 鍜屽叾瀹冩爣鍑嗘槸瀹炵幇 Web 鏈嶅姟鐨勬妧鏈?/p><p> </p><p>J2EE 1.4涓轟嬌鐢ㄥ父瑙凧ava綾繪垨浼佷笟綰ava Beans鏉ュ垱寤哄拰閮ㄧ講web services鎻愪緵浜嗕竴涓叏闈㈢殑騫沖彴銆備互涓嬭〃鏍肩粰鍑轟簡J2EE 1.4涓寘鎷殑web service APIs鐨勭粏鑺傘?nbsp;<br /><img src="http://www.ascenttech.cn/html/book/part/step3/xx12/image011.jpg" width="634" height="343" alt="" /><br />瀹氫箟鍦↗ava Community Process鐨凧SR 101涔嬩笅鐨凧AX-RPC錛屾彁渚涗簡鍒涘緩鍜岃闂畐eb services鐨凧ava API,鍥犳瀹冩槸浣跨敤J2EE騫沖彴鍒涘緩鍜岄儴緗瞱eb services鐨?#8220;蹇冭剰鍜岀伒欖?#8221;銆傞氳繃鍚戝簲鐢ㄧ▼搴忓紑鍙戣呴殣钘廥ML綾誨瀷鍜孞ava綾誨瀷鏄犲皠鐨勫鏉傛э紝浠ュ強澶勭悊XML鍜孲OAP娑堟伅鐨勫簳灞傜粏鑺傦紝瀹冩彁渚涗簡涓涓畝鍗曠殑錛屽仴澹殑鍒涘緩web services搴旂敤鐨勫鉤鍙般備負浜嗗紩鍏ヤ竴涓柟娉曡皟鐢ㄨ寖寮忥紝瀹冩彁渚涗簡涓ょ緙栫▼妯″紡:鏈嶅姟鍣ㄧ妯″紡錛屼嬌鐢↗ava綾繪垨鏃犵姸鎬丒JB寮鍙憌eb service 绔偣錛屽拰瀹㈡埛绔ā寮忥紝鍒涘緩浣滀負鏈湴瀵硅薄璁塊棶web services鐨凧ava瀹㈡埛绔侸AX-RPC 1.1瑕佹眰浣跨敤SOAP 1.1錛屽茍涓斿疄鐜頒笌浣跨敤鍏朵粬鎶鏈垱寤虹殑web services涔嬮棿鐨勪簰鎿嶄綔鎬э紝姣斿寰蔣鐨?NET銆傚疄鐜頒簡J2EE1.4瑙勮寖鐨勫簲鐢ㄦ湇鍔″櫒錛屾瘮濡侽C4J 10.1.3鍜孲UN鐨凧ava System Application Sever,鎻愪緵浜嗗浜嶫AX-RPC鐨勬敮鎸併?/p><p>JAX-RPC鐨勫彨娉曟湁鐐圭敤璇嶄笉褰擄紝鍥犱負瀹冩棦鏀寔RPC綾誨瀷鐨剋eb services錛屼篃鏀寔鏂囨。綾誨瀷鐨剋eb services銆?/p><p>Web Services閮ㄧ講妯″瀷</p><p>鍦↗2EE 1.4涔嬪墠錛屾墍鏈塉2EE鍟嗗閮戒嬌鐢ㄤ粬浠鏈夌殑閮ㄧ講妯″瀷鏀寔web services銆侸2EE 1.4涓篔ava Web Services瀹氫箟浜嗛儴緗叉ā鍨嬨傚畠涓篔2EE騫沖彴涓婄殑web services鍒跺畾浜嗗紑鍙戯紝閮ㄧ講浠ュ強鏈嶅姟鍙戝竷鍜屼嬌鐢ㄧ殑鏍囧噯銆?/p><p>鏈変簡J2EE 1.4瀵箇eb services鐨勬敮鎸侊紝璁╂垜浠涔犱嬌鐢↗2EE騫沖彴鏉ュ緩閫爓eb service鐨勬柟娉曘?/p><p>浣跨敤J2EE鍒涘緩涓涓猈eb Service</p><p>鎶妛eb service鍒涘緩鎴愪竴涓交渚跨殑鍜屽彲浜掓搷浣滅殑鍒嗗竷寮忕粍浠朵笉鏄竴欏圭悙紕庣殑浠誨姟銆傚涔嬪墠璁ㄨ鐨勶紝浣犳棦鍙互鎶婂父瑙凧ava綾伙紝涔熷彲浠ユ妸鏃犵姸鎬丒JB閮ㄧ講鎴恮eb services銆傚父瑙凧ava綾昏鎵撳寘鍦ㄤ竴涓獁eb妯″潡涓紝鑰孍JB web services琚墦鍖呭湪鏍囧噯鐨別jb-jar妯″潡涓?/p><p>鍦ㄨ繖涓ょ閮ㄧ講閫夋嫨涓紝浣犱細浣跨敤鍝竴涓憿?</p><p>Java 綾誨鏃犵姸鎬丒JB:姘告棤姝㈠鐨勪簤璁?/p><p>浣犱細閫夋嫨甯歌Java綾昏繕鏄疎JB浣滀負浣犲垱寤簑eb service鐨勬妧鏈彲鑳芥槸涓涓暱鏈熺殑浜夎銆侸ava綾繪瘮EJB鏇村鏄撳紑鍙戯紝瀹冩槸綰殑Java瀵硅薄錛屽茍涓斿畠涓嶅叿鏈塃JB甯︽潵鐨?#8220;棰濆杈庨噸”銆備絾鏄紝EJB鎻愪緵浜嗗嚑涓緢濂界殑鐗圭偣錛屾瘮濡傝澹版槑鐨勪簨鍔″拰瀹夊叏鎬э紝鍥犳瀹冧嬌寮鍙戣呭皢綺懼姏闆嗕腑浜庡緩绔嬪晢涓氶昏緫錛岃屼笉闇瑕佹媴蹇冨熀紜鏈嶅姟鏋舵瀯銆侲JB 3.0澶уぇ綆鍖栦簡璁捐妯″瀷錛屽湪瀹冪殑瑙勮寖涓紝EJB鐪嬭搗鏉ュ氨鍍忓父瑙凧ava綾匯?/p><p>浣跨敤J2EE 5.0綆鍖朣OA鐨勫紑鍙?/p><p>銆銆浣跨敤J2EE鍒涘緩闈㈠悜鏈嶅姟鐨勫簲鐢ㄧ▼搴忕‘瀹炲緢鍥伴毦錛屽洜姝ら氳繃浣跨敤鐢盝SR 181瀹氫箟鐨刉eb Services 鍏冩暟鎹敞瑙o紝J2EE 5.0灝嗕嬌寮鍙戞洿綆鍗曘侲JB 3.0鍜學eb Services鍏冩暟鎹叿鏈夌浉浼肩殑鐩爣錛屽氨鏄悜寮鍙戣呮彁渚涗翰鍜屽姏銆?/p><p>銆銆涓轟簡鍦↗2EE 1.4涓紑鍙戜竴涓畝鍗曠殑Java web service錛屼綘闇瑕佸嚑涓獁eb service瀹氫箟鏂囦歡:WSDL錛屾槧灝勬枃浠跺拰鍑犱釜鍐楅暱鐨勬爣鍑嗕互鍙婄鏈夌殑web services閮ㄧ講鎻忚堪絎︺俉eb Services鍏冩暟鎹鑼冧嬌鐢ㄤ竴縐嶇被浼間簬EJB 3.0鐨勭己鐪侀厤緗柟娉曟潵浣垮紑鍙戞洿綆渚褲俉eb Services鍏冩暟鎹敞瑙e鐞嗗櫒(鎴杦eb services 瑁呴厤宸ュ叿)浼氫負浣犵敓鎴愯繖浜涙枃浠訛紝鍥犳浣犲彧闇瑕佸叧蹇冪被鐨勫疄鐜般?/p><p>銆銆褰撲綘浣跨敤Web Services鍏冩暟鎹紑鍙戞椂錛岃繖鏄竴涓湅璧鋒潵濡傛綆鍗曠殑Java web service:</p><p>package com.ascenttech.ejb30.ws.demo; <br />import javax.jws.WebMethod; <br />import javax.jws.WebService; <br />@WebService(name = "HelloWorldService", <br />targetNamespace = "http://hello/targetNamespace" ) <br />public class HelloWorldService { <br />@WebMethod public String sayhello(String name ) { <br />return "Hello” +name+ “ from jws";<br />} <br />}</p><p>銆銆姝e鎴戜箣鍓嶆彁鍒扮殑錛孍JB 3.0浣跨敤甯歌Java綾葷畝鍖栦簡EJB鐨勫紑鍙戙傞氳繃鍒╃敤EJB 3.0鍜學eb Services鍏冩暟鎹紝寮鍙戝熀浜嶦JB鐨剋eb services灝嗕細鍙樺緱瓚婃潵瓚婄畝鍗曘傚綋浣跨敤EJB 3.0鍜寃eb services鍏冩暟鎹椂錛岃繖鏄竴涓湅璧鋒潵濡傛綆鍗曠殑HelloWorld EJB web service銆備綘涓嶅繀鎷呭績鍒涘緩WSDL錛岄儴緗叉弿榪扮絳夌瓑錛屽簲鐢ㄦ湇鍔″櫒浼氬湪閮ㄧ講榪囩▼涓敓鎴愯繖浜涘畾涔夋枃浠躲?/p><p>package com.ascenttech.ejb30.ws;<br />import javax.ejb.Remote;<br />import javax.jws.WebService;<br />@WebService <br />public interface HelloServiceInf extends java.rmi.Remote{<br />@WebMethod java.lang.String sayHello(java.lang.String name) <br />throws java.rmi.RemoteException;<br />}</p><p>銆銆濡備笅鏄疎JB 3.0涓?HelloWorld EJB鐨勫疄鐜扮被:</p><p>package com.ascenttech.ejb30.ws;<br />import java.rmi.RemoteException;<br />import javax.ejb.Stateless;<br />@Stateless(name="HelloServiceEJB")<br />public class HelloServiceBean implements HelloServiceInf {<br />public String sayHello(String name) {<br />return("Hello "+name +" from first EJB3.0 Web Service");<br />}<br />}</p><p>銆銆浠ヤ笂渚嬪瓙娓呮鐨勮〃鏄庝簡閫氳繃浣跨敤web services鍏冩暟鎹拰EJB 3.0錛屾湇鍔″紑鍙戞鍦ㄥ彉寰楄秺鏉ヨ秺綆鍗曘傜幇鍦紝浣犲彲浠ュ湪瀹炵幇浜咼2EE瑙勮寖鐨勫簲鐢ㄦ湇鍔′腑錛屾瘮濡侸Boss Application Server絳夛紝寮濮嬪垱寤哄拰閮ㄧ講浣犵殑web services浜嗐?/p><p>14.4錛? Web Services 欏圭洰瀹炴垬</p><p>14.4.2.1 Web Services鐨勫疄鐜?br />鏈妭浣跨敤EJB 3.0 瀹炵幇涓涓獁eb Services鐧誨綍鐨勪緥瀛愩備笅闈㈡垜浠垱寤轟竴涓伐紼嬪彨錛欵mployeeManager銆傚姞鍏ョ敤鍒扮殑EJB 3.0鐨刯ar鍖呫?/p><p>鎴戜滑鍏堝垱寤烘湇鍔″櫒绔殑瀹炰綋Bean錛岃繖鍜屽垱寤烘櫘閫氱殑Ejb3.0瀹炰綋bean鏄竴鏍風殑錛?/p><p>package com.ascent.ejb.po;</p><p>import java.io.Serializable;</p><p> </p><p>import javax.ejb.Remote;</p><p>import javax.ejb.Stateless;</p><p>import javax.persistence.Column;</p><p>import javax.persistence.Entity;</p><p>import javax.persistence.GeneratedValue;</p><p>import javax.persistence.Id;</p><p>import javax.persistence.Table;</p><p>@SuppressWarnings("serial")</p><p>@Entity</p><p>@Table(name = "usr")</p><p> </p><p>public class User implements Serializable</p><p>{</p><p>private Integer id;</p><p>private String name;</p><p>private String password;</p><p>private String description;</p><p>@Id</p><p>@GeneratedValue</p><p>public Integer getId()</p><p>{</p><p>return id;</p><p>}</p><p>public void setId(Integer id)</p><p>{</p><p>this.id = id;</p><p>}</p><p>@Column(name = "name", nullable = false)</p><p>public String getName()</p><p>{</p><p>return name;</p><p>}</p><p>public void setName(String name)</p><p>{</p><p>this.name = name;</p><p>}</p><p>@Column(name = "password", nullable = false)</p><p>public String getPassword()</p><p>{</p><p>return password;</p><p>}</p><p>public void setPassword(String password)</p><p>{</p><p>this.password = password;</p><p>}</p><p>@Column(name = "description", nullable = true, length = 100)</p><p>public String getDescription()</p><p>{</p><p>return description;</p><p>}</p><p>public void setDescription(String description)</p><p>{</p><p>this.description = description;</p><p>}</p><p>}</p><p>鎺ョ潃鍒涘緩榪滅▼鎺ュ彛錛?/p><p>package com.ascent.webservice.bean;</p><p> </p><p>import java.rmi.Remote;</p><p>import javax.jws.WebMethod;</p><p>import javax.jws.WebService;</p><p>import javax.jws.soap.SOAPBinding;</p><p>import javax.jws.soap.SOAPBinding.Style;</p><p>@WebService</p><p>@SOAPBinding(style=Style.RPC)</p><p>public interface LoginDao extends Remote {</p><p>@WebMethod</p><p>public boolean isLogin(String name, String password);</p><p>}</p><p>鍦↙oginDao綾諱腑瑕佹敞鎰忕殑鏄疪emote鎺ュ彛鏄瀹炵幇鐨勶紝@SOAPBinding(style=Style.RPC)錛孲oap鐨勭粦瀹氭柟寮忎篃鏄渶瑕佺殑錛屼笉鐒跺湪瀹㈡埛绔槸鎵句笉鍒癓oginDao 銆?/p><p>涓嬮潰鍒涘緩浼氳瘽bean錛?/p><p>package com.ascent.webservice.bean;</p><p>import java.util.List;</p><p>import javax.ejb.Stateful;</p><p>import javax.ejb.Stateless;</p><p>import javax.jws.WebService;</p><p>import javax.persistence.EntityManager;</p><p>import javax.persistence.PersistenceContext;</p><p>import javax.persistence.Query;</p><p>@Stateless</p><p>@WebService(endpointInterface = "com.ascent.webservice.bean.LoginDao")</p><p>public class LoginDaoBean</p><p>{</p><p>@PersistenceContext</p><p>protected EntityManager em;// the manager of entity</p><p>public boolean isLogin(String name, String password)</p><p>{</p><p>// define query sentence</p><p>StringBuffer hql = new StringBuffer();</p><p>hql.append("from User u where u.name='" + name + "'");</p><p>hql.append(" and u.password='" + password + "'");</p><p>// create the query</p><p>Query query = em.createQuery(hql.toString());</p><p>List queryList = query.getResultList();</p><p>// if the result is null</p><p>if (queryList.size() == 0)</p><p>{</p><p>return false;</p><p>}</p><p>// if the user's length greater 1</p><p>if (queryList.size() > 1)</p><p>{</p><p>return false;</p><p>}</p><p>// return single user</p><p>return true;</p><p>}</p><p>}</p><p>鑷蟲鏈嶅姟鍣ㄧ鐨勭被鏄緩濂戒簡錛岃繖閲屽張涓や釜闂錛岄渶瑕佽鏄庝竴涓?/p><p>A錛?涓や釜綾葷殑鏂規硶涓兘娌℃湁鎶涘嚭寮傚父錛屽彲涓嶅彲浠ユ姏鍑哄憿? 鍙互銆備絾鍒板疄鐜癝OA鐨勬椂鍊欎細鏈変竴浜涢棶棰橈紝灝辨槸寮傚父鍦ㄧ粡axis 閫氳繃WSDL2Java 鐢熸垚鍚庯紝鍦ㄧ▼搴忚繍琛屾椂鏈夊彲鑳戒細鍑虹幇鎵句笉鍒扮殑鎯呭艦銆傛墍浠ユ湰鏂囦負浜嗚澶у鍦ㄤ豢鐓ц繖涓緥瀛愭椂閮借兘鎴愬姛錛屾墍浠ヤ篃灝辨姏寮冧簡寮傚父鐨勬姏鍑恒?/p><p>B錛?涓や釜綾葷殑鏂規硶鐨勮繑鍥炲兼槸鍩烘湰綾誨瀷錛岃屼笉鏄嚜瀹氫箟綾誨瀷錛屼負浠涔堜細榪欐牱鍛紝鑷畾涔夌被鍨嬪彲浠ヤ笉鍙互鍛紝鍙互銆?/p><p>鐜板湪鎴戜滑鐨剋ebservice鐨勬湇鍔″櫒绔氨宸茬粡鍒涘緩濂戒簡錛屾垜浠妸鏈嶅姟鍣ㄧ鐨勪笁涓被鍜宲ersistence.xml鏂囦歡涓璧鋒墦鍖呴儴緗插埌jboss鏈嶅姟鍣ㄩ噷銆傚寘鍚嶆槸錛歟mpdEjb銆?/p><p>涓嬮潰鎴戜滑鏉ュ垱寤哄鎴風錛?/p><p>package com.ascent.webservice.client;</p><p>import java.net.URL;</p><p>import javax.xml.namespace.QName;</p><p>import javax.xml.rpc.Service;</p><p>import javax.xml.rpc.ServiceFactory;</p><p>import com.ascent.webservice.bean.LoginDao;</p><p>public class LoginClient</p><p>{</p><p>public static void main(String[] args) throws Exception</p><p>{</p><p>String userName ="lxl";</p><p>String password = "lxl";</p><p>URL url = new URL("http://localhost:8080/empdEjb/LoginDaoBean?wsdl");</p><p>QName qname =</p><p>new QName("http://bean.webservice.ascent.com/jaws","LoginDaoService");</p><p>ServiceFactory factory = ServiceFactory.newInstance();</p><p>Service service = factory.createService(url, qname);</p><p>LoginDao loginDao = (LoginDao) service.getPort(LoginDao.class);</p><p>boolean isExists = loginDao.isLogin(userName, password);</p><p>if(isExists)</p><p>{</p><p>System.out.println("hello " + userName);</p><p>}</p><p>else</p><p>{</p><p>System.out.println("sorry " + userName + ", you are not user in the system!");</p><p>}</p><p>}</p><p>}</p><p>鎶婃湇鍔″櫒绔彂甯冨嚭鍘諱互鍚庯紝鏈嶅姟鍣ㄧ浼氳嚜鍔ㄥ彂甯冧竴涓獁ebService錛屽茍涓旂敓鎴愬茍鍙戝竷涓涓猈SDL鏂囦歡錛岄氳繃璁塊棶http://localhost:8080/empdEjb/LoginDaoBean?wsdl榪欎釜緗戝潃鏄彲浠ユ壘鍒扮殑銆俬ttp://bean.webservice.ascent.com/jaws 鍜?LoginDaoService 瀛楃涓詫紝鍦ㄥ鎴風紼嬪簭褰撲腑鍑虹幇浜嗕笂闈袱涓瓧絎︿覆錛屽畠浠湪浣犵敓鎴愮殑wsdl 鏂囦歡涓湁璇︾粏鐨勬弿榪般傚湪鍦板潃鏍忛噷杈撳叆http://localhost:8080/empdEjb/LoginDaoBean?wsdl錛屽氨鍙互鐪嬪埌wsdl鏂囦歡浜嗐傝繖閲屼綘鎵闇瑕佸仛鐨勬槸鎸夌収浣犺嚜宸辯殑鎯呭喌緙栧啓浣犺嚜宸辯殑瀹㈡埛绔▼搴忋傚惎鍔ㄦ湇鍔″櫒鍚庯紝鍦ㄦ満瀛愪笂榪愯瀹㈡埛绔▼搴忓氨鍙互浜嗐傚綋鐒朵綘涔熷彲浠ュ幓緙栧啓鑷繁鐨刯sp瀹㈡埛绔幓璋冪敤瀹冦倃sdl鏂囦歡鐨勫唴瀹瑰涓嬶細</p><p><definitions name="LoginDaoService"</p><p>targetNamespace="http://bean.webservice.ascent.com/jaws"></p><p><types/></p><p><message name="LoginDao_isLogin"></p><p><part name="String_1" type="xsd:string"/></p><p><part name="String_2" type="xsd:string"/></p><p></message></p><p>-</p><p><message name="LoginDao_isLoginResponse"></p><p><part name="result" type="xsd:boolean"/></p><p></message></p><p>-</p><p><portType name="LoginDao"></p><p>-</p><p><operation name="isLogin" parameterOrder="String_1 String_2"></p><p><input message="tns:LoginDao_isLogin"/></p><p><output message="tns:LoginDao_isLoginResponse"/></p><p></operation></p><p></portType></p><p>-</p><p><binding name="LoginDaoBinding" type="tns:LoginDao"></p><p><soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/></p><p>-</p><p><operation name="isLogin"></p><p><soap:operation soapAction=""/></p><p>-</p><p><input></p><p><soap:body namespace="http://bean.webservice.ascent.com/jaws" use="literal"/></p><p></input></p><p>-</p><p><output></p><p><soap:body namespace="http://bean.webservice.ascent.com/jaws" use="literal"/></p><p></output></p><p></operation></p><p></binding></p><p>-</p><p><service name="LoginDaoService"></p><p>-</p><p><port binding="tns:LoginDaoBinding" name="LoginDaoPort"></p><p><soap:address location="http://lixinli:8080/empdEjb/LoginDaoBean"/></p><p></port></p><p></service></p><p></definitions></p><p>榪欐牱涓涓猈ebService+Ejb 3.0鐨勪緥瀛愬氨瀹炵幇浜嗐?/p><p>14.4.2.2 SOA鐨勫疄鐜?br />鏈緥榪樻槸鍩轟簬鍓嶄袱涓緥瀛愮殑鍩虹涓婄殑錛岃淇濊瘉涓婇潰鐨勪緥瀛愭槸鑳芥甯歌繍琛岀殑銆?/p><p>1.WSDL2Java<br />浠庡悕瀛椾笂鍙互鐪嬪嚭錛屾槸鎶妛sdl 杞寲涓簀ava鐨?鍦ㄤ笂闈㈢殑渚嬪瓙涓垜浠湪鏈嶅姟鍣ㄧ鐢熸垚浜嗕竴涓獁sdl鏂囦歡錛岀幇鍦ㄨ鍋氱殑灝辨槸浣犳妸閭d釜wsdl鏂囦歡緇欏埆浜烘垨鑰呭埆鐨勫叕鍙革紝璁╀粬浠牴鎹畐sdl涓墍鎻忚堪鐨勪綘鎵鎻愪緵鐨勬湇鍔★紝鍘誨紑鍙戜竴涓簲鐢紝鏉ヨ闂綘鎵鎻愪緵鐨勬帴鍙c傛嬁鍒拌繖涓猈SDL鏂囦歡鍚庤鍋氫粈涔堝憿錛宼o java銆傛垜浠潵鐪嬬湅鎬庝箞to java銆?/p><p>榪欓噷錛屽湪鍘熸潵鐨凟mployeeManager宸ョ▼涓嬮潰寤轟竴涓獁sdl鏂囦歡澶癸紝灝嗗畠鏀懼湪涓嬮潰錛岀劧鍚庢墍瑕佸仛鐨勫噯澶囧伐浣滄槸錛屾妸鍖呮嫭axis鍦ㄥ唴鐨勫嚑涓猨ar鍖呮壘鍒幫紝璁劇疆鍦ㄤ綘鐨刢lasspath閲岄潰銆傜劧鍚庡湪鍛戒護琛屼笅榪愯WSDL2Java銆?/p><p>鍝嚑涓猨ar鍖咃紵</p><p>C:\axis-1_4\lib\axis.jar;C:\axis-1_4\lib\axis-ant.jar;C:\axis-1_4\lib\commons-discovery-0.2.jar;C:\axis-1_4\lib\commons-logging-1.0.4.jar;C:\axis-1_4\lib\jaxrpc.jar;C:\axis-1_4\lib\log4j-1.2.8.jar;C:\axis-1_4\lib\saaj.jar;C:\axis-1_4\lib\wsdl4j-1.5.1.jar;E:\jboss-4.0.5\server\default\lib\activation.jar;E:\jboss-4.0.5\server\default\lib\mail.jar</p><p>榪欐槸鎴慶lasspath 閲岄潰鎵璁劇疆鐨勫嚑涓猨ar鍖咃紝鍚庨潰涓や釜鍙互涓嶉渶瑕侊紝絎簩涓篃鍙互涓嶉渶瑕侊紝鍚庝咯涓彧鏄繚璇佽繍琛岀殑鏃跺欐病鏈夎鍛娿?/p><p>1錛?灝哃oginDaoBean.wsdl 鏀懼湪wsdl鏂囦歡澶逛笅闈€侲:\workspace\EmployeeManager\wsdl</p><p>2錛?鍦ㄥ懡浠よ涓嬭繘鍏:\workspace\EmployeeManager\wsdl</p><p>3錛?鎵ц java org.apache.axis.wsdl.WSDL2Java LoginDaoBean.wsdl</p><p>榪欎釜鏃跺欙紝浣犱細鍙戠幇鍦╳sdl鏂囦歡澶逛笅闈㈢敓鎴愪簡涓涓洰褰曪紝瀹冮噷闈㈠寘鍚簡鍑犱釜java綾匯?/p><p>LoginDao.java錛孡oginDaoBindingStub.java錛孡oginDaoService.java錛孡oginDaoServiceLocator.java</p><p>2 SOA鐨勫疄鐜?br />鏈妭鏄竴涓互SOA+struts瀹炵幇鐧誨綍鐨勪緥瀛愩傛柊寤轟竴涓獁eb宸ョ▼錛孍mployeeWebService錛岀劧鍚庡皢涓婇潰鐢熸垚鐨勫嚑涓被鏀懼叆浣犵殑src鐩綍涓嬮潰錛屾槸鏀炬暣涓洰褰曪紝鍒彧鏀懼嚑涓被榪涘幓. 鏋勫緩struts璧勬簮銆傚垱寤簊truts鐨勮繃紼嬪氨涓嶅湪榪欓噷緇嗚浜嗐傚垱寤虹殑action鍐呭濡備笅錛?/p><p>package com.ascent.webservice.struts.action;</p><p>import javax.servlet.http.HttpServletRequest;</p><p>import javax.servlet.http.HttpServletResponse;</p><p>import javax.servlet.http.HttpSession;</p><p>import org.apache.commons.logging.Log;</p><p>import org.apache.commons.logging.LogFactory;</p><p>import org.apache.struts.action.Action;</p><p>import org.apache.struts.action.ActionForm;</p><p>import org.apache.struts.action.ActionForward;</p><p>import org.apache.struts.action.ActionMapping;</p><p>import org.apache.struts.action.ActionMessage;</p><p>import org.apache.struts.action.ActionMessages;</p><p>import com.ascent.webservice.struts.form.LoginForm;</p><p>import com.ascent.webservice.bean.jaws.LoginDao;</p><p>import com.ascent.webservice.bean.jaws.LoginDaoServiceLocator;</p><p>public class LoginAction extends Action</p><p>{</p><p>public ActionForward execute(ActionMapping mapping, ActionForm form,</p><p>HttpServletRequest request, HttpServletResponse response)</p><p>throws Exception {</p><p>LoginForm loginForm = (LoginForm) form;</p><p>String userName = loginForm.getLoginName();</p><p>String password = loginForm.getPassword();</p><p>LoginDaoServiceLocator loginDaoServiceLocator = new LoginDaoServiceLocator();</p><p>LoginDao loginDao=</p><p>loginDaoServiceLocator.getLoginDaoPort();</p><p>boolean isExists = loginDao.isLogin(userName, password);</p><p>if(isExists)</p><p>{</p><p>System.out.println("hello " + userName);</p><p>HttpSession session = request.getSession();</p><p>session.setAttribute("loginName", loginForm.getLoginName());</p><p>return mapping.findForward("success");</p><p>}</p><p>else</p><p>{</p><p>System.out.println("sorry " + userName + ", you are not user in the system!");</p><p>ActionMessages messages = new ActionMessages();</p><p>messages.add("login",new ActionMessage("error.login.jsp.loginName.exists"));</p><p>this.saveErrors(request, messages);</p><p>return mapping.getInputForward();</p><p>}</p><p>}</p><p>}</p><p>榪欓噷鐢ㄥ埌鐨凩oginDaoServiceLocator綾誨拰getLoginDaoPort()鏂規硶灝辨槸浣跨敤WSDL2Java鍛戒護鎶妛sdl鏂囦歡鐢熸垚鐨勭被銆傜幇鍦ㄥ氨鍙互鎵撳寘鎴愬彨employee鐨剋ar鏂囦歡錛岃繍琛屽畠銆傝嚦姝わ紝浣犱究鍙互鍦ㄦ祻瑙堝櫒涓緭鍏?a href="http://localhost:8080/employee/login.jsp">http://localhost:8080/employee/login.jsp</a>錛岃繍琛屼綘榪欎釜SOA鐨勫簲鐢ㄤ簡銆傚鏋滄槸鎶婃湇鍔″櫒绔儴緗插埌鍒殑鏈哄櫒涓婏紝鍙鎶妉ocalhost鏀逛負鐩稿簲鐨刬p灝卞彲浠ヤ簡銆?/p><p>灝忕粨<br />鏈珷棣栧厛浠嬬粛浜嗙洰鍓嶄竴涓墠娌挎妧鏈細Web Services鍜岄潰鍚戞湇鍔$殑杞歡鏋舵瀯錛圫ervice Oriented Architecture錛岀畝縐癝OA錛夈傚湪鐞嗚В浜哤eb Services鍘熺悊涔嬪悗錛?鎺ヤ笅鏉ユ垜浠瑙d簡濡備綍浣跨敤J2EE鍜孍JB3.0鏉ュ疄鐜癢eb Services銆?br /></p><p> </p></span><img src ="http://www.tkk7.com/mlzry0612/aggbug/357633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/mlzry0612/" target="_blank">Daniel</a> 2011-08-31 13:25 <a href="http://www.tkk7.com/mlzry0612/articles/357633.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Difference Between RPC and Document Style WSDLhttp://www.tkk7.com/mlzry0612/articles/357632.htmlDanielDanielWed, 31 Aug 2011 05:24:00 GMThttp://www.tkk7.com/mlzry0612/articles/357632.htmlhttp://www.tkk7.com/mlzry0612/comments/357632.htmlhttp://www.tkk7.com/mlzry0612/articles/357632.html#Feedback0http://www.tkk7.com/mlzry0612/comments/commentRss/357632.htmlhttp://www.tkk7.com/mlzry0612/services/trackbacks/357632.html

rpc鍜宒ocument鐨勫尯鍒?/span>  

2008-10-24 18:48:07|  鍒嗙被錛?/span> webservice|瀛楀彿 璁㈤槄

 

緲昏瘧鑷?The Difference Between RPC and Document Style WSDL

rpc鍜宒ocument鍒板簳鏄粈涔堟剰鎬濓紵浠栦滑濡備綍鍚?encoded/literal"鐩稿叧鑱旓紵浜岃呯殑鍐茬獊鏉ヨ嚜鍝噷錛?/p>

binding鐨剆tyle鍜寀se

閫氬父鎯呭喌涓嬶紝web鏈嶅姟鏄敱涓涓獁adl鏂囦歡鏉ユ弿榪扮殑鐨勩傚湪榪欎釜鏂囦歡涓紝鎶借薄鐨勬弿榪版墍鏀寔鐨剋eb鏈嶅姟鎿嶄綔鍜屾秷鎭紝鐒跺悗鍏寵仈鍒頒竴涓叿浣撶殑緗?/p>

緇滄瓏鎭拰娑堟伅鏍煎紡銆傚吀鍨嬬殑wsdl鏂囦歡鐢辮繖涓嚑涓厓绱犵粍鎴?tyoes,message.porttype鐢ㄦ潵鎻忚堪鎶借薄鐨勫畾涔?biding鍜宻ervice鎸囧畾鍏蜂綋鐨勫疄

鐜般傛墍鏈夌殑榪欎簺鍏冪礌鍖呰鍦╠efinitions鍏冪礌涓?/p>

鍦╞inding鍏冪礌涓紝rpc鍜宒ocument鏄渶鍊煎緱鎴戜滑鍏蟲敞鐨勫厓绱犮倃sdl 鐨?binding鎻忚堪浜嗗浣曞皢service鍏寵仈鍒版秷鎭崗璁紱榪欎簺娑堟伅鍗忚鏄?/p>

http錛宮ime錛宻oap涓殑浠繪剰涓縐嶃備笉榪囷紝瀹為檯涓紝soap鏄渶甯哥敤鐨勫崗璁紱rpc鍜宒ocument鐨勫尯鍒篃鏄湪soap鐨勪笅鐨勫尯鍒紙it is SOAP that

the RPC/document distinction refers to錛夈傞氬父http(s)鏄紶杈搒oap娑堟伅鐨勫崗璁?/p>

<wsdl:binding>鍏冪礌鍖呭惈涓瀵瑰弬鏁幫紝style(rpc|document)鍜寀se(encoded|literal)錛屼粬淇╀細褰卞搷鍒皊oap娑堟伅鐨勬牸寮?浠栦滑鐨勪嬌鐢ㄦ柟寮忓涓?/p>

錛?/p>

<wsdl:binding name="Config1Binding" type="prt0:CreditLimitLocalWebServiceVi_Document">

    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

     <wsdl:operation name="creditLimitCheck">

        <soap:operation soapAction="" />

         <wsdl:input>

            <soap:body use="literal" parts="parameters" />

         </wsdl:input>

        <wsdl:output>

            <soap:body use="literal" />

         </wsdl:output>

</wsdl:operation>

</wsdl:binding>

style灞炴?

wsdl1.1瑕佹眰binding鐨剆tyle瑕佷箞鏄痳pc瑕佷箞鏄痙oucment銆傝繖涓夋嫨涓庡浣曠粍緇噑oap鐨勮礋鑽風浉鍏熾備笅闈㈡槸鍒嗗埆浠栦滑濡備綍褰卞搷<soap:body>鍐?/p>

瀹圭殑緇嗚妭銆?/p>

document錛?lt;soap:body>鐨勫唴瀹圭敱瀹氫箟鍦?lt;wsdl:type>涓殑xml妯″紡鎸囧畾銆備粬涓嶉渶瑕侀伒寰壒瀹氱殑soap瑙勮寖銆傜畝璦涔嬶紝soap娑堟伅鏄氳繃

<soap:body>涓殑document鍙戦佸嚭鍘伙紝鑰屾病鏈夐澶栫殑瑕侀伒寰殑鏍煎紡瑙勫垯銆俤ocument style鏄竴縐嶉粯璁ょ殑閫夋嫨銆?/p>

rpc錛?<soap:body>鍏冪礌鐨勭粨鏋勯渶瑕侀伒寰壒瀹氱殑瑙勫垯錛坰oap1.1瑙勮寖絎?閮ㄥ垎鏈夌粏鑺傦級銆傛牴鎹繖浜涜鍒欙紝<soap:body>鍙互鍖呭惈鍞竴涓涓厓绱?/p>

錛岃繖涓厓绱犲湪operation鍚庤鍛藉悕錛屾墍鏈夌殑鍙傛暟閮藉繀欏誨啓鎴愯繖涓厓绱犵殑瀛愬厓绱犮?/p>

鍥犱負鍙互鑷敱鐨勯夋嫨鍝娑堟伅鏍煎紡錛岄伒寰猟ocument鏍煎紡鐨剆oap娑堟伅鐪嬩笂鍘誨緢鍍弐pc鏍煎紡銆?/p>

鐜板湪錛屽喅瀹氭х殑闂鏄細閫夋嫨鍏朵腑浠繪剰涓涓夐」鍚庣殑緇撴灉鏄粈涔堟牱錛熶負浣曡閫夋嫨rpc鎴栬卍ocument錛熷緢澶氭儏鍐典笅錛岄夋嫨浠栦滑鍚庯紝soap娑堟伅

鐨勬牸寮忕湅璧鋒潵寰堢浉鍍忥紝閭d箞涓轟粈涔堣繕瑕佹彁渚涜繖縐嶉夋嫨鍛紵鍘熷洜瑕佷粠soap鏍囧噯鍖栫殑鍘嗙▼涓鎵俱?/p>

use灞炴?/p>

榪欎釜灞炴ф寚瀹氫簡soap娑堟伅鐨勭紪鐮佽鍒欍備粬鍚屾牱鍦?lt;wsdl:binding>鍏冪礌涓畬鎴愩備粬鐨勫間負encoded鎴栬卨iteral.

浠栧紩鐢ㄤ簡涓緋誨垪瑙勫垯錛宻oap瀹㈡埛绔拰soap鏈嶅姟绔兘閬靛驚榪欎簺瑙勫垯浠ヨВ閲?lt;body>鍏冪礌涓殑鍐呭銆?/p>

use="literal" 鎰忓懗鐫type瀹氫箟閬靛驚xml妯″紡瀹氫箟

use="encoded" 鍙傝儀ml涓凡鏈夌殑搴旂敤鏁版嵁錛岄氬父鎸囩殑鏄痵oap1.1瑙勮寖涓殑soap緙栫爜瑙勫垯銆傚鏋滄枃妗d腑娌℃湁鑷畾涔夋暟鎹紝灝卞彲浠ラ夋嫨

encoded銆?/p>

闄勬枃绔犲叏鏂囷細

The Difference Between RPC and Document Style WSDL

Summary

RPC style and document style are catchphrases frequently heard in the context of web services and the SOAP protocol. What exactly do they mean? How do they relate to the pair of terms "encoded/literal"? Where does the confusion about these terms come from? This article describes the WSDL binding style and use attributes.

By Susanne Rothaug

20 Nov 2004

Binding Style and Use

A web service is usually described by a WSDL (Web Services Description Language) document. In this document, the supported web service operations and messages are described abstractly and then bound to a concrete network protocol and message format. A typical WSDL document consists of the following elements: "types," "message," and "portType" for the abstract definitions; "binding" and "service" for the concrete specification. All of these elements are wrapped inside a "definitions" element.

In the context of RPC and document style, it is the binding element that we need to take a closer look at. A WSDL binding describes how the service is bound to a messaging protocol, either HTTP GET/POST, MIME, or SOAP. In practice, SOAP is the most universally used protocol; it is SOAP that the RPC/document distinction refers to. Usually HTTP(S) is used as transport protocol for the SOAP message – "SOAP over HTTP(S)."

The <wsdl:binding> element of the WSDL contains a pair of parameters that influence the form of the resulting SOAP messages: binding style (RPC or document) and use (encoded or literal). See how style and use are defined in the WSDL fragment below: <wsdl:binding name="Config1Binding" type="prt0:CreditLimitLocalWebServiceVi_Document">     <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />      <wsdl:operation name="creditLimitCheck">         <soap:operation soapAction="" />          <wsdl:input>             <soap:body use="literal" parts="parameters" />          </wsdl:input>         <wsdl:output>             <soap:body use="literal" />          </wsdl:output> </wsdl:operation> </wsdl:binding>

The "Style" Attribute

WSDL 1.1 specifies the style of the binding as either RPC or document. This choice corresponds to how the SOAP payload - i.e., how the contents of the <soap:Body> element - can be structured. Here are some details of how each style affects the contents of <soap:Body>:

  • Document: the content of <soap:Body> is specified by XML Schema defined in the <wsdl:type> section. It does not need to follow specific SOAP conventions. In short, the SOAP message is sent as one "document" in the <soap:Body> element without additional formatting rules having to be considered. Document style is the default choice.

  • RPC: The structure of an RPC style <soap:Body> element needs to comply with the rules specified in detail in Section 7 of the SOAP 1.1 specification. According to these rules, <soap:Body> may contain only one element that is named after the operation, and all parameters must be represented as sub-elements of this wrapper element.

As a consequence of the freedom of choice that the document style offers, the SOAP messages conforming to a document style WSDL may look exactly the same as the RPC equivalent.

The decisive question now is: What are the consequences of choosing one option or another? Why choose RPC over document, or document over RPC? In many cases, the SOAP messages generated from either RPC or document style WSDLs look exactly the same - so why offer the choice at all? The reason may be found in the history of the SOAP standard.

SOAP has its roots in synchronous remote procedure calls over HTTP and the appearance of the document accordingly followed these conventions. Later, it was seen as a simplification to use arbitrary XML in the SOAP body without adhering to conventions. This preference is reflected in the document style WSDL documents. So far, both options are represented in the WSDL specification and the choice of one or the other is mainly a question of personal taste since most SOAP clients today accept both versions.

The "Use" Attribute

The use attribute specifies the encoding rules of the SOAP message. This is also done within the <wsdl:binding> element, as seen in the example above. The value can be encoded or literal. It refers to the serialization rules followed by the SOAP client and the SOAP server to interpret the contents of the <Body> element in the SOAP payload.

  • use="literal" means that the type definitions literally follow an XML schema definition.

  • use="encoded" refers to the representation of application data in XML, usually according to the SOAP encoding rules of the SOAP 1.1 specification. The rules to encode and interpret a SOAP body are in a URL specified by the encodingStyle attribute. Encoded is the appropriate choice where non-treelike structures are concerned, because all others can be perfectly described in XML Schema.

The combination of the style and use attributes leads to four possible style/use pairs:

  1. RPC/encoded

  2. RPC/literal

  3. document/encoded

  4. document/literal

Some of these combinations are rarely used in practice, such as document/encoded. In general, the literal use is gaining importance, and as far as RPC/encoded is concerned, the Web Services Interoperability Organization (WS-I) in its Basic Profile Version 1.0a of August 2003 ruled out the use of SOAP encoding with web services. Document/literal and RPC/literal will be the only allowed style/use combinations in the future.



Daniel 2011-08-31 13:24 鍙戣〃璇勮
]]>
Three ways to convert TIF to JPG with JAIhttp://www.tkk7.com/mlzry0612/articles/351208.htmlDanielDanielFri, 27 May 2011 14:39:00 GMThttp://www.tkk7.com/mlzry0612/articles/351208.htmlhttp://www.tkk7.com/mlzry0612/comments/351208.htmlhttp://www.tkk7.com/mlzry0612/articles/351208.html#Feedback0http://www.tkk7.com/mlzry0612/comments/commentRss/351208.htmlhttp://www.tkk7.com/mlzry0612/services/trackbacks/351208.htmlThe project requirements: Should convert TIF into JPG with JAVA, But seems only IMAGEIO can't support TIF.
So should use JAI, Java Advantage Image jars.

JAI api download page: http://download.java.net/media/jai/builds/release/1_1_3/

J
AI API document page: http://download.oracle.com/docs/cd/E17802_01/products/products/java-media/jai/forDevelopers/jai-apidocs/index.html



C
ode as below:
package com.ebay.test1;
import java.awt.image.RenderedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.media.jai.JAI;
import javax.media.jai.RenderedOp;
import org.junit.Test;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.ImageEncoder;
import com.sun.media.jai.codec.JPEGEncodeParam;
public class Snippet {
@Test
public void testTif2JPG2(){
try{
String filename =  "F:\\Downloads\\CCITT_2.TIF";
String jpegFileName = "F:\\Downloads\\CCITT_2.JPG";
RenderedOp source = JAI.create("fileload", filename);
FileOutputStream stream = null;
stream = new FileOutputStream(jpegFileName );
com.sun.media.jai.codec.JPEGEncodeParam JPEGparam = new
com.sun.media.jai.codec.JPEGEncodeParam();
ImageEncoder encoder =
ImageCodec.createImageEncoder("jpeg",stream,JPEGparam);
encoder.encode(source);
}catch(Exception e){
e.printStackTrace();
}
}
@Test
public void testTif2JPG3(){
try{
String filename =  "F:\\Downloads\\CCITT_2.TIF";
String jpegFileName = "F:\\Downloads\\CCITT_2.JPG";
FileOutputStream stream = null;
stream = new FileOutputStream(jpegFileName );
byte[] b = getBytesFromFile(new File(filename));
InputStream bais = new ByteArrayInputStream(b);
ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", bais, null);
            RenderedImage ri = decoder.decodeAsRenderedImage();
// RenderedOp source = JAI.create("TIFF", bais);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
JPEGEncodeParam JPEGparam = new JPEGEncodeParam();
JPEGparam.setQuality(Float.MIN_VALUE);
ImageEncoder encoder = ImageCodec.createImageEncoder("jpeg",baos,JPEGparam);
encoder.encode(ri);
byte[] byteArray = baos.toByteArray();
FileOutputStream fos = new FileOutputStream(new File(jpegFileName));
fos.write(byteArray);
}catch(Exception e){
e.printStackTrace();
}
}
 @Test
public void testTif2JPG4(){
try{
String filename =  "F:\\Downloads\\CCITT_2.TIF";
String jpegFileName = "F:\\Downloads\\CCITT_2.JPG";
FileOutputStream stream = null;
stream = new FileOutputStream(jpegFileName );
byte[] b = getBytesFromFile(new File(filename));
InputStream bais = new ByteArrayInputStream(b);
            ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", bais, null);
            RenderedImage ri = decoder.decodeAsRenderedImage();
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            ImageIO.write(ri, "JPEG", outputStream);
            stream.write(outputStream.toByteArray());
}catch(Exception e){
e.printStackTrace();
}
}
// Returns the contents of the file in a byte array.
    public static byte[] getBytesFromFile(File file) throws IOException {
        InputStream is = new FileInputStream(file);
    
        // Get the size of the file
        long length = file.length();
    
        // You cannot create an array using a long type.
        // It needs to be an int type.
        // Before converting to an int type, check
        // to ensure that file is not larger than Integer.MAX_VALUE.
        if (length > Integer.MAX_VALUE) {
        throw new IllegalArgumentException("File is too big, can't support.");
        }
    
        // Create the byte array to hold the data
        byte[] bytes = new byte[(int)length];
    
        // Read in the bytes
        int offset = 0;
        int numRead = 0;
        while (offset < bytes.length
               && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
            offset += numRead;
        }
    
        // Ensure all the bytes have been read in
        if (offset < bytes.length) {
            throw new IOException("Could not completely read file "+file.getName());
        }
    
        // Close the input stream and return bytes
        is.close();
        return bytes;
    }
}


Daniel 2011-05-27 22:39 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 99在线视频免费观看视频| 99久久99热精品免费观看国产| 全亚洲最新黄色特级网站| 国产免费黄色无码视频| 亚洲成年人在线观看| 亚洲一级毛片免费在线观看| 亚洲a无码综合a国产av中文| 久久精品国产亚洲网站| 毛片免费在线观看网站| 美女被免费网站91色| 精品97国产免费人成视频| 丝袜足液精子免费视频| 亚洲午夜无码毛片av久久京东热| 亚洲偷自拍拍综合网| 美女视频黄是免费的网址| 国产一级高青免费| 国产成人无码区免费内射一片色欲 | 亚洲妇女无套内射精| 亚洲欧洲∨国产一区二区三区 | 国产精品亚洲二区在线| 亚洲成人黄色网址| 亚洲国产成人VA在线观看| 成人毛片视频免费网站观看| 免费看美女让人桶尿口| 在线观看免费黄色网址| 日韩亚洲人成网站| 五月天国产成人AV免费观看| 精品亚洲AV无码一区二区三区| 国产国拍精品亚洲AV片| 亚洲AV无码之日韩精品| 怡红院亚洲怡红院首页| 亚洲网址在线观看你懂的| 亚洲精品无码永久中文字幕 | 久久久国产精品无码免费专区| 特级毛片aaaa免费观看| 91视频免费观看| 亚洲免费视频观看| 日本免费人成视频播放| 女人让男人免费桶爽30分钟| 精品免费久久久久久久| 日韩一区二区在线免费观看|