锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 2.1-2 鍏堢粰鍑轟功涓奿nsertion-sort鐨凜婧愪唬鐮佸惂錛岀劧鍚庡啀緇欏嚭鎸夌収闈炲崌搴忕殑浠g爜錛?/p> 璇炬湰涓?闈為檷搴忕殑)insertion-sort浠g爜錛?/p> 鍦ㄨ繖棰樹腑錛屽彧瑕佽闈為檷搴忔敼鎴愰潪鍗囧簭鎺掑簭錛屾墍浠ユ敼鍚庝唬鐮佸涓嬶細 2.1-3榪欓緇欏嚭浼唬鐮侊細 2.1-4鐩存帴緇欏嚭浠g爜錛?/p>
]]>
]]>
浼樺寲灞忛殰 (Optimization Barrier)
緙栬瘧鍣ㄧ紪璇戞簮浠g爜鏃訛紝浼氬皢婧愪唬鐮佽繘琛屼紭鍖栵紝灝嗘簮浠g爜鐨勬寚浠よ繘琛岄噸鎺掑簭錛屼互閫傚悎浜嶤PU鐨勫茍琛屾墽琛屻傜劧鑰岋紝鍐呮牳鍚屾蹇呴』閬垮厤鎸囦護閲嶆柊鎺掑簭錛屼紭鍖栧睆闅滐紙Optimization barrier錛夐伩鍏嶇紪璇戝櫒鐨勯噸鎺掑簭浼樺寲鎿嶄綔錛屼繚璇佺紪璇戠▼搴忔椂鍦ㄤ紭鍖栧睆闅滀箣鍓嶇殑鎸囦護涓嶄細鍦ㄤ紭鍖栧睆闅滀箣鍚庢墽琛屻?br style="font-family: song, Verdana; font-size: 12px; " />
Linux鐢ㄥ畯barrier瀹炵幇浼樺寲灞忛殰錛実cc緙栬瘧鍣ㄧ殑浼樺寲灞忛殰瀹忓畾涔夊垪鍑哄涓嬶紙鍦╥nclude/linux/compiler-gcc.h涓級錛?nbsp;
#define barrier() __asm__ __volatile__("": : :"memory")
涓婅堪瀹氫箟涓紝“__asm__”琛ㄧず鎻掑叆浜嗘眹緙栬璦紼嬪簭錛?#8220;__volatile__”琛ㄧず闃繪緙栬瘧鍣ㄥ璇ュ艱繘琛屼紭鍖栵紝紜繚鍙橀噺浣跨敤浜嗙敤鎴峰畾涔夌殑綺劇‘鍦板潃錛岃屼笉鏄鏈夊悓涓淇℃伅鐨勪竴浜涘埆鍚嶃?#8220;memory”琛ㄧず鎸囦護淇敼浜嗗唴瀛樺崟鍏冦?/span>
鍐呭瓨灞忛殰 (Memory Barrier)
杞歡鍙氳繃璇誨啓灞忛殰寮哄埗鍐呭瓨璁塊棶嬈″簭銆傝鍐欏睆闅滃儚涓鍫靛錛屾墍鏈夊湪璁劇疆璇誨啓灞忛殰涔嬪墠鍙戣搗鐨勫唴瀛樿闂紝蹇呴』鍏堜簬鍦ㄨ緗睆闅滀箣鍚庡彂璧風殑鍐呭瓨璁塊棶涔嬪墠瀹屾垚錛岀‘淇濆唴瀛樿闂寜紼嬪簭鐨勯『搴忓畬鎴愩?br style="font-family: song, Verdana; font-size: 12px; " />
璇誨啓灞忛殰閫氳繃澶勭悊鍣ㄦ瀯鏋剁殑鐗規畩鎸囦護mfence錛堝唴瀛樺睆闅滐級銆乴fence錛堣灞忛殰錛夊拰sfence錛堝啓灞忛殰錛夊畬鎴愶紝瑙併妜86-64鏋勬灦瑙勮寖銆嬩竴绔犮傚彟澶栵紝鍦▁86-64澶勭悊鍣ㄤ腑錛屽紜歡榪涜鎿嶄綔鐨勬眹緙栬璦鎸囦護鏄?#8220;涓茶鐨?#8221;錛屼篃鍏鋒湁鍐呭瓨灞忛殰鐨勪綔鐢紝濡傦細瀵笽/O绔彛榪涜鎿嶄綔鐨勬墍鏈夋寚浠ゃ佸甫lock鍓嶇紑鐨勬寚浠や互鍙婂啓鎺у埗瀵勫瓨鍣ㄣ佺郴緇熷瘎瀛樺櫒鎴栬皟璇曞瘎瀛樺櫒鐨勬墍鏈夋寚浠わ紙濡傦細cli鍜宻ti錛夈?br style="font-family: song, Verdana; font-size: 12px; " />
Linux鍐呮牳鎻愪緵鐨勫唴瀛樺睆闅淎PI鍑芥暟璇存槑濡傝〃2銆傚唴瀛樺睆闅滃彲鐢ㄤ簬澶氬鐞嗗櫒鍜屽崟澶勭悊鍣ㄧ郴緇燂紝濡傛灉浠呯敤浜庡澶勭悊鍣ㄧ郴緇燂紝灝變嬌鐢╯mp_xxx鍑芥暟錛屽湪鍗曞鐞嗗櫒緋葷粺涓婏紝瀹冧滑浠涔堥兘涓嶈銆?/span>
鏍規嵁緗戜笂鐨勮祫鏂欏仛浜涙暣鐞?/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>
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();
}
}
瀹㈡埛绔?/p>
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();
}
}
}
灝忕粨錛氫箣鍓嶅Selector娉ㄥ唽浜嬩歡鍜孲ocketChannel鏈夌偣灝忓洶鎯戙係ocketChannel灝卞儚涓鏍規按綆★紝褰撶洃鍚埌鍐欎簨浠舵椂錛屽氨寰綆¢亾鍐欐暟鎹紱褰撶洃鍚埌璇諱簨浠舵椂錛屽氨浠庣閬撹鍑烘暟鎹?/p>
14.1 Web Services鍜岄潰鍚戞湇鍔$殑杞歡鏋舵瀯錛圫ervice Oriented Architecture錛岀畝縐癝OA錛夋榪幫細
鍦ㄦ渶鏂癑ava寮鍙戜笘鐣岄噷錛屾垜浠粡甯鎬細閬囧埌榪欐牱涓涓悕璇嶏細Web Services錛圵eb鏈嶅姟錛夈傚悓鏃惰繕浼氬彂鐜幫紝涓庤繖涓悕璇嶅悓鏃跺嚭鐜扮殑澶氭槸鍚勫ぇ涓繪祦鎶鏈緵搴斿晢錛屽悇澶ф妧鏈緵搴斿晢鏃犱竴涓嶅湪鍏蟲敞榪欎竴棰嗗煙鐨勫彂灞曘備粠Microsoft鐨?NET鏋舵瀯錛屽埌SUN鐨凷UN ONE錛屼互鍙奍BM鐨刉eb Services錛岄兘浣撶幇浜嗚繖浜涢噸閲忕駭鐨勬妧鏈彁渚涜呭Web Services鐨勬帹宕囦笌閲嶈銆?/p>
鐢靛瓙鍟嗗姟鐨勫彂灞曚績榪涗簡Web Services鐨勫彂灞曘俉eb鏈嶅姟鍙互浣垮叕鍙擱檷浣庤繘琛岀數瀛愬晢鍔$殑鎴愭湰錛屾洿蹇湴閮ㄧ講瑙e喅鏂規浠ュ強寮鎷撴洿澶氱殑鏂版満閬囥俉eb鏈嶅姟浣垮簲鐢ㄧ▼搴忕殑闆嗘垚姣斾互鍓嶆洿蹇佹洿瀹規槗鑰屼笖鏇翠究瀹溿傚畠鏇存敞閲嶆湇鍔¤涔夎屼笉閭d箞娉ㄩ噸緗戠粶鍗忚璇箟鐨勬秷鎭紝浠庤屽疄鐜頒簡涓氬姟鍔熻兘鐨勬澗鏁h﹀悎銆傝繖浜涚壒鎬у浜庡湪浼佷笟涔嬮棿鍜屼紒涓氬唴閮ㄩ氳繃web榪炴帴涓氬姟鍔熻兘鏄潪甯哥悊鎯崇殑銆傚畠鎻愪緵浜嗕竴鑷村寲錛圲niform錛夌殑緙栫▼妯″瀷錛屼粠鑰屽湪浼佷笟鍐呭閮藉彲浠ュ埄鐢ㄩ氱敤鐨勫熀紜璁炬柦騫朵互涓縐嶉氱敤鐨勬柟娉曡繘琛屽簲鐢ㄧ▼搴忛泦鎴愩?/p>
瑕佺悊瑙eb Services, 棣栧厛闇瑕佽璇嗛潰鍚戞湇鍔$殑杞歡鏋舵瀯錛圫ervice Oriented Architecture錛岀畝縐癝OA錛夛紝Web Services鏄疭OA鏋舵瀯緋葷粺鐨勪竴涓疄渚嬨?/p>
14.1.1闈㈠悜鏈嶅姟鐨勮蔣浠舵灦鏋勶紙SOA錛?/p>
1. 闈㈠悜鏈嶅姟涓殑鍩烘湰姒傚康
鍦ㄩ潰鍚戞湇鍔$殑鏋舵瀯涓寘鍚竴浜涘熀鏈殑姒傚康錛岄忚繃榪欎簺鍩烘湰姒傚康鍙互榪涗竴姝ヤ簡瑙i潰鍚戞湇鍔$殑鏋舵瀯銆?/p>
(1) 鏈嶅姟鐨勬蹇?/p>
鍦⊿OA涓殑鏈嶅姟鏄寚鑳藉澶勭悊涓浜涗換鍔¤繃紼嬬殑鍔ㄤ綔鐨勬娊璞℃蹇碉紝榪欎簺鏈嶅姟鍙互琚弿榪幫紝鍙互琚彂鐜幫紝鍙互鐢辨湇鍔′唬鐞嗚礋璐e悜璇鋒眰鑰呮彁渚涙湇鍔″茍緇欏嚭緇撴灉銆備唬鐞嗘槸鎸囪姹傛垨鑰呮彁渚涙湇鍔$殑浜烘墍浣跨敤鐨勮蔣浠跺伐鍏鳳紝浜洪氳繃浠g悊榪涜浜や簰鎿嶄綔銆?/p>
(2) 娑堟伅鐨勬蹇?/p>
鏈嶅姟浠g悊涔嬮棿闇瑕侀氳繃娑堟伅鐨勪紶閫掕繘琛屼氦浜掓搷浣滐紝娑堟伅鐨勫唴瀹瑰惈鏈変竴瀹氱殑璇箟鍜屾暟鎹紝娑堟伅浼犺緭闇瑕佷笌鏌愪釜閫氫俊鍗忚鐩哥粦瀹氭墠鑳藉瀹炵幇銆?/p>
(3) 鏈嶅姟鐨勬弿榪板拰鍙戠幇
浼楀鐨勬湇鍔$粍鎴愪竴涓紑鏀劇郴緇燂紝闄や簡闇瑕佹彁渚涗俊鎭氦浜掓柟寮忎互澶栵紝榪橀渶瑕佹彁渚涚浉浜掍簡瑙g殑鏈哄埗錛岃繖灝遍渶瑕佹彁渚涙弿榪板拰鍙戠幇鐨勬柟寮忋備唬鐞嗗彲浠ラ氳繃鏈嶅姟鐨勬弿榪版潵浜嗚В涓涓湇鍔$殑鍐呭錛屽寘鎷嬌鐢ㄨ繖涓湇鍔$殑鎶鏈俊鎭佽闂繖涓湇鍔$殑鍦板潃淇℃伅絳夊唴瀹廣傚綋鏂扮殑鏈嶅姟琚姇鍏ュ埌緋葷粺涔嬩腑鍚庯紝瀹冮渶瑕佽娉ㄥ唽錛屽茍涓旇鑳藉琚彂鐜幫紝浣垮畠鍙互琚埄鐢ㄨ搗鏉ャ?/p>
2.涓轟粈涔堥渶瑕侀潰鍚戞湇鍔$殑杞歡
鐢變簬杞歡闇姹傜殑鎵╁ぇ錛岃蔣浠剁郴緇熷彉寰楄秺鏉ヨ秺澶嶆潅銆傞潰瀵瑰鏉傜殑緋葷粺璧勬簮錛屾垜浠渶瑕佷竴縐嶆洿鍔犲悎鐞嗙殑鏂瑰紡灝嗕笉鍚岀被鍨嬨佷笉鍚屼綅緗殑瀛愮郴緇熸湁鍔涘湴緇撳悎璧鋒潵錛岃繖縐嶆暣鍚堝茍涓嶆槸灝嗗畠浠箣闂寸粦瀹氬緱鏇村姞绱у瘑錛岃屾槸鍒╃敤鏇村姞鏉炬暎鐨勬柟寮忔潵寤虹珛榪欎釜緋葷粺銆?/p>
SOA閫氳繃鏉炬暎鐨勬柟寮忓皢鍒嗗竷寮忕殑杞歡妯″潡緇撳悎璧鋒潵錛屼笌鏃ф湁緋葷粺闆嗘垚鐩告瘮鏈夌潃鏄庢樉鐨勪紭鍔褲傚浜庢湇鍔$殑浣跨敤鑰呮潵璇達紝鍙互綆鍗曞湴閫氳繃鏈嶅姟鐨勬弿榪版潵鑾峰彇鏈嶅姟錛岀郴緇熷悇閮ㄥ垎涔嬮棿涓嶅繀涓轟簡鏌愪竴閮ㄥ垎鐨勫崌綰ц屾敼鍙橈紝鍦ㄦ湇鍔$殑榪囩▼涓笉鍚岀殑杞歡妯″潡鍙互鍏呭綋涓嶅悓鐨勮鑹詫紝浠庤屾瀯鎴愭暣涓郴緇熺殑宸ヤ綔浣撶郴銆?/p>
鍦⊿OA褰撲腑錛屼竴涓湇鍔′唬琛ㄧ殑鏄竴涓敱鏈嶅姟鎻愪緵鑰呭悜鏈嶅姟璇鋒眰鑰呭彂甯冪殑涓浜涘鐞嗚繃紼嬶紝榪欎釜榪囩▼鍦ㄨ璋冪敤涔嬪悗錛岃幏寰楁湇鍔¤姹傝呮墍闇瑕佺殑涓涓粨鏋溿傚湪榪欎釜榪囩▼涓紝鏈嶅姟璇鋒眰鑰呭彲浠ュ悜浠諱綍鑳藉鎻愪緵姝ら」鏈嶅姟鐨勬湇鍔℃彁渚涜呮潵璇鋒眰鏈嶅姟錛屾湇鍔″疄鐜扮殑榪囩▼瀵逛簬鏈嶅姟璇鋒眰鑰呮潵璇存槸閫忔槑鐨勩?/p>
闅忕潃緋葷粺鍒嗗竷寮忓拰澶氱緇撴瀯澶嶅悎紼嬪害鐨勬彁楂橈紝SOA鐨勫法澶т紭鍔垮皢榪涗竴姝ヨ鎸栨帢銆?/p>
(1) 寤虹珛鏉炬暎鑰﹀悎鐨勭郴緇?/p>
鏉炬暎鑰﹀悎緋葷粺鐨勪紭鐐瑰凡緇忚涓氬唴鍏呭垎鍦拌鍙紝SOA浣滀負涓縐嶅垎甯冨紡鐨勭郴緇燂紝瀹冨疄鐜頒簡涓縐嶆湇鍔″拰鎻忚堪絳夋蹇電浉緇撳悎鐨勬灦鏋勩?/p>
SOA涓殑鏈嶅姟鍦⊿OA鏋舵瀯涓鏍囧噯鐨勬弿榪拌璦鎵鎻忚堪錛屽茍閫氳繃涓庢煇縐嶄紶杈撳崗璁殑緇戝畾鏉ュ疄鐜扮浉浜掍箣闂寸殑浜や簰銆傝繖縐嶅熀浜庢湇鍔$殑鏋舵瀯浣挎暣涓郴緇熸垚涓轟竴涓澗鏁h﹀悎鐨勭粨鏋勶紝鍒╃敤涓庨氫俊鍗忚鐨勭粦瀹氬皢鍒嗗竷寮忕郴緇熶腑鐨勬墍鏈夐儴鍒嗚繛鎺ヨ搗鏉ワ紝鍒╃敤璇箟鍜屾湇鍔$殑鎻忚堪錛屽湪浠g悊涔嬮棿榪涜浜や簰銆?/p>
(2) 鎻愰珮杞歡鐨勯噸鐢ㄦ?/p>
闈㈠悜鏈嶅姟鐨勬灦鏋勮繕鎻愰珮浜嗗杞歡鐨勯噸鐢ㄦс備笌緇勪歡鏂瑰紡鐩告瘮錛孲OA緋葷粺涓殑鍗曚釜鏈嶅姟鐨勬敼鍙樹笉浼氬鍏朵粬閮ㄥ垎閫犳垚涓ラ噸鐨勫獎鍝嶏紝鍚屾椂鍒╃敤鏈嶅姟鐨勬弿榪頒嬌鍚屼竴鏈嶅姟鍙互鍏呭垎鍦拌鍏朵粬緋葷粺鎵璋冪敤錛屽悇涓郴緇熶箣闂村艦鎴愪簡楂樺害鐨勯噸鐢ㄦс?/p>
鐜板湪姝e湪琚箍娉涗嬌鐢ㄧ殑涓浜涙湇鍔★紝姝e湪涓嶆柇鍦拌鍚勪釜緋葷粺鎵閲嶇敤錛岄噸鐢ㄧ殑鏉′歡鍗佸垎綆鍗曪紝鍙浜嗚В鏈嶅姟鐨勬弿榪幫紝鎴栬呭彲浠ヨ闂埌鏈嶅姟鐨勬弿榪板湴鍧鍗沖彲銆備笌緇勪歡閲嶇敤鐩告瘮錛屾湇鍔$殑閲嶇敤榪樺叿鏈変笌瀹炵幇璇█鏃犲叧鐨勭壒鐐癸紝閲嶇敤鏈嶅姟鐨勫鎴風紼嬪簭涓嶉渶瑕佷嬌鐢ㄤ笌鏈嶅姟瀹炵幇閮ㄥ垎鍚屾牱鐨勫紑鍙戣璦錛屼竴鍒囦氦浜掔殑榪囩▼閮芥槸鍒╃敤涓庡疄鐜版棤鍏崇殑鏂瑰紡榪涜鐨勩?/p>
(3) 鎻愪緵鎸夐渶鏈嶅姟鐨勪唬鐮?/p>
闈㈠悜鏈嶅姟鐨勬灦鏋勪篃浣垮緱緋葷粺鐨勫疄鐜拌櫄鎷熷寲錛屽湪SOA鏋舵瀯涓殑璇鋒眰鍜屾彁渚涗箣闂翠氦浜掓垨鐩鎬簰浠g悊鐨勮繃紼嬩腑錛屽彲璁$畻鐨勪唬鐮佽祫婧愬垎甯冨湪鏉炬暎緇撴瀯涓殑鍚勪釜閮ㄥ垎涓婏紝褰撹姹傚彂鐢熸椂鎵嶈璋冪敤鍜屾湇鍔★紝鎵鏈夎綆楄繃紼嬮兘鏄寜鐓ц姹傝呯殑闇姹傝繘琛岀殑銆傛湇鍔$殑瀵硅薄鍒嗕負鏈夌姸鎬佸拰鏃犵姸鎬佷袱縐嶆柟寮忔彁渚涙湇鍔★紝鎸夌収闇姹傛彁渚涙湇鍔★紝涔熷彲浠ュ埄鐢ㄧ紦鍐叉満鍒朵紭鍖栫郴緇熺殑緋葷粺銆?/p>
鎬諱箣錛孲OA浣夸唬鐮佺殑寮鍙戝彉寰楁洿鏈夋湇鍔$殑鐩殑鎬э紝浣垮紑鍙戞洿鍔犳湁鏁堝拰鍚堢悊銆?/p>
14.1.2 SOA涓?Web 2.0
鍙﹀錛屾垜浠ˉ鍏呬竴涓婼OA涓庣洰鍓嶅悓鏍風儹闂ㄧ殑Web 2.0鐨勫叧緋匯?/p>
瀹為檯涓奧eb 2.0 鍜孲OA鐨勬蹇靛湪寰堝ぇ紼嬪害涓婃槸鐩稿悓鐨勶紝鍙槸琚矇楗版垚涓鴻蔣浠剁殑涓嶅悓閮ㄥ垎錛堝鏋滅殑紜瓨鍦ㄤ笉鍚岀殑璇濓級錛屼篃灝辨槸璇碨OA鍜學eb 2.0鏈夊緢澶氶噸鍙犵殑涓滆タ錛屼緥濡傞兘鏄熀浜庤皟鐢紙invoke錛夌殑鏈嶅姟錛岄兘鑳藉瓨鍦ㄤ簬緗戠粶鐨勪換浣曚綅緗瓑絳夈?/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>
SOA鍜學eb 2.0涔嬮棿鏈夎澶氬叡鏈夌殑瑕佺礌錛?/p>
l 杞歡閲嶇粍
l 綆$悊
l 杞歡灝辨槸鏈嶅姟
l 搴旂敤灝辨槸騫沖彴
l 鏃犳剰璇嗙殑浣跨敤
l 寮鏀?/p>
l AJAX
l 浜掓搷浣滄?/p>
l 璐у竵鍖?/p>
l 瀹夊叏
l 緗戠粶瀵煎悜鏋舵瀯
鐗瑰埆瑕佽鐨勬槸錛屾渶鍚庝竴鏉$綉緇滃鍚戞灦鏋勬垨鑰匴eb Oriented Architecture錛圵OA錛夋槸鍏抽敭鐨勫唴瀹癸紝鏈緇堟湁鍙兘浼氬皢SOA鍜學eb 2.0鍚堜負涓浣撱?/p>
浜嗚В浜哠OA鍚庯紝 鎴戜滑鏉ヤ粙緇嶄粈涔堟槸Web Services銆俉eb Services鏄疭OA鏋舵瀯緋葷粺鐨勪竴涓疄渚嬨備粠鎶鏈搴︽潵璁詫紝Web Services鏄竴縐嶆柊鐨勬妧鏈灦鏋勩佹柊鐨勮蔣浠跺簲鐢ㄧ幆澧冦傚畠鐨勭郴緇熸灦鏋勫拰瀹炵幇鎶鏈畬鍏ㄧ戶鎵垮凡鏈夌殑鎶鏈紝鍙互璁や負Web Services鏄疘nternet鐨勪竴縐嶅歡浼革紝鏄幇鏈夌殑Internet闈㈠悜鏇村ソ鐨勪簰鎿嶄綔鑳藉姏鐨勪竴涓歡浼搞?/p>
14.2錛?Web Services鐨勬蹇?/p>
Web Services錛屼粠瀛楅潰涓婄悊瑙e氨鏄氳繃Web鎻愪緵鐨勬湇鍔°傛垜浠彲浠ョ悊瑙eb Services鏄嚜鍖呭惈鐨勩佹ā鍧楀寲鐨勫簲鐢ㄧ▼搴忥紝瀹冨彲浠ュ湪緗戠粶(閫氬父涓篧eb)涓鎻忚堪銆佸彂甯冦佹煡鎵句互鍙婅皟鐢紱涔熷彲浠ョ悊瑙eb Services鏄熀浜庣綉緇滅殑銆佸垎甯冨紡鐨勬ā鍧楀寲緇勪歡錛屽畠鎵ц鐗瑰畾鐨勪換鍔★紝閬靛畧鍏蜂綋鐨勬妧鏈鑼冿紝榪欎簺瑙勮寖浣垮緱Web Sevices鑳戒笌鍏朵粬鍏煎鐨勭粍浠惰繘琛屼簰鎿嶄綔錛涗篃鍙互榪欐牱鐞嗚В錛屾墍璋揥eb鏈嶅姟錛屽畠鏄寚鐢變紒涓氬彂甯冪殑瀹屾垚鍏剁壒鍒晢鍔¢渶姹傜殑鍦ㄧ嚎搴旂敤鏈嶅姟錛屽叾浠栧叕鍙告垨搴旂敤杞歡鑳藉閫氳繃Internet鏉ヨ闂茍浣跨敤榪欓」搴旂敤鏈嶅姟
瀵逛簬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>
浠庡閮ㄤ嬌鐢ㄨ呰搴﹁岃█錛學eb Services鏄竴縐嶉儴緗插湪Web涓婄殑瀵硅薄鍜岀粍浠訛紝鍏峰浠ヤ笅鐗瑰緛錛?/p>
.瀹屽ソ鐨勫皝瑁呮э細
Web鏈嶅姟鏃㈢劧鏄竴縐嶉儴緗插湪web涓婄殑瀵硅薄錛岃嚜鐒跺叿澶囧璞$殑鑹ソ灝佽鎬э紝瀵逛簬浣跨敤鑰呰岃█錛屼粬鑳戒笖浠呰兘鐪嬪埌璇ュ璞℃彁渚涚殑鍔熻兘鍒楄〃銆?/p>
.鏉炬暎鑰﹀悎
榪欎竴鐗瑰緛涔熸槸婧愪簬瀵硅薄錛忕粍浠舵妧鏈紝褰撲竴涓猈eb鏈嶅姟鐨勫疄鐜板彂鐢熷彉鏇寸殑鏃跺欙紝璋冪敤鑰呮槸涓嶄細鎰熷埌榪欎竴鐐圭殑錛屽浜庤皟鐢ㄨ呮潵璇達紝鍙Web鏈嶅姟鐨勮皟鐢ㄧ晫闈笉鍙橈紝Web鏈嶅姟瀹炵幇鐨勪換浣曞彉鏇村浠栦滑鏉ヨ閮芥槸閫忔槑鐨勶紝鐢氳嚦鏄綋Web鏈嶅姟鐨勫疄鐜板鉤鍙頒粠J2EE榪佺Щ鍒頒簡錛嶯ET鎴栬呮槸鐩稿弽鐨勮縼縐繪祦紼嬶紝鐢ㄦ埛閮藉彲浠ュ姝や竴鏃犳墍鐭ャ傚浜庢澗鏁h﹀悎鑰岃█錛屽挨鍏舵槸鍦↖nternet鐜涓嬬殑Web鏈嶅姟鑰岃█錛岄渶瑕佹湁涓縐嶉傚悎Internet鐜鐨勬秷鎭氦鎹㈠崗璁紝鑰孹ML錛廠OAP姝f槸鐩墠鏈涓洪傚悎鐨勬秷鎭氦鎹㈠崗璁?/p>
.浣跨敤鍗忚鐨勮鑼冩?/p>
榪欎竴鐗瑰緛浠庡璞¤屾潵錛屼絾鐩告瘮涓鑸璞★紝瀹冩洿鍔犺鑼冨寲鍜屾槗浜庣悊瑙c傞鍏堬紝浣滀負Web鏈嶅姟錛屽璞$晫闈㈡墍鎻愪緵鐨勫姛鑳藉簲褰撲嬌鐢ㄦ爣鍑嗙殑鎻忚堪璇█鏉ユ弿榪?姣斿WSDL)錛涘叾嬈★紝鐢辨爣鍑嗘弿榪拌璦鎻忚堪鐨勬湇鍔$晫闈㈠簲褰撴槸鑳藉琚彂鐜扮殑錛屽洜姝よ繖涓鎻忚堪鏂囨。闇瑕佽瀛樺偍鍦ㄧ鏈夌殑鎴栧叕鍏辯殑娉ㄥ唽搴撻噷闈€傚悓鏃訛紝浣跨敤鏍囧噯鎻忚堪璇█鎻忚堪鐨勪嬌鐢ㄥ崗綰﹀皢涓嶄粎浠呮槸鏈嶅姟鐣岄潰錛屽畠灝嗚寤朵幾鍒癢eb鏈嶅姟鐨勮仛鍚堛佽法Web鏈嶅姟鐨勪簨鍔°佸伐浣滄祦絳夛紝鑰岃繖浜涘張閮介渶瑕佹湇鍔¤川閲?QoS)鐨勪繚闅溿傚叾嬈★紝鎴戜滑鐭ラ亾瀹夊叏鏈哄埗瀵逛簬鏉炬暎鑰﹀悎鐨勫璞$幆澧冪殑閲嶈鎬э紝鍥犳鎴戜滑闇瑕佸璇稿鎺堟潈璁よ瘉銆佹暟鎹畬鏁存?姣斿絳懼悕鏈哄埗)銆佹秷鎭簮璁よ瘉浠ュ強浜嬪姟鐨勪笉鍙惁璁ゆх瓑榪愮敤瑙勮寖鐨勬柟娉曟潵鎻忚堪銆佷紶杈撳拰浜ゆ崲銆傛渶鍚庯紝鍦ㄦ墍鏈夊眰嬈$殑澶勭悊閮藉簲褰撴槸鍙鐞嗙殑錛屽洜姝ら渶瑕佸綆$悊鍗忕害榪愮敤鍚屾牱鐨勬満鍒躲?/p>
.楂樺害鍙泦鎴愯兘鍔?/p>
鐢變簬Web鏈嶅姟閲囧彇綆鍗曠殑銆佹槗鐞嗚В鐨勬爣鍑嗭紝Web鍗忚浣滀負緇勪歡鐣岄潰鎻忚堪鍜屽崗鍚屾弿榪拌鑼冿紝瀹屽叏灞忚斀浜嗕笉鍚岃蔣浠跺鉤鍙扮殑宸紓錛屾棤璁烘槸CORBA銆丏COM榪樻槸EJB錛岄兘鍙互閫氳繃榪欎竴縐嶆爣鍑嗙殑鍗忚榪涜浜掓搷浣滐紝瀹炵幇浜嗗湪褰撳墠鐜涓嬫渶楂樼殑鍙泦鎴愭с?/p>
14.2.1 Web Services鐨勬牳蹇冩妧鏈?/p>
Web Services 鏄竴縐嶅熀浜庣粍浠剁殑杞歡騫沖彴,鏄潰鍚戞湇鍔$殑Internet 搴旂敤銆俉eb Services 鏄簲鐢ㄤ簬Internet 鐨?鑰屼笉鏄檺浜庡眬鍩熺綉鎴栬瘯楠岀幆澧冿紝榪欏氨瑕佹眰Web Services 妗嗘灦蹇呴』閫傜敤浜庣幇鏈夌殑Internet 杞歡鍜岀‖浠剁幆澧?鍗蟲湇鍔$殑鎻愪緵鑰呮墍鎻愪緵鐨勬湇鍔″繀欏誨叿鏈夎法騫沖彴銆佽法璇█鐨勭壒鎬с傚叾嬈?Web Services 鎵鎻愪緵鐨勬湇鍔′笉浣嗘槸闈㈠悜浜?鑰屼笖闇鏈嶅姟浜庡叾瀹冨簲鐢ㄧ郴緇熴傜幇鏈夌殑Web緗戠珯涔熷彲浠ヨ涓烘槸闈㈠悜鏈嶅姟鐨?浣嗚繖縐嶆湇鍔′粎浠呭彲浠ユ彁渚涚粰浜轟嬌鐢?鍙湁浜虹被鎵嶅彲浠ヨ鎳傛祻瑙堝櫒涓嬭澆鐨勯〉闈? 銆傝屾柊涓浠g殑Web Services 鎵鎻愪緵鐨勬湇鍔″簲鑳借鏈哄櫒鎵璇繪噦,渚嬪鍏跺畠搴旂敤紼嬪簭鍙婄Щ鍔ㄨ澶囦腑鐨勮蔣浠剁郴緇熴傝繖鏍?鎴戜滑鍙互鐪嬪嚭,Web Services 鐨勫彂灞曟柟鍚戝疄闄呬笂鏄瀯閫犱竴涓熀浜庣幇鏈塈nternet 鎶鏈箣涓婄殑鍒嗗竷璁$畻緋葷粺銆?/p>
Web Services 妗嗘灦鐨勬牳蹇冩妧鏈寘鎷琒OAP(Simple Object Access Protocol,綆鍗曞璞¤闂崗璁? ,WSDL(Web Services Description Lanuage,Web鏈嶅姟鎻忚堪璇█) 鍜孶DDI錛圲niversal Description錛孌iscovery and Integration錛岄氱敤鎻忚堪錛屽彂鐜幫紝闆嗘垚) ,瀹冧滑閮芥槸浠ユ爣鍑嗙殑XML 鏂囨。鐨勫艦寮忚〃榪扮殑銆?/p>
XML鏄疻eb Services鎶鏈綋緋諱腑鏈鍩虹鐨勬爣鍑嗭紝Web Services鐨勪竴鍒囬兘寤虹珛鍦╔ML鎶鏈殑鍩虹涔嬩笂錛屽寘鎷琖eb Services鐨勬秷鎭佹弿榪板拰鏈嶅姟瀹炵幇鐨勫悇涓幆鑺傘傚埄鐢╔ML錛學eb Services鐨勬湇鍔℃彁渚涜呭拰璇鋒眰鑰呭彲浠ュ埄鐢ㄤ笉鍚岀殑寮鍙戣璦鏉ュ崗浣滃畬鎴愭湇鍔¤皟鐢ㄧ殑榪囩▼銆俋ML鏄疻eb Services鎶鏈綋緋諱腑鐨勫緢澶氭爣鍑嗗緱浠ュ緩绔嬬殑鍩虹錛屽湪Web Services緋葷粺涓棤澶勪笉鍦ㄣ?/p>
SOAP 鏄疻eb services 鐨勯氫俊鍗忚銆係OAP鏄竴縐嶇畝鍗曠殑銆佽交閲忕駭鐨勫熀浜嶺ML 鐨勬満鍒訛紝鐢ㄤ簬鍦ㄧ綉緇滃簲鐢ㄧ▼搴忎箣闂磋繘琛岀粨鏋勫寲鏁版嵁浜ゆ崲銆係OAP鍖呮嫭涓夐儴鍒?涓涓畾涔夋弿榪版秷鎭唴瀹圭殑妗嗘灦鐨勪俊灝侊紝涓緇勮〃紺哄簲鐢ㄧ▼搴忓畾涔夌殑鏁版嵁綾誨瀷瀹炰緥鐨勭紪鐮佽鍒欙紝浠ュ強琛ㄧず榪滅▼榪囩▼璋冪敤鍜屽搷搴旂殑綰﹀畾銆?/p>
WSDL琛ㄧずWEB鏈嶅姟璇存槑璇█銆俉SDL鏂囦歡鏄竴涓猉ML 鏂囨。錛岀敤浜庤鏄庝竴緇凷OAP娑堟伅浠ュ強濡備綍浜ゆ崲榪欎簺娑堟伅錛岄氳繃WSDL鍙互鎻忚堪涓涓湇鍔$殑淇℃伅銆傝繖浜涗俊鎭嬌涓嶄簡瑙h繖涓湇鍔$殑寮鍙戣呭彲浠ュ緩绔嬭皟鐢ㄨ繖涓湇鍔$殑瀹㈡埛绔唬鐮侊紝鎴栬呴氳繃WSDL甯姪鐢熸垚瀹炵幇瀹冪殑鍩烘湰浠g爜緇撴瀯銆俉SDL鍦╓eb Services鐨勫疄闄呭紑鍙戣繃紼嬩腑璧風潃閲嶈鐨勪綔鐢ㄣ?/p>
銆銆Web Services鏄熀浜庝簰鑱旂綉鐨勫簲鐢ㄧ▼搴忔ā鍧楋紝鐢ㄤ簬鍦ㄤ簰鑱旂綉涓婅繍琛岋紝瀹冮噰鐢ㄥ紑鏀劇殑UDDI錛圲niversal Description錛孌iscovery and Integration錛岄氱敤鎻忚堪錛屽彂鐜幫紝闆嗘垚錛夋爣鍑嗐俇DDI鏍囧噯鍏堢敱IBM銆佸井杞丄riba鍒惰錛屽埌鐩墠涓烘鑾峰緱浜?30澶氬鍏徃鐨勬敮鎸併俇DDI 鎻愪緵涓縐嶅彂甯冨拰鏌ユ壘鏈嶅姟鎻忚堪鐨勬柟娉曘俇DDI 鏁版嵁瀹炰綋鎻愪緵瀵瑰畾涔変笟鍔″拰鏈嶅姟淇℃伅鐨勬敮鎸併俉SDL 涓畾涔夌殑鏈嶅姟鎻忚堪淇℃伅鏄疷DDI娉ㄥ唽涓績淇℃伅鐨勮ˉ鍏呫俇DDI鎻愪緵浜嗕竴涓紑鏀撅紝騫沖彴鐙珛鐨勬妧鏈鏋訛紝鏉ヤ嬌浼佷笟涔嬮棿鑳藉湪浜掕仈緗戜笂鎵懼埌瀵規柟鐨勬湇鍔★紝瀹氫箟瀹冧滑鍦ㄤ簰鑱旂綉涓婄殑浜や簰媧誨姩錛屼互鍙婅繖浜涗俊鎭殑鍏變韓鏂瑰紡銆?/p>
Web 鏈嶅姟浣撶郴緇撴瀯鍩轟簬涓夌瑙掕壊錛堟湇鍔℃彁渚涜呫佹湇鍔℃敞鍐屼腑蹇冨拰鏈嶅姟璇鋒眰鑰咃級涔嬮棿鐨勪氦浜掋?/p>
鏈嶅姟鎻愪緵鑰呫備粠浼佷笟鐨勮搴︾湅錛岃繖鏄湇鍔$殑鎵鏈夎呫備粠浣撶郴緇撴瀯鐨勮搴︾湅錛岃繖鏄墭綆¤闂湇鍔$殑騫沖彴銆?nbsp;
鏈嶅姟璇鋒眰鑰咃紙鐢ㄦ埛錛夈備粠浼佷笟鐨勮搴︾湅錛岃繖鏄姹傛弧瓚崇壒瀹氬姛鑳界殑浼佷笟銆備粠浣撶郴緇撴瀯鐨勮搴︾湅錛岃繖鏄鎵懼茍璋冪敤鏈嶅姟錛屾垨鍚姩涓庢湇鍔$殑浜や簰鐨勫簲鐢ㄧ▼搴忋傛湇鍔¤姹傝呰鑹插彲浠ョ敱嫻忚鍣ㄦ潵鎷呭綋錛岀敱浜烘垨鏃犵敤鎴風晫闈㈢殑紼嬪簭錛堜緥濡傦紝鍙﹀涓涓?Web 鏈嶅姟錛夋潵鎺у埗瀹冦?nbsp;
鏈嶅姟娉ㄥ唽涓績銆傝繖鏄彲鎼滅儲鐨勬湇鍔℃弿榪版敞鍐屼腑蹇冿紝鏈嶅姟鎻愪緵鑰呭湪姝ゅ彂甯冧粬浠殑鏈嶅姟鎻忚堪銆傚湪闈欐佺粦瀹氬紑鍙戞垨鍔ㄦ佺粦瀹氭墽琛屾湡闂達紝鏈嶅姟璇鋒眰鑰呮煡鎵炬湇鍔″茍鑾峰緱鏈嶅姟鐨勭粦瀹氫俊鎭紙鍦ㄦ湇鍔℃弿榪頒腑錛夈傚浜庨潤鎬佺粦瀹氱殑鏈嶅姟璇鋒眰鑰咃紝鏈嶅姟娉ㄥ唽涓績鏄綋緋葷粨鏋勪腑鐨勫彲閫夎鑹詫紝鍥犱負鏈嶅姟鎻愪緵鑰呭彲浠ユ妸鎻忚堪鐩存帴鍙戦佺粰鏈嶅姟璇鋒眰鑰呫傚悓鏍鳳紝鏈嶅姟璇鋒眰鑰呭彲浠ヤ粠鏈嶅姟娉ㄥ唽涓績浠ュ鐨勫叾瀹冩潵婧愬緱鍒版湇鍔℃弿榪幫紝渚嬪鏈湴鏂囦歡銆丗TP 绔欑偣銆乄eb 绔欑偣銆佸箍鍛婂拰鏈嶅姟鍙戠幇錛圓dvertisement and Discovery of Services錛孉DS錛夋垨鍙戠幇 Web 鏈嶅姟錛圖iscovery of Web Services錛孌ISCO錛夈?nbsp;
銆銆Web Services 鐨勪綋緋繪灦鏋勫鍥? 鎵紺?br />
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>
14.2.2 Web 鏈嶅姟寮鍙戠敓鍛藉懆鏈?/p>
Web 鏈嶅姟寮鍙戠敓鍛藉懆鏈熷寘鎷簡璁捐鍜岄儴緗蹭互鍙婂湪榪愯鏃跺鏈嶅姟娉ㄥ唽涓績銆佹湇鍔℃彁渚涜呭拰鏈嶅姟璇鋒眰鑰呮瘡涓涓鑹茬殑瑕佹眰銆傛瘡涓鑹插寮鍙戠敓鍛藉懆鏈熺殑姣忎竴鍏冪礌閮芥湁鐗瑰畾瑕佹眰銆?/p>
Web 鏈嶅姟寮鍙戠敓鍛藉懆鏈熸湁浠ヤ笅鍥涗釜闃舵錛?/p>
1. 鏋勫緩
鐢熷懡鍛ㄦ湡鐨勬瀯寤洪樁孌靛寘鎷紑鍙戝拰嫻嬭瘯 Web 鏈嶅姟瀹炵幇銆佸畾涔夋湇鍔℃帴鍙f弿榪板拰瀹氫箟鏈嶅姟瀹炵幇鎻忚堪銆傛垜浠彲浠ラ氳繃鍒涘緩鏂扮殑 Web 鏈嶅姟銆佹妸鐜版湁鐨勫簲鐢ㄧ▼搴忓彉鎴?Web 鏈嶅姟鍜岀敱鍏跺畠 Web 鏈嶅姟鍜屽簲鐢ㄧ▼搴忕粍鎴愭柊鐨?Web 鏈嶅姟鏉ユ彁渚?Web 鏈嶅姟鐨勫疄鐜般?/p>
2. 閮ㄧ講
閮ㄧ講闃舵鍖呮嫭鍚戞湇鍔¤姹傝呮垨鏈嶅姟娉ㄥ唽涓績鍙戝竷鏈嶅姟鎺ュ彛鍜屾湇鍔″疄鐜扮殑瀹氫箟錛屼互鍙婃妸 Web 鏈嶅姟鐨勫彲鎵ц鏂囦歡閮ㄧ講鍒版墽琛岀幆澧冿紙鍏稿瀷鎯呭喌涓嬶紝Web 搴旂敤紼嬪簭鏈嶅姟鍣級涓?/p>
3. 榪愯
鍦ㄨ繍琛岄樁孌碉紝鍙互璋冪敤 Web 鏈嶅姟銆傚湪姝わ紝Web 鏈嶅姟瀹屾垚閮ㄧ講錛屾垚涓哄彲鎿嶄綔鐨勬湇鍔°傛湇鍔¤姹傝呭彲浠ヨ繘琛屾煡鎵懼拰緇戝畾鎿嶄綔銆?/p>
4. 綆$悊
綆$悊闃舵鍖呮嫭鎸佺畫鐨勭鐞嗗拰緇忚惀 Web 鏈嶅姟搴旂敤紼嬪簭銆傚畨鍏ㄦс佸彲鐢ㄦс佹ц兘銆佹湇鍔¤川閲忓拰涓氬姟嫻佺▼闂閮藉繀欏昏瑙e喅銆?/p>
鎺ヤ笅鏉ユ垜浠叿浣撳睍寮Web Services鍘熺悊銆?/p>
14.3錛嶹eb Services鍘熺悊
棣栧厛錛屾垜浠皢鐪嬬湅 Web 鏈嶅姟鐨勪竴涓蹇墊у崗璁爤浠ュ強榪欎釜鍗忚鏍堢殑緇嗚妭銆傜劧鍚庢垜浠皢璁ㄨ閫夋嫨緗戠粶鍗忚鐨勬爣鍑嗐傛垜浠繕灝嗗洖欏句竴涓嬪熀鏈殑鍩轟簬 XML 鐨勬秷鎭紶閫掑垎甯冨紡璁$畻銆傛垜浠皢鐢ㄦ湇鍔℃弿榪版墿灞曞熀鏈殑 XML 娑堟伅浼犻掞紝鑰屾湇鍔℃弿榪版槸鏍規嵁瀹冪殑鍗忚鏍堟潵瑙i噴鐨勩傛帴涓嬫潵錛屾垜浠皢璁ㄨ鏈嶅姟鎻忚堪鍦?Web 鏈嶅姟浣撶郴緇撴瀯涓殑瑙掕壊錛岃鏄庢敮鎸侀潤鎬佸拰鍔ㄦ?Web 鏈嶅姟搴旂敤紼嬪簭鐨勬湇鍔″彂甯冩妧鏈殑鑼冨洿銆傛垜浠繕灝嗗洿緇曟湇鍔″彂甯冭璁烘湇鍔″彂鐜扮殑瑙掕壊銆傛渶鍚庯紝鎴戜滑灝嗘弿榪板熀鏈?Web 鏈嶅姟浣撶郴緇撴瀯鐨勬墿灞曪紝鐢靛瓙鍟嗗姟闇瑕佽繖浜涙墿灞曟墠鑳戒嬌鐢?Web 鏈嶅姟銆?/p>
14.3.1 Web 鏈嶅姟鍗忚鏍?/p>
瑕佷互涓縐嶅彲浜や簰鎿嶄綔鐨勬柟寮忔墽琛屽彂甯冦佸彂鐜板拰緇戝畾榪欎笁涓搷浣滐紝蹇呴』鏈変竴涓寘鍚瘡涓灞傛爣鍑嗙殑 Web 鏈嶅姟鍗忚鏍堛傚浘 2 灞曠ず浜嗕竴涓蹇墊?Web 鏈嶅姟鍗忚鏍堛備笂闈㈢殑鍑犲眰寤虹珛鍦ㄤ笅闈㈠嚑灞傛彁渚涚殑鍔熻兘涔嬩笂銆傚瀭鐩寸殑鏉¤〃紺哄湪鍗忚鏍堜腑姣忎竴灞傚繀欏繪弧瓚崇殑闇姹傘?/p>
鍥?. Web 鏈嶅姟姒傚康鎬у崗璁爤
Web 鏈嶅姟鍗忚鏍堢殑鍩虹鏄綉緇滃眰銆俉eb 鏈嶅姟瑕佽鏈嶅姟璇鋒眰鑰呰皟鐢紝灝卞繀欏繪槸鍙互閫氳繃緗戠粶璁塊棶鐨勩備簰鑱旂綉涓婂彲浠ュ叕鐢ㄧ殑 Web 鏈嶅姟浣跨敤鏅亶閫傜敤鐨勭綉緇滃崗璁侶TTP 鍑熷叾鏅亶鎬э紝鎴愪負浜嗕簰鑱旂綉鍙敤鐨?Web 鏈嶅姟鐪熸鐨勬爣鍑嗙綉緇滃崗璁俉eb 鏈嶅姟榪樺彲浠ユ敮鎸佸叾瀹冧簰鑱旂綉鍗忚錛屽寘鎷?SMTP 鍜?FTP銆傚唴閮ㄧ綉鍩熷彲浠ヤ嬌鐢ㄥ彲闈犳秷鎭紶閫掑拰璋冪敤鍩虹緇撴瀯錛屽 MQSeries 鍜?CORBA 絳夌瓑銆?/p>
涓嬩竴灞傛槸鍩轟簬 XML 鐨勬秷鎭紶閫掞紝瀹冭〃紺轟嬌鐢?XML 浣滀負娑堟伅浼犻掑崗璁殑鍩虹銆傞夋嫨 SOAP 浣滀負 XML 娑堟伅浼犻掑崗璁湁寰堝鍘熷洜錛?/p>
瀹冩槸浣跨敤 XML 浼犻佷互鏂囨。涓轟腑蹇冪殑娑堟伅浠ュ強榪滅▼榪囩▼璋冪敤鐨勬爣鍑嗗寲灝佽鏈哄埗銆?nbsp;
SOAP 寰堢畝鍗曪紱瀹冨熀鏈笂鏄竴涓敤 XML 淇″皝浣滀負鏈夋晥璐熻澆鐨?HTTP POST銆?nbsp;
SOAP 姣斿 XML 綆鍗曠殑 HTTP POST 鏇村彈闈掔潗錛屽洜涓哄畠瀹氫箟浜嗕竴涓爣鍑嗘満鍒訛紝榪欎釜鏈哄埗灝嗘浜ゆ墿灞曪紙orthogonal extension錛夊悎騫朵負浣跨敤 SOAP 鎶ュご鍜屽鎿嶄綔鎴栧嚱鏁拌繘琛屾爣鍑嗙紪鐮佺殑娑堟伅銆?nbsp;
SOAP 娑堟伅鏀寔 Web 鏈嶅姟浣撶郴緇撴瀯涓殑鍙戝竷銆佹煡鎵懼拰緇戝畾鎿嶄綔銆?nbsp;
鏈嶅姟鎻忚堪灞傚疄闄呬笂鏄弿榪版枃妗g殑涓涓崗璁爤銆傞鍏堬紝WSDL 鏄熀浜?XML 鐨勬湇鍔℃弿榪扮殑鐪熸鏍囧噯銆傝繖鏄敮鎸佸彲浜や簰鎿嶄綔鐨?Web 鏈嶅姟鎵闇鐨勬渶灝忔爣鍑嗘湇鍔℃弿榪般俉SDL 瀹氫箟浜嗘湇鍔′氦浜掔殑鎺ュ彛鍜岀粨鏋勩傝鎸囧畾涓氬姟鐜銆佹湇鍔¤川閲忓拰鏈嶅姟涔嬮棿鐨勫叧緋伙紝鎴戜滑榪橀渶瑕佸彟澶栫殑鎻忚堪銆俉SDL 鏂囨。鍙互鐢卞叾瀹冩湇鍔℃弿榪版枃妗f潵琛ュ厖錛屼粠鑰屾弿榪?Web 鏈嶅姟鐨勮繖浜涙洿楂樼駭鐨勬柟闈€備緥濡傦紝鎻忚堪涓氬姟鐜闄や簡浣跨敤 WSDL 鏂囨。錛岃繕瑕佷嬌鐢?UDDI 鏁版嵁緇撴瀯銆俉eb 鏈嶅姟嫻佺▼璇█錛圵eb Services Flow Language錛學SFL錛夋枃妗d腑鍒欐弿榪頒簡鏈嶅姟緇勬垚鍜屾祦紼嬨?/p>
鍥犱負 Web 鏈嶅姟琚畾涔変負鍙互閫氳繃 SOAP 浠庣綉緇滆繘琛岃闂紝騫剁敱鏈嶅姟鎻忚堪琛ㄧず錛屾墍浠ヨ鍗忚鏍堜腑鐨勫墠涓夊眰闇瑕佹彁渚涙垨浣跨敤 Web 鏈嶅姟銆傛渶綆鍗曠殑鍗忚鏍堝皢鍖呮嫭緗戠粶灞傜殑 HTTP銆乆ML 娑堟伅浼犻掑眰鐨?SOAP 鍗忚浠ュ強鏈嶅姟鎻忚堪灞傜殑 WSDL銆傛墍鏈変紒涓氶棿鎴栧叕鐢?Web 鏈嶅姟閮藉簲璇ユ敮鎸佽繖縐嶅彲浜や簰鎿嶄綔鐨勫熀紜鍗忚鏍堛俉eb 鏈嶅姟錛岀壒鍒槸浼佷笟鍐呴儴鎴栦笓鐢?Web 鏈嶅姟錛岃兘澶熸敮鎸佸叾瀹冪殑緗戠粶鍗忚鍜屽垎甯冨紡璁$畻鎶鏈傝鍗忚鏍堟彁渚涗簡浜掓搷浣滄э紝瀹冧嬌 Web 鏈嶅姟鑳藉鍒╃敤鐜版湁鐨勪簰鑱旂綉鍩虹緇撴瀯銆傝繖灝嗕嬌榪涘叆鏅亶瀛樺湪鐨勭幆澧冪殑鎴愭湰闈炲父浣庛傚彟澶栵紝鐏墊椿鎬у茍涓嶄細鍥犱負浜掓搷浣滄ч渶姹傝屾湁鎵闄嶄綆錛屽洜涓烘垜浠彲浠ヤ負閫夋嫨鎬у拰澧炲肩殑鎶鏈彁渚涘彟澶栫殑鏀寔銆備緥濡傦紝鎴戜滑蹇呴』鏀寔 HTTP 涓婄殑 SOAP錛屼絾涔熷彲浠ュ悓鏃舵敮鎸?MQ 涓婄殑 SOAP銆?/p>
鍗忚鏍堢殑鏈涓嬮潰涓夊眰紜珛浜嗕繚璇佷竴鑷存у拰浜掓搷浣滄х殑鎶鏈紝鑰屽畠浠笂闈㈢殑涓ゅ眰錛屽嵆鏈嶅姟鍙戝竷鍜屾湇鍔″彂鐜幫紝鍙互鐢ㄥ縐嶈В鍐蟲柟妗堟潵瀹炵幇銆?/p>
浠諱綍鑳藉璁╂湇鍔¤姹傝呬嬌鐢?WSDL 鏂囨。鐨勬搷浣滐紝涓嶇瀹冨浜庢湇鍔¤姹傝呯敓鍛藉懆鏈熺殑鍝釜闃舵錛岄兘絎﹀悎鏈嶅姟鍙戝竷鐨勬爣鍑嗐傝灞備腑鏈綆鍗曘佹渶闈欐佺殑瀹炰緥灝辨槸鏈嶅姟鎻愪緵鑰呯洿鎺ュ悜鏈嶅姟璇鋒眰鑰呭彂閫?WSDL 鏂囨。銆傝繖琚О涓虹洿鎺ュ彂甯冦傜數瀛愰偖浠舵槸鐩存帴鍙戝竷鐨勮澆浣撲箣涓銆傜洿鎺ュ彂甯冨闈欐佺粦瀹氱殑搴旂敤紼嬪簭鏉ヨ寰堟湁鐢ㄣ傚彟澶栵紝鏈嶅姟鎻愪緵鑰呰繕鍙互灝嗘弿榪版湇鍔$殑鏂囨。鍙戝竷鍒頒富鏈烘湰鍦?WSDL 娉ㄥ唽涓績銆佷笓鐢?UDDI 娉ㄥ唽涓績鎴?UDDI 榪愯惀鍟嗚妭鐐廣?/p>
Web 鏈嶅姟濡傛灉娌℃湁琚彂甯冨氨涓嶈兘琚彂鐜幫紝鎵浠ヨ鏈嶅姟鍙戠幇渚濊禆浜庢湇鍔″彂甯冦傝灞傜殑鍚勭鍙戠幇鏈哄埗鍜屼竴緇勫彂甯冩満鍒朵簰鐩稿鉤琛屻備換浣曞厑璁告湇鍔¤姹傝呰幏寰楀鏈嶅姟鎻忚堪鐨勮闂潈錛屽茍鍦ㄨ繍琛屾椂浣垮簲鐢ㄧ▼搴忚兘澶熶嬌鐢ㄨ鏈嶅姟鎻忚堪鐨勬満鍒墮兘蹇呴』絎﹀悎鏈嶅姟鍙戠幇鐨勬爣鍑嗐傛渶綆鍗曘佹渶闈欐佺殑鍙戠幇鐨勫疄渚嬫槸闈欐佸彂鐜幫紝鍏朵腑鏈嶅姟璇鋒眰鑰呬粠鏈湴鏂囦歡鑾峰彇 WSDL 鏂囨。銆傝繖閫氬父閮芥槸閫氳繃鐩存帴鍙戝竷鑾峰彇鐨?WSDL 鏂囨。錛屾垨鑰呭墠闈㈡煡鎵炬搷浣滅殑緇撴灉銆傚彟澶栵紝涔熷彲浠ラ氳繃浣跨敤鏈湴 WSDL 娉ㄥ唽涓績銆佷笓鐢?UDDI 娉ㄥ唽涓績鎴?UDDI 榪愯惀鍟嗚妭鐐瑰湪璁捐鏃舵垨榪愯鏃跺彂鐜版湇鍔°傚洜涓?Web 鏈嶅姟瀹炵幇鏄竴縐嶈蔣浠舵ā鍧楋紝鎵浠ラ氳繃緇勫緩 Web 鏈嶅姟鏉ヤ駭鐢?Web 鏈嶅姟鏄緢鑷劧鐨勩俉eb 鏈嶅姟鐨勭粍鍚堝彲浠ユ壆婕斿緢澶氳鑹蹭箣涓銆備紒涓氬唴閮ㄧ殑 Web 鏈嶅姟鍙兘浼氱浉浜掑悎浣滐紝浠庤屽澶栨樉紺哄嚭涓涓崟鐙殑 Web 鏈嶅姟鎺ュ彛錛屾垨鑰咃紝鏉ヨ嚜涓嶅悓浼佷笟鐨?Web 鏈嶅姟鍙互鐩鎬簰鍚堜綔錛屼粠鑰屾墽琛屾満鍣ㄥ埌鏈哄櫒銆佷紒涓氬埌浼佷笟鐨勪簨鍔°傚彟澶栵紝宸ヤ綔嫻佺▼綆$悊鑰呰繕鍙互鍦ㄥ弬涓庝笟鍔℃祦紼嬬殑鏃朵警璋冪敤姣忎釜 Web 鏈嶅姟銆傛渶涓婇潰涓灞傦紝鍗蟲湇鍔℃祦紼嬶紝鎻忚堪浜嗗浣曟墽琛屾湇鍔″埌鏈嶅姟鐨勯氳銆佸悎浣滀互鍙婃祦紼嬨俉SFL 鐢ㄤ簬鎻忚堪榪欎簺浜や簰銆傝浣?Web 鏈嶅姟搴旂敤紼嬪簭婊¤凍褰撲粖鐢靛瓙鍟嗗姟鐨勮揩鍒囬渶姹傦紝灝卞繀欏繪彁渚涗紒涓氱駭鍩虹緇撴瀯錛屽寘鎷畨鍏ㄦс佺鐞嗗拰鏈嶅姟璐ㄩ噺銆傝繖鍑犱釜鍨傜洿鏉″湪鍗忚鏍堢殑姣忎竴灞傞兘蹇呴』寰楀埌瑙e喅銆傛瘡涓灞傜殑瑙e喅鏂規鍙互褰兼鐙珛銆傞殢鐫 Web 鏈嶅姟鑼冧緥鐨勯噰鐢ㄥ拰鍙戝睍錛屽皢浼氬嚭鐜版洿澶氭綾誨瀭鐩存潯銆?/p>
璇ュ崗璁爤鐨勬渶涓嬮潰鍑犲眰琛ㄧず鍩虹 Web 鏈嶅姟鍗忚鏍堬紝瀹冧滑鐩稿浜庡崗璁爤涓笂闈㈠嚑灞傛潵璇存洿鎴愮啛錛屼篃鏇存爣鍑嗐俉eb 鏈嶅姟鐨勬垚鐔熷拰閲囩敤灝嗕細甯﹀姩鍗忚鏍堜腑涓婇潰鍑犲眰鍜屽瀭鐩存潯鐨勫紑鍙戝拰鏍囧噯鍖栥?/p>
緗戠粶灞?/p>
Web 鏈嶅姟鍗忚鏍堢殑鏈搴曞眰鏄綉緇滃眰銆傝灞傚彲琛ㄧず浠繪剰澶氫釜緗戠粶鍗忚錛欻TTP銆丗TP銆丼MTP銆佹秷鎭帓闃燂紙Message Queuing錛夈佷簰鑱旂綉 ORB 闂村崗璁紙Internet Inter ORB Protocol錛孖IOP錛変笂鐨勮繙紼嬫柟娉曡皟鐢紙Remote Method Invocation錛孯MI錛夈佺數瀛愰偖浠剁瓑絳夈傚湪浠諱綍緇欏畾鐨勬儏鍐典笅浣跨敤鐨勭綉緇滃崗璁兘渚濊禆浜庡簲鐢ㄧ▼搴忛渶姹傘?/p>
瀵逛簬鍙互浠庝簰鑱旂綉璁塊棶鐨?Web 鏈嶅姟錛屼漢浠夋嫨緗戠粶鎶鏈殑鏃朵警閫氬父浼氬懼悜浜庨夋嫨鏅亶閮ㄧ講鐨勫崗璁紝濡?HTTP銆傚浜庡唴閮ㄧ綉涓彁渚涘拰浣跨敤鐨?Web 鏈嶅姟錛屼嬌鐢ㄥ彟澶栫殑緗戠粶鎶鏈篃浼氳璁ゅ悓銆傛垜浠彲浠ユ牴鎹叾瀹冮渶姹傞夋嫨緗戠粶鎶鏈紝鍖呮嫭瀹夊叏鎬с佸彲鐢ㄦс佹ц兘浠ュ強鍙潬鎬с傝繖浣垮緱 Web 鏈嶅姟鍙互鍒╃敤宸叉湁鐨勫姛鑳芥洿楂樼駭鐨勮仈緗戝熀紜緇撴瀯鍜岄潰鍚戞秷鎭殑涓棿浠訛紝濡?MQSeries銆傚湪鏈夊縐嶇綉緇滃熀紜緇撴瀯鐨勪紒涓氫腑錛孒TTP 鍙互鐢ㄦ潵鍦ㄨ繖浜涘熀紜緇撴瀯涔嬮棿鎼緩妗ユ銆?/p>
Web 鏈嶅姟鐨勫ソ澶勪箣涓鍦ㄤ簬錛屽畠涓轟笓鐢ㄥ唴閮ㄧ綉鍜屽叕鐢ㄤ簰鑱旂綉鏈嶅姟鐨勫紑鍙戝拰浣跨敤鎻愪緵浜嗙粺涓鐨勭紪紼嬫ā鍨嬨傛墍浠ワ紝緗戠粶鎶鏈殑閫夋嫨瀵規湇鍔″紑鍙戣呮潵璇存槸閫忔槑鐨勩?/p>
鍩轟簬 XML 娑堟伅浼犻掔殑鍒嗗竷寮忚綆?/p>
Web 鏈嶅姟浣撶郴緇撴瀯鏈鍩虹鐨勬敮鏌辨槸 XML 娑堟伅浼犻掋傚綋鍓?XML 娑堟伅浼犻掔殑琛屼笟鏍囧噯鏄?SOAP銆侷BM銆丮icrosoft 浠ュ強鍏跺畠浼佷笟閮藉悜 W3C 寤鴻 SOAP 浣滀負 XML 鍗忚宸ヤ綔緇勶紙XML Protocol Working Group錛夌殑鍩虹銆俋ML 鍗忚灝嗕唬鏇?SOAP 浣滀負琛屼笟鏍囧噯 XML 娑堟伅浼犻掑崗璁殑浣嶇疆銆傚綋 W3C 鍙戝竷 XML 鍗忚鐨勮崏妗堟爣鍑嗘椂錛學eb 鏈嶅姟浣撶郴緇撴瀯灝變細浠?SOAP 榪佺Щ鍒?XML 鍗忚銆?/p>
SOAP 鏄竴縐嶇畝鍗曠殑銆佽交閲忕駭鐨勫熀浜?XML 鐨勬満鍒訛紝鐢ㄤ簬鍦ㄧ綉緇滃簲鐢ㄧ▼搴忎箣闂磋繘琛岀粨鏋勫寲鏁版嵁浜ゆ崲銆係OAP 鍖呮嫭涓夐儴鍒嗭細涓涓畾涔夋弿榪版秷鎭唴瀹圭殑妗嗘灦鐨勪俊灝併佷竴緇勮〃紺哄簲鐢ㄧ▼搴忓畾涔夌殑鏁版嵁綾誨瀷瀹炰緥鐨勭紪鐮佽鍒欙紝浠ュ強琛ㄧず榪滅▼榪囩▼璋冪敤錛坮emote procedure calls錛孯PC錛夊拰鍝嶅簲鐨勭害瀹氥係OAP 鍙互鍜屽悇縐嶇綉緇滃崗璁紙濡?HTTP銆丼MTP銆丗TP 鍜?IIOP 鎴?MQ 涓婄殑 RMI錛夌浉緇撳悎浣跨敤錛屾垨鑰呯敤榪欎簺鍗忚閲嶆柊灝佽鍚庝嬌鐢ㄣ?/p>
铏界劧鐞嗚В榪欎釜鍩虹寰堥噸瑕侊紝浣嗗鏁?Web 鏈嶅姟寮鍙戣呬笉蹇呯洿鎺ュ鐞嗚繖涓熀紜緇撴瀯銆傚ぇ澶氭暟 Web 鏈嶅姟閮戒細浣跨敤浠?WSDL 鐢熸垚鐨勭粡榪囦紭鍖栫殑鐗瑰畾浜庣紪紼嬭璦鐨勭粦瀹氥傚綋鏈嶅姟鎻愪緵鑰呭拰鏈嶅姟璇鋒眰鑰呴兘鍦ㄧ被浼肩殑鐜涓墽琛屾椂錛岃繖縐嶄紭鍖栧彲鑳藉挨涓洪噸瑕併?/p>
鍥?4 灞曠ず浜?XML 娑堟伅浼犻掞紙鍗?SOAP錛夊拰緗戠粶鍗忚濡備綍緇勬垚Web 鏈嶅姟浣撶郴緇撴瀯鐨勫熀紜銆?/p>
鍥?4. 浣跨敤 SOAP 鐨?XML 娑堟伅浼犻?/p>
緗戠粶鑺傜偣鍦ㄥ熀浜?XML 娑堟伅浼犻掔殑鍒嗗竷寮忚綆椾腑鎵紨鎻愪緵鑰呭拰璇鋒眰鑰呰鑹茬殑鍩烘湰瑕佹眰鏄瀯寤恒佽В鏋?SOAP 娑堟伅鐨勮兘鍔涳紙鎴栦袱鑰呭吋鑰屾湁涔嬶級錛屼互鍙婂湪緗戠粶涓婇氫俊鐨勮兘鍔涳紙鎺ユ敹銆佸彂閫佹秷鎭紝鎴栦袱鑰咃級銆?/p>
閫氬父錛屽湪 Web 搴旂敤紼嬪簭鏈嶅姟鍣ㄤ腑榪愯鐨?SOAP 鏈嶅姟鍣ㄥ皢鎵ц榪欎簺鍔熻兘銆傚彟澶栵紝鎴戜滑涔熷彲浠ヤ嬌鐢ㄥ湪 API 涓皝瑁呰繖浜涘姛鑳界殑鐗瑰畾浜庣紪紼嬭璦鐨勮繍琛屽簱銆傚簲鐢ㄧ▼搴忎笌 SOAP 鐨勯泦鎴愬彲浠ラ氳繃浣跨敤鍥涗釜鍩烘湰姝ラ鏉ュ疄鐜幫細
鍦ㄥ浘 4 涓紝鏈嶅姟鎻愪緵鑰呯殑搴旂敤紼嬪簭鍦紙1錛夊垱寤轟竴鏉?SOAP 娑堟伅銆傝繖鏉?SOAP 娑堟伅鏄皟鐢ㄧ敱鏈嶅姟鎻愪緵鑰呮彁渚涚殑 Web 鏈嶅姟鎿嶄綔鐨勮姹傘傛秷鎭富浣撲腑鐨?XML 鏂囨。鍙互鏄竴涓?SOAP RPC 璇鋒眰錛屼篃鍙互鏄竴涓湇鍔℃弿榪頒腑鎵鎻忚堪鐨勪互鏂囨。涓轟腑蹇冪殑娑堟伅銆傛湇鍔¤姹傝呭皢姝や俊鎭拰鏈嶅姟鎻愪緵鑰呯殑緗戝潃涓璧鋒彁渚涚粰 SOAP 鍩虹緇撴瀯錛堜緥濡備竴涓?SOAP 瀹㈡埛鏈鴻繍琛屾椂錛夈係OAP 瀹㈡埛鏈鴻繍琛屾椂涓庝竴涓簳灞傜綉緇滃崗璁紙渚嬪 HTTP錛変氦浜掞紝鐒跺悗鍦ㄧ綉緇滀笂灝?SOAP 娑堟伅鍙戦佸嚭鍘匯?nbsp;
緗戠粶鍩虹緇撴瀯鍦紙2錛夊皢娑堟伅浼犻佸埌鏈嶅姟鎻愪緵鑰呯殑 SOAP 榪愯鏃訛紙渚嬪涓涓?SOAP 鏈嶅姟鍣級銆係OAP 鏈嶅姟鍣ㄥ皢璇鋒眰娑堟伅璺敱鍒版湇鍔℃彁渚涜呯殑 Web 鏈嶅姟銆傚鏋滃簲鐢ㄧ▼搴忛渶瑕侊紝SOAP 榪愯鏃惰礋璐e皢 XML 娑堟伅杞崲涓虹壒瀹氫簬緙栫▼璇█鐨勫璞°傝繖涓漿鎹㈢敱娑堟伅涓彲浠ユ壘鍒扮殑緙栫爜妯″紡鎵鎺у埗銆?nbsp;
Web 鏈嶅姟璐熻矗澶勭悊璇鋒眰淇℃伅騫剁敓鎴愪竴涓搷搴斻傝鍝嶅簲涔熸槸涓鏉?SOAP 娑堟伅銆傚搷搴旂殑 SOAP 娑堟伅鍦紙3錛夎鎻愪緵緇?SOAP 榪愯鏃訛紝鍏剁洰鐨勫湴鏄湇鍔¤姹傝呫傚湪 HTTP 涓婄殑鍚屾璇鋒眰錛忓搷搴旂殑鎯呭喌涓紝鑱旂綉鍗忚鐨勫簳灞傝姹傦紡鍝嶅簲鏈川鐢ㄤ簬瀹炵幇娑堟伅浼犻掔殑璇鋒眰錛忓搷搴旀湰璐ㄣ係OAP 榪愯鏃跺皢 SOAP 娑堟伅鍝嶅簲鍙戦佸埌緗戠粶涓婄殑鏈嶅姟璇鋒眰鑰呫?nbsp;
鍝嶅簲娑堟伅鍦紙4錛夌敱鏈嶅姟璇鋒眰鑰呰妭鐐逛笂鐨勮仈緗戝熀紜緇撴瀯鎺ユ敹銆傛秷鎭細緇忚繃鏁翠釜 SOAP 鍩虹緇撴瀯錛涘彲鑳戒細灝?XML 娑堟伅杞崲涓虹洰鏍囩紪紼嬭璦涓殑瀵硅薄銆傜劧鍚庯紝鍝嶅簲娑堟伅琚彁渚涚粰搴旂敤紼嬪簭銆?nbsp;
鏈ず渚嬩嬌鐢ㄤ簡璇鋒眰錛忓搷搴斾紶閫佸熀鏈師鐞嗭紝榪欑鍘熺悊鍦ㄥぇ澶氭暟鍒嗗竷寮忚綆楃幆澧冧腑閮藉緢甯歌銆傝姹傦紡鍝嶅簲浜ゆ崲鍙互鏄悓姝ョ殑錛屼篃鍙互鏄紓姝ョ殑銆傚叾瀹冧紶閫佸熀鏈師鐞嗭紝濡傚崟鍚戞秷鎭紶閫掞紙鏃犲搷搴旓級錛岄氱煡錛堟帹鍔ㄥ紡鍝嶅簲錛変互鍙婂彂甯冿紡璁㈤槄錛屼篃鍙兘鐢ㄥ埌 SOAP銆?/p>
閭d箞錛屾湇鍔¤姹傝呭浣曠煡閬撹姹傛秷鎭簲璇ヤ嬌鐢ㄤ粈涔堟牸寮忓憿錛熻繖涓棶棰樺湪涓嬮潰浼氬緱鍒板洖絳斻?/p>
鏈嶅姟鎻忚堪錛氫粠 XML 娑堟伅浼犻掑埌 Web 鏈嶅姟
鏈嶅姟鎻愪緵鑰呮槸閫氳繃鏈嶅姟鎻忚堪灝嗘墍鏈夌敤浜庤皟鐢?Web 鏈嶅姟鐨勮鑼冧紶閫佺粰鏈嶅姟璇鋒眰鑰呯殑銆傝瀹炵幇 Web 鏈嶅姟浣撶郴緇撴瀯鐨勬澗鏁h﹀悎錛屽茍鍑忓皯鏈嶅姟鎻愪緵鑰呭拰鏈嶅姟璇鋒眰鑰呬箣闂存墍闇鐨勫叡璇嗙殑紼嬪害鍜屽畾鍒剁紪紼嬩笌闆嗘垚鐨勭▼搴︼紝鏈嶅姟鎻忚堪灝辨槸鍏抽敭銆備緥濡傦紝涓嶇鏄姹傝呰繕鏄彁渚涜咃紝閮戒笉蹇呬簡瑙e鏂圭殑搴曞眰騫沖彴銆佺紪紼嬭璦鎴栧垎甯冨紡瀵硅薄妯″瀷錛堝鏋滄湁鐨勮瘽錛夈傛湇鍔℃弿榪頒笌搴曞眰 SOAP 鍩虹緇撴瀯鐩哥粨鍚堬紝瓚充互灝佽鏈嶅姟璇鋒眰鑰呯殑搴旂敤紼嬪簭鍜屾湇鍔℃彁渚涜呯殑 Web 鏈嶅姟涔嬮棿鐨勮繖涓粏鑺傘?/p>
鍩烘湰鏈嶅姟鎻忚堪
Web 鏈嶅姟浣撶郴緇撴瀯浣跨敤 WSDL 浣滀負鍩烘湰鏈嶅姟鎻忚堪銆俉SDL 宸茬粡琚彁浜ゅ埌 W3C 浣滀負鏍囧噯銆俉SDL 鏄竴縐?XML 鏂囨。錛屽畠灝?Web 鏈嶅姟鎻忚堪涓轟竴緇勭鐐癸紝榪欎簺绔偣浼氬鐞嗗寘鍚潰鍚戞枃妗f垨闈㈠悜榪囩▼鐨勶紙RPC錛夋秷鎭殑娑堟伅銆傛搷浣滃拰娑堟伅閮芥槸琚娊璞℃弿榪扮殑錛岀劧鍚庡畠浠細琚粦瀹氬埌涓涓叿浣撶殑緗戠粶鍗忚鍜屾秷鎭牸寮忥紝鐢ㄦ潵瀹氫箟绔偣銆傜浉鍏崇殑鍏蜂綋绔偣琚悎騫跺埌鎶借薄鐨勭鐐規垨鏈嶅姟涓俉SDL 鍙互鎵╁睍涓哄厑璁哥鐐瑰拰鍏舵秷鎭殑鎻忚堪錛屼笉綆′嬌鐢ㄥ摢縐嶆秷鎭牸寮忔垨緗戠粶鍗忚榪涜閫氳閮藉彲浠ャ傜劧鑰岋紝鐩墠緇忚繃鎻忚堪鐨勭粦瀹氬彧鑳界敤浜?SOAP 1.1銆丠TTP POST 浠ュ強澶氱敤閫斾簰鑱旂綉閭歡鎵╁睍錛圡ultipurpose Internet Mail Extensions錛孧IME錛夈?/p>
Web 鏈嶅姟浣撶郴緇撴瀯涓 WSDL 鐨勪嬌鐢ㄦ寜鐓у父瑙勫皢鍩烘湰鐨勬湇鍔℃弿榪板垎鎴愪簡涓ら儴鍒嗭細鏈嶅姟鎺ュ彛鍜屾湇鍔″疄鐜般傝繖浣挎瘡涓儴鍒嗛兘鍙互琚垎寮鐙珛瀹氫箟錛屽茍鍙互鐢卞彟涓閮ㄥ垎閲嶆柊浣跨敤銆?br />
鏈嶅姟鎺ュ彛瀹氫箟鏄竴縐嶆娊璞℃垨鍙噸鐢ㄧ殑鏈嶅姟瀹氫箟錛屽畠鍙互琚涓湇鍔″疄鐜板畾涔夊疄渚嬪寲鍜屽紩鐢ㄣ傛垜浠彲浠ュ皢鏈嶅姟鎺ュ彛瀹氫箟鎯寵薄鎴愭帴鍙e畾涔夎璦錛圛nterface Definition Language錛孖DL錛夈丣ava 鎺ュ彛鎴?Web 鏈嶅姟綾誨瀷銆傝繖浣垮父瑙佺殑琛屼笟鏍囧噯鏈嶅姟綾誨瀷鍙互琚涓湇鍔″疄鐜拌呭畾涔夊拰瀹炵幇銆傝繖綾諱技浜庡湪緙栫▼璇█涓畾涔夋娊璞℃帴鍙g劧鍚庡緱鍒板涓叿浣撳疄鐜般傛湇鍔℃帴鍙e彲浠ョ敱琛屼笟鏍囧噯緇勭粐瀹氫箟銆?/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>
鏈嶅姟瀹炵幇瀹氫箟鏄竴涓弿榪扮粰瀹氭湇鍔℃彁渚涜呭浣曞疄鐜扮壒瀹氭湇鍔℃帴鍙g殑 WSDL 鏂囨。銆俉eb 鏈嶅姟琚緩妯℃垚 WSDL: service 鍏冪礌銆傛湇鍔″厓绱犲寘鍚竴緇勶紙閫氬父鏄竴涓級WSDL: port 鍏冪礌銆傜鍙e皢绔偣錛堜緥濡傜綉鍧浣嶇疆鎴?URL錛変笌鏉ヨ嚜鏈嶅姟鎺ュ彛瀹氫箟鐨?WSDL: binding 鍏冪礌鍏寵仈璧鋒潵銆?/p>
涓轟簡璇存槑鑱岃矗鐨勫畨鎺掞紝寮鏀懼簲鐢ㄧ▼搴忕粍錛圤pen Applications Group錛孫AG錛変負寮鏀懼簲鐢ㄧ▼搴忕粍闆嗘垚瑙勮寖錛圤pen Applications Group Integration Specification錛孫AGIS錛夎喘涔版爣鍑嗗畾涔変簡涓涓湇鍔℃帴鍙e畾涔夈傝繖涓湇鍔℃帴鍙e畾涔変細瀹氫箟 WSDL: type銆乄SDL: message銆乄SDL: portType 鍜?WSDL: binding銆?/p>
鏈嶅姟鎻愪緵鑰呭彲浠ラ夋嫨寮鍙戝疄鐜?OAGIS 璐拱璁㈠崟鏈嶅姟鎺ュ彛鐨?Web 鏈嶅姟銆傛湇鍔℃彁渚涜呬細寮鍙戜竴涓湇鍔″疄鐜板畾涔夋枃妗o紝鎻忚堪 WSDL 璁懼銆佺鍙e拰鍦板潃浣嶇疆鍏冪礌錛岃繖浜涘厓绱犳弿榪版彁渚涜呯殑 Web 鏈嶅姟鐨勭綉鍧鍙婂叾瀹冪壒瀹氫簬瀹炵幇鐨勭粏鑺傘?/p>
鏈嶅姟鎺ュ彛瀹氫箟鍜屾湇鍔″疄鐜板畾涔夌粨鍚堝湪涓璧鳳紝緇勬垚浜嗘湇鍔″畬鏁寸殑 WSDL 瀹氫箟銆傝繖涓や釜瀹氫箟鍖呭惈涓烘湇鍔¤姹傝呮弿榪板浣曡皟鐢ㄤ互鍙婁笌 Web 鏈嶅姟浜や簰鐨勮凍澶熶俊鎭傛湇鍔¤姹傝呭彲浠ヨ姹傝幏寰楀叾瀹冨叧浜庢湇鍔℃彁渚涜呯鍙g殑淇℃伅銆傛淇℃伅鐢辨湇鍔″畬鏁寸殑 Web 鏈嶅姟鎻忚堪鎻愪緵銆?/p>
瀹屾暣鐨?Web 鏈嶅姟鎻忚堪
瀹屾暣鐨?Web 鏈嶅姟鎻忚堪寤虹珛鍦ㄦ湇鍔″熀鏈殑 WSDL 瀹氫箟涔嬩笂銆傚畬鏁寸殑 Web 鏈嶅姟鎻忚堪鍙互瑙e喅榪欐牱鐨勯棶棰橈細浠涔堜紒涓氬湪鎵樼榪欎釜鏈嶅姟錛熷畠鏄綍縐嶇被鍨嬬殑浼佷笟錛熶笌鏈嶅姟鐩稿叧鑱旂殑浜у搧鏈夊摢浜涳紵鍚勭鍏徃鍜屼駭鍝佺被鍒腑涓庤浼佷笟鎴栧叾 Web 鏈嶅姟鐩稿叧鑱旂殑鍒嗙被鏈夊摢浜涳紵鏈夋病鏈夋湇鍔$殑鍏跺畠鏂歸潰錛堝鏈嶅姟璐ㄩ噺錛変細褰卞搷鍒拌姹傝呮槸鍚﹂夋嫨璋冪敤鏈嶅姟錛熶負浜嗕嬌鏌ユ壘璇ユ湇鍔℃洿瀹規槗錛屽彲浠ユ彁渚涘摢浜涘叧閿瓧錛?/p>
鍥?6 涓弿榪頒簡涓涓畬鏁寸殑 Web 鏈嶅姟鎻忚堪銆?/p>
鍥?6. 瀹屾暣鐨?Web 鏈嶅姟鎻忚堪鍗忚鏍?br />
UDDI 鎻愪緵浜嗕竴涓繚瀛?Web 鏈嶅姟鎻忚堪鐨勬満鍒躲傝櫧鐒?UDDI 閫氬父浼氳璁や負鏄竴縐嶇洰褰曟満鍒訛紝浣嗘槸瀹冧篃瀹氫箟浜嗕竴涓敤 XML 琛ㄧず鏈嶅姟鎻忚堪淇℃伅鐨勬暟鎹粨鏋勬爣鍑嗐俇DDI 鏉$洰涓湁鍥涚鍩烘湰鏁版嵁緇撴瀯錛屽鍥?7 涓墍紺恒?/p>
鍥?7. 鍩烘湰 UDDI 鏁版嵁緇撴瀯
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>
鍦╓eb 鏈嶅姟浣撶郴緇撴瀯涓紝瀹屾暣鐨?Web 鏈嶅姟鎻忚堪鍖呮嫭鐢ㄤ簬绔偣鎻忚堪鐨勪竴灞傦紝榪欎釜绔偣鎻忚堪浣跨敤 UDDI 鏉$洰鍚戞湇鍔℃弿榪版坊鍔犱紒涓氬拰瀹炵幇鐜銆?/p>
绔偣鎻忚堪閬靛驚緇撳悎 WSDL 浣跨敤 UDDI 鐨勭害瀹氥傜鐐規弿榪頒嬌鐢?UDDI 鎻愪緵浼佷笟淇℃伅鍜岀被鍒殑鏍囧噯琛ㄧず銆傝繖涓?UDDI-WSDL 綰﹀畾瑙勫畾浜嗗浣曚粠鍜?Web 鏈嶅姟鐩稿叧鑱旂殑 UDDI 鏉$洰涓緱鍑烘湇鍔℃帴鍙e畾涔夊拰鏈嶅姟瀹炵幇瀹氫箟鐨?WSDL 鎻忚堪銆傝繖涓害瀹氬浜庡湪Web 鏈嶅姟浣撶郴緇撴瀯涓嬌鐢?UDDI 浣滀負鍩轟簬 WSDL 鐨勬湇鍔$殑鏈嶅姟娉ㄥ唽涓績鏉ヨ鑷沖叧閲嶈銆?/p>
绔偣鎻忚堪鍚戝簲鐢ㄥ埌鏈嶅姟鐨勭壒瀹氬疄鐜扮殑鏈嶅姟鎻忚堪娣誨姞浜嗗彟澶栫殑璇箟銆傚畨鍏ㄥ睘鎬у彲浠ュ畾涔夊 Web 鏈嶅姟鐨勮闂繘琛屾帶鍒剁殑絳栫暐銆傛湇鍔¤川閲忓睘鎬ф寚瀹氶潰鍚戞ц兘鐨勮兘鍔涳紝渚嬪鏈嶅姟鍦ㄤ竴瀹氭椂闂村唴浣滃嚭鍝嶅簲鐨勮兘鍔涳紝鎴栨墍鏀寔鐨勫彲闈犳秷鎭紶閫掔殑綰у埆銆傛湇鍔″紑閿灞炴ф弿榪版湇鍔$殑璧勬簮闇姹傘傝繕鍙互瀹氫箟鏀寔鍝簺瀵硅瘽璇箟銆?/p>
鏈嶅姟鎻忚堪鍗忚鏍堜腑鐨勬渶鍚庝竴灞傛槸鍗忚鎻忚堪銆傚崗璁弿榪板弽鏄犱袱涓紒涓氫紮浼翠箣闂翠負浜嗗畬鎴愪竴涓姝ヤ紒涓氫氦浜掕岃繘琛岀殑 Web 鏈嶅姟璋冪敤鐨勪竴涓畝鍗曠殑緙栨帓銆備緥濡傦紝“鍗忚瀹氫箟”瀹氫箟浜嗚喘涔板崗璁腑璇稿璐拱鑰呭拰鍑哄敭鑰呬箣綾葷殑瑙掕壊銆傚崗璁畾涔夎瀹氫簡姣忎釜瑙掕壊蹇呴』杈懼埌鐨勮姹傘備緥濡傦紝鍑哄敭鑰呭繀欏繪湁鎺ュ彈鎶ヤ環璇鋒眰錛坮equest for quote錛孯FQ錛夋秷鎭佽喘涔拌鍗曪紙purchase order錛孭O錛夋秷鎭拰浠樻娑堟伅鐨?Web 鏈嶅姟銆傝喘涔拌呯殑瑙掕壊蹇呴』鏈夋帴鍙楁姤浠鳳紙RFQ 鍝嶅簲淇℃伅錛夈佸彂紲ㄦ秷鎭拰甯愭埛鎽樿淇℃伅鐨?Web 鏈嶅姟銆傝繖涓畝鍗曠殑 Web 鏈嶅姟鍒頒紒涓氳鑹茬殑緙栨帓瀵逛簬鍦ㄤ紒涓氫紮浼翠箣闂村緩绔嬪姝ョ殑銆侀潰鍚戞湇鍔$殑浜や簰鏉ヨ鑷沖叧閲嶈銆傚湪寰堝涓嶅悓鐨勪紒涓氬崗璁爣鍑嗕笅錛屼竴涓粰瀹氱殑鏈嶅姟璇鋒眰鑰呮垨鏈嶅姟鎻愪緵鑰呬篃璁歌兘澶熸壆婕旇喘涔拌呮垨鍑哄敭鑰呯殑瑙掕壊銆傞氳繃鏄懼紡鍦板緩绔嬩紒涓氬崗璁拰姣忎釜鑺傜偣鍦ㄤ紒涓氬崗璁腑鎵紨鍚勭瑙掕壊鐨勮兘鍔涳紝璇鋒眰鑰呭彲浠ラ夋嫨鍦ㄩ潰瀵瑰悇縐嶆彁渚涜呬紒涓氫紮浼存椂鍔犲叆鍝浼佷笟鍗忚銆?/p>
榪欎釜棰嗗煙鍏呮弧浜嗗垱鏂般傚浜庝紒涓氬崗璁畾涔夋潵璇達紝鐩墠榪樻病鏈変竴涓崟鐙殑鏍囧噯銆俥bXML 鍗忎綔-鍗忚姒傝鍜屽崗瀹氳鑼冿紙ebXML Collaboration-Protocol Profile and Agreement Specification錛夋弿榪頒簡榪欎簺姒傚康錛屼絾涓嶆槸鏍規嵁浣滀負璇ヤ綋緋葷粨鏋勭殑涓閮ㄥ垎鎻忚堪鐨?Web 鏈嶅姟鎶鏈屾弿榪扮殑銆俉eb 鏈嶅姟嫻佺▼鎻忚堪鍜?Web 鏈嶅姟绔偣鎻忚堪榪欎袱灞傛澶勪簬寮鍙戜腑錛屽畠浠彲浠ユ彁渚涜繖涓駭鍒殑鏈嶅姟鎻忚堪銆?/p>
鏈嶅姟鎻忚堪鐨勫彂甯冨拰鍙戠幇
鏈嶅姟鍙戝竷
Web 鏈嶅姟鐨勫彂甯冨寘鎷湇鍔℃弿榪扮殑鐢熸垚鍜屼箣鍚庣殑鍙戝竷銆傚彂甯冨彲浠ヤ嬌鐢ㄥ悇縐嶄笉鍚屾満鍒躲?/p>
鐢熸垚鏈嶅姟鎻忚堪
鎴戜滑鍙互鐢熸垚銆佹墜宸ョ紪鐮佹湇鍔℃弿榪幫紝涔熷彲浠ユ牴鎹凡鏈夌殑鏈嶅姟鎺ュ彛瀹氫箟緇勬垚鏈嶅姟鎻忚堪銆傚紑鍙戣呭彲浠ユ墜宸ョ紪鐮佹暣涓湇鍔℃弿榪幫紝鍖呮嫭 UDDI 鏉$洰銆傛湁浜涘伐鍏峰彲浠ヤ粠緙栫▼妯″瀷鍜屽彲鎵ц Web 鏈嶅姟鐨勯儴緗茬敓鎴?WSDL錛岃繕鏈夊彲鑳界敓鎴愭潵鑷厓鏁版嵁鏋勪歡鐨勯儴鍒?UDDI 鏉$洰銆傞儴鍒嗘湇鍔℃弿榪板彲鑳藉凡緇忓瓨鍦紙渚嬪錛學eb 鏈嶅姟鍙互鍩轟簬涓涓涓氭爣鍑嗘湇鍔℃帴鍙e畾涔夛級錛岃繖鏍峰氨鍙』榪涗竴姝ョ敓鎴愪竴灝忛儴鍒嗗氨鍙互浜嗐?/p>
鍙戝竷鏈嶅姟鎻忚堪
鏈嶅姟鎻忚堪鍙互浣跨敤鍚勭涓嶅悓鏈哄埗鏉ュ彂甯冦傛牴鎹簲鐢ㄧ▼搴忓皢浣跨敤鏈嶅姟鐨勫姩鎬佺▼搴︼紝榪欎簺涓嶅悓鐨勬満鍒舵彁渚涗笉鍚岀殑鑳藉姏銆傛湇鍔℃弿榪板彲浠ヤ嬌鐢ㄥ縐嶄笉鍚屾満鍒跺彂甯冨埌澶氫釜鏈嶅姟娉ㄥ唽涓績銆?/p>
鏈綆鍗曠殑鎯呭喌鏄洿鎺ュ彂甯冦傜洿鎺ュ彂甯冩剰鍛崇潃鏈嶅姟鎻愪緵鑰呯洿鎺ュ皢鏈嶅姟鍙戝竷緇欐湇鍔¤姹傝呫傝繖鍙互閫氳繃浣跨敤鐢靛瓙閭歡闄勪歡銆丗TP 绔欑偣鐢氳嚦鍏夌洏鍒嗗彂鏉ュ疄鐜般傜洿鎺ュ彂甯冨彲浠ュ湪浼佷笟浼欎即鍙屾柟灝卞湪 Web 涓婁嬌鐢ㄧ數瀛愬晢鍔$殑鏉℃杈炬垚涓鑷村悗榪涜錛屾垨鍦ㄨ姹傝闂湇鍔$殑鏈嶅姟璇鋒眰鑰呮敮浠樹簡璐圭敤涔嬪悗榪涜銆傚湪榪欑鎯呭喌涓嬶紝鏈嶅姟璇鋒眰鑰呭彲浠ヤ繚鐣欐湇鍔℃弿榪扮殑涓浠芥湰鍦板壇鏈?/p>
紼嶅井鏇村姩鎬佷竴鐐圭殑鍙戝竷浣跨敤 DISCO 鎴?ADS銆侱ISCO 鍜?ADS 涓よ呴兘瀹氫箟浜嗕竴涓粠緇欏畾 URL 鑾峰彇 Web 鏈嶅姟鎻忚堪鐨勭畝鍗曠殑 HTTP GET 鏈哄埗銆傚寮虹殑鏈嶅姟鎻忚堪璧勬簮搴撲細鎻愪緵鏈嶅姟鎻忚堪鐨勪竴涓湰鍦伴珮閫熺紦瀛橈紝涓嶈繃榪樻彁渚涗簡闄勫姞鐨勬悳绱㈣兘鍔涖傚浜庡湪浼佷笟鍐呴儴璺ㄨ秺涓繪満鐨勬湇鍔℃弿榪拌祫婧愬簱鏉ヨ錛屾湇鍔℃彁渚涜呬細鍚戜笓鐢ㄧ殑 UDDI 鑺傜偣鍙戝竷銆傛垜浠彲浠ユ牴鎹彂甯冨埌鑺傜偣鐨?Web 鏈嶅姟鐨勫煙鐨勮寖鍥達紝浣跨敤鍑犵涓撶敤鐨?UDDI 鑺傜偣銆?/p>
鍐呴儴浼佷笟搴旂敤紼嬪簭 UDDI 鑺傜偣錛圛nternal Enterprise Application UDDI node錛夎妭鐐癸細鍏徃鍐呴儴涓轟簡榪涜鍐呴儴浼佷笟搴旂敤紼嬪簭闆嗘垚鑰屼嬌鐢ㄧ殑 Web 鏈嶅姟搴旇琚彂甯冨埌榪欎竴綾?UDDI 鑺傜偣銆傛綾?UDDI 鑺傜偣鐨勮寖鍥村彲浠ユ槸閮ㄩ棬鐨勬垨鍏徃鐨勫崟鐙殑搴旂敤紼嬪簭銆傝繖浜?UDDI 浣嶄簬闃茬伀澧欎箣鍚庯紝鍏佽鏈嶅姟鍙戝竷鑰呭浠栦滑鐨勬湇鍔℃敞鍐屼腑蹇冨拰瀹冪殑璁塊棶鏉冦佸彲鐢ㄦт互鍙婂彂甯冭姹傛湁鏇村鐨勬帶鍒躲?nbsp;
闂ㄦ埛緗戠珯 UDDI 鑺傜偣錛圥ortal UDDI node錛夎妭鐐癸細鐢卞叕鍙稿彂甯冧互渚涘閮ㄤ紮浼存煡鎵懼拰浣跨敤鐨?Web 鏈嶅姟鍙互浣跨敤闂ㄦ埛緗戠珯 UDDI 鑺傜偣銆傞棬鎴風綉绔欒妭鐐硅繍琛屽湪鏈嶅姟鎻愪緵鑰呯殑闃茬伀澧欎箣澶栨垨涔嬮棿銆傝繖縐嶄笓鐢?UDDI 鑺傜偣鍙寘鍚叕鍙稿笇鏈涘悜鏉ヨ嚜澶栭儴浼欎即鐨勮姹傝呮彁渚涚殑閭d簺鏈嶅姟鎻忚堪銆傝繖鍏佽鍏徃淇濈暀瀵逛粬浠湇鍔℃弿榪扮殑鎺у埗銆乁DDI 鑺傜偣鐨勮闂互鍙?UDDI 鑺傜偣鐨勬湇鍔¤川閲忋傛澶栵紝閫氳繃浣跨敤闂ㄦ埛緗戠珯涓浐鏈夌殑鍩轟簬瑙掕壊鐨勫彲瑙佹э紝浼佷笟灝嗘湇鍔℃弿榪扮殑鍙鎬у眬闄愬湪鍏佽鐪嬪埌瀹冧滑瀛樺湪鐨勪紮浼翠腑銆?nbsp;
浼欎即鐩綍 UDDI 鑺傜偣錛圥artner Catalog UDDI node錛夎妭鐐癸細鐢辯壒瀹氬叕鍙鎬嬌鐢ㄧ殑 Web 鏈嶅姟鍙互琚彂甯冨埌浼欎即鐩綍 UDDI 鑺傜偣銆備紮浼寸洰褰?UDDI 鑺傜偣浣嶄簬闃茬伀澧欎箣鍚庛傛綾諱笓鐢?UDDI 鑺傜偣鍙寘鍚潵鑷悎娉曚紒涓氫紮浼寸殑緇忚繃鍏佽鐨勩佹祴璇曡繃鐨勩佹湁鏁堢殑 Web 鏈嶅姟銆傛綾?Web 鏈嶅姟鐨勪笟鍔$幆澧冨拰鍏冩暟鎹彲浠ヨ瀹氫綅鍒扮壒瀹氱殑璇鋒眰鑰呫?nbsp;
鐢靛瓙甯傚満 UDDI 鑺傜偣錛圗-Marketplace UDDI node錛夎妭鐐癸細瀵逛簬鏈嶅姟鎻愪緵鑰呮墦綆楃敤鏉ヤ笌鍏跺畠 Web 鏈嶅姟绔炰簤璇鋒眰鑰呯殑涓氬姟鐨?Web 鏈嶅姟鏉ヨ錛屾湇鍔℃弿榪板簲璇ヨ鍙戝竷鍒扮數瀛愬競鍦?UDDI 鑺傜偣鎴?UDDI 榪愯惀鍟嗚妭鐐廣傜數瀛愬競鍦?UDDI 鑺傜偣鐢變竴涓涓氭爣鍑嗙粍緇囨垨紺懼洟鎵樼錛屽寘鍚壒瀹氳涓氫腑鐨勪紒涓氱殑鏈嶅姟鎻忚堪銆傛垜浠彲浠ヨ姹傝繖浜涙湇鍔℃敮鎸佺壒瀹氱殑鏍囧噯銆佸彲鎼滅儲鍏冩暟鎹佹帴鍙f垨鏁版嵁綾誨瀷銆傜數瀛愬競鍦?UDDI 鑺傜偣涓鑸細榪囨護鎺夋煇浜涢潪娉曠殑鏉$洰錛屽茍鎻愪緵鏈変繚璇佺殑鏈嶅姟璐ㄩ噺銆?nbsp;
UDDI 榪愯惀鍟嗚妭鐐癸細濡傛灉鎮ㄥ笇鏈?Web 鏈嶅姟鍙互琚綔鍦ㄧ殑鏂扮殑浼佷笟浼欎即鎴栨湇鍔$敤鎴峰彂鐜幫紝榪樺彲浠ュ皢鍏跺彂甯冨埌 UDDI 榪愯惀鍟嗚妭鐐廣侷BM銆丮icrosoft 鍜?Ariba 閮芥敮鎸併佸鍒跺拰鎵樼 UDDI 榪愯惀鍟嗚妭鐐廣傚湪鍙戝竷 UDDI 榪愯惀鍟嗚妭鐐圭殑鏃朵警錛屽鏋滆璁╂綔鍦ㄧ殑鏈嶅姟璇鋒眰鑰呭彂鐜版湇鍔$殑璇濓紝瀹屾暣鐨勪笟鍔$幆澧冨拰緇忚繃娣辨濈啛铏戠殑鍒嗙被娉曟槸寰堝繀瑕佺殑銆?br />
鍥?8. 鏈嶅姟鍙戠幇榪炵畫浣?br />
鍥?8 灞曠ず浜嗕粠鍙戝竷鍜屽彂鐜頒腑鏈闈欐併佹渶綆鍗曠殑鎶鏈埌鏈鍔ㄦ併佹洿澶嶆潅鐨勬妧鏈殑榪炵畫浣撱俉eb 鏈嶅姟鐨勭敤鎴鋒垨瀹炵幇鑰呬笉蹇呬弗鏍奸伒寰繖涓彂灞曢『搴忋?/p>
鏈嶅姟鍙戠幇
Web 鏈嶅姟鐨勫彂鐜板寘鎷幏鍙栨湇鍔℃弿榪板拰浣跨敤鎻忚堪銆傝幏鍙栬繃紼嬪彲浠ヤ嬌鐢ㄥ悇縐嶄笉鍚屾満鍒躲?/p>
鑾峰彇鏈嶅姟鎻忚堪
鍜屽彂甯?Web 鏈嶅姟鎻忚堪涓鏍鳳紝鏍規嵁鏈嶅姟鎻忚堪濡備綍琚彂甯冧互鍙?Web 鏈嶅姟搴旂敤紼嬪簭鍙兘杈懼埌鐨勫姩鎬佺▼搴︼紝鑾峰彇 Web 鏈嶅姟鎻忚堪涔熶細鏈夋墍涓嶅悓銆傛湇鍔¤姹傝呭皢鍦ㄥ簲鐢ㄧ▼搴忕敓鍛藉懆鏈熺殑涓や釜涓嶅悓闃舵錛屽嵆璁捐鏃跺拰榪愯鏃舵煡鎵?Web 鏈嶅姟銆傚湪璁捐鏃訛紝鏈嶅姟璇鋒眰鑰呮寜鐓т粬浠敮鎸佺殑鎺ュ彛綾誨瀷鎼滅儲 Web 鏈嶅姟鎻忚堪銆傚湪榪愯鏃訛紝鏈嶅姟璇鋒眰鑰呮牴鎹粬浠氳鐨勬柟寮忔垨鍏憡鐨勬湇鍔¤川閲忔悳绱?Web 鏈嶅姟銆?/p>
浣跨敤鐩存帴鍙戝竷鏂規硶鏃訛紝鏈嶅姟璇鋒眰鑰呭湪璁捐鏃跺鏈嶅姟鎻忚堪榪涜楂橀熺紦瀛橈紝浠ュ湪榪愯鏃朵嬌鐢ㄥ畠銆傛湇鍔℃弿榪板彲浠ヨ闈欐佸湴鐢ㄧ▼搴忛昏緫琛ㄧず錛屽茍瀛樺偍鍦ㄦ枃浠舵垨綆鍗曠殑鏈湴鏈嶅姟鎻忚堪璧勬簮搴撲腑銆?/p>
鏈嶅姟璇鋒眰鑰呭彲浠ュ湪璁捐鏃舵垨榪愯鏃跺湪鏈嶅姟鎻忚堪璧勬簮搴擄紙綆鍗曠殑鏈嶅姟娉ㄥ唽涓績鎴?UDDI 鑺傜偣錛変腑媯绱竴鏉℃湇鍔℃弿榪般傛煡鎵炬満鍒墮渶瑕佹敮鎸佷竴縐嶆煡璇㈡満鍒訛紝瀹冩彁渚涙寜鎺ュ彛綾誨瀷錛堝熀浜?WSDL 妯℃澘錛夈佺粦瀹氫俊鎭紙鍗沖崗璁級銆佸睘鎬э紙濡?QoS 鍙傛暟錛夈佹墍闇鐨勪腑浠嬬被鍨嬨佹湇鍔″垎綾繪硶銆佷紒涓氫俊鎭瓑絳夌殑鏌ユ壘銆?/p>
涓嶅悓綾誨瀷鐨?UDDI 鑺傜偣浼氭樉紺哄彲浠ラ夋嫨鐨勮繍琛屾椂緇戝畾 Web 鏈嶅姟鐨勬暟鐩佸閫変竴鐨勭瓥鐣ワ紝鎴栬呰皟鐢ㄦ湇鍔′箣鍓嶅繀欏葷敱璇鋒眰鑰呬綔鍑洪閫夌殑閲忋?/p>
鍐呴儴浼佷笟搴旂敤紼嬪簭 UDDI 鑺傜偣鍜屼紮浼寸洰褰?UDDI 鑺傜偣灝嗕笉闇瑕侀閫夋潵寤虹珛瀵規湇鍔$殑淇′換銆傛湇鍔¢夋嫨鍙互寤虹珛鍦ㄧ粦瀹氭敮鎸併佸巻鍙叉ц兘銆佹湇鍔¤川閲忓垎綾匯佺浉浼兼ф垨璐熻澆騫寵 鐨勫熀紜涔嬩笂銆?/p>
鐢靛瓙甯傚満 UDDI 鑺傜偣灝嗘湁鏇村鐨勮繍琛屾椂鏈嶅姟鍙互閫夋嫨銆傚繀欏繪墽琛屾煇縐嶉閫変互淇濊瘉 Web 鏈嶅姟鎻愪緵鑰呮槸鏈変環鍊肩殑浼欎即銆傛垜浠彲浠ユ牴鎹環鏍兼壙璇恒佸紑閿銆佺粡榪囧厑璁哥殑浼欎即鍒楄〃鐨勫嚭甯儏鍐碉紝鍚屾牱榪樻湁緇戝畾鏀寔銆佸巻鍙叉ц兘銆佹湇鍔¤川閲忓垎綾誨拰鐩鎬技鎬ф潵閫夋嫨鏈嶅姟銆?/p>
濡傛灉鏈嶅姟璇鋒眰鑰呬粠 UDDI 榪愯惀鍟嗚妭鐐規煡璇?Web 鏈嶅姟鎻愪緵鑰咃紝浠栦滑鍦ㄩ閫夊彲鑳界殑鏈嶅姟鎻愪緵鑰呮椂灝卞繀欏誨敖鍙兘璋ㄦ厧鍜岃鐪熴傚簲璇ユ湁涓涓湁鏁堝拰鍑嗙‘鐨勬満鍒跺氨浣嶏紝榪囨護鎺夋棤鐢ㄧ殑鏈嶅姟鎻忚堪鍜屾病鏈変環鍊肩殑鏈嶅姟鎻愪緵鑰呫?/p>
浣跨敤鏈嶅姟鎻忚堪
鍦ㄨ幏鍙栦簡鏈嶅姟鎻忚堪涔嬪悗錛屾湇鍔¤姹傝呴渶瑕佸鐞嗗畠浠ヨ皟鐢ㄦ湇鍔°傛湇鍔¤姹傝呬嬌鐢ㄦ湇鍔℃弿榪扮敓鎴愬 Web 鏈嶅姟鐨?SOAP 璇鋒眰鎴栫壒瀹氫簬緙栫▼璇█鐨勪唬鐞嗐傝鐢熸垚鍙互鍦ㄨ璁℃椂鎴栬繍琛屾椂榪涜錛屼粠鑰屽 Web 鏈嶅姟鐨勮皟鐢ㄨ繘琛屾牸寮忓寲銆傛垜浠湪璁捐鏃跺拰榪愯鏃跺彲浠ヤ嬌鐢ㄥ悇縐嶅伐鍏蜂粠 WSDL 鏂囨。鐢熸垚緙栫▼璇█緇戝畾銆傝繖浜涚粦瀹氳〃紺哄簲鐢ㄧ▼搴忕殑 API錛屽茍灝佽浜嗘潵鑷簲鐢ㄧ▼搴忕殑 XML 娑堟伅浼犻掔殑緇嗚妭銆?/p>
鍦ㄤ笅涓閮ㄥ垎錛屾垜浠皢鎻忚堪鍩烘湰 Web 鏈嶅姟浣撶郴緇撴瀯鐨勬墿灞曪紝鐢靛瓙鍟嗗姟闇瑕佽繖浜涙墿灞曟墠鑳戒嬌鐢?Web 鏈嶅姟銆?/p>
鍦ㄤ笅涓閮ㄥ垎錛屾垜浠皢鎻忚堪鍩烘湰 Web 鏈嶅姟浣撶郴緇撴瀯鐨勬墿灞曪紝鐢靛瓙鍟嗗姟闇瑕佽繖浜涙墿灞曟墠鑳戒嬌鐢?Web 鏈嶅姟銆?/p>
14.3.2 鐪熸鐨勭數瀛愬晢鍔$殑 Web 鏈嶅姟
铏界劧瀵逛簬鍙簰鎿嶄綔鐨?XML 娑堟伅浼犻掓潵璇?SOAP 鍜?HTTP 灝辮凍澶熶簡錛岃屼笖 WSDL 涔熻凍鍙互浼犺揪鏈嶅姟璇鋒眰鑰呭拰鏈嶅姟鎻愪緵鑰呬箣闂撮渶瑕佷粈涔堟牱鐨勬秷鎭紝浣嗘槸瑕佽鐩栫數瀛愬晢鍔$殑鍏ㄩ儴闇姹傝繕闇瑕佹洿澶氱殑鎶鏈備負浜嗗畬鍏ㄦ敮鎸佺數瀛愬晢鍔★紝瀹夊叏鎬с佸彲闈犵殑娑堟伅浼犻掋佹湇鍔¤川閲忋乄eb 鏈嶅姟鍗忚鏍堢殑姣忎竴灞傜殑綆$悊閮介渶瑕佹墿灞曘?/p>
瀹夊叏鎬?/p>
鐪熺殑闇瑕?Web 鏈嶅姟瀹夊叏灞傚悧錛熷浜庡熀浜庢秷鎭殑浣撶郴緇撴瀯錛屼笟鐣屽凡緇忔湁涓濂楃幇鎴愮殑鑰屼笖騫挎硾鎺ュ彈鐨勪紶杈撳眰瀹夊叏鏈哄埗錛屾瘮濡傦紝瀹夊叏濂楁帴瀛楀眰錛圫ecure Sockets Layer錛孲SL錛夊拰緗戦檯鍗忚瀹夊叏錛圛nternet Protocol Security錛孖PSec錛夛紝涓轟粈涔堣繕瑕佸啀鍔犲埆鐨勫憿錛熶負浜嗗洖絳旇繖涓棶棰橈紝鎴戜滑涓嶄粎瑕佺爺絀惰姹傦紝榪樺皢鎺㈣涓浜涘彧渚濋潬鐜版湁鐨勫嚑綾諱紶杈撳眰瀹夊叏鏈哄埗騫朵笉鑳藉湪 Web 鏈嶅姟妯″瀷鍐呮彁渚涜凍澶熺殑瀹夊叏鎬х殑鎯呭喌銆?/p>
閫氬父錛學eb 鏈嶅姟瀹夊叏灞傚繀欏繪彁渚涗互涓嬪洓涓熀鏈殑瀹夊叏鎬ц姹傦細
鏈哄瘑鎬э紙Confidentiality錛夋槸鎸囦俊鎭娌℃湁緇忚繃鎺堟潈鐨勪釜浜恒佸疄浣撴垨榪涚▼鐨勪笉鍙敤鎬ф垨涓嶅叕寮鎬э紝騫朵繚璇佹秷鎭唴瀹逛笉瀵規病鏈夌粡榪囨巿鏉冪殑涓漢鍏紑銆?nbsp;
鎺堟潈錛圓uthorization錛夋槸鎸囨潈闄愮殑鎺堜簣錛屽寘鎷牴鎹闂潈闄愭巿浜堣闂潈鍜屼繚璇佸彂閫佹柟琚巿鏉冨彂閫佹秷鎭?nbsp;
鏁版嵁瀹屾暣鎬э紙Data integrity錛夋槸鎸囨暟鎹病鏈変互鏈粡鎺堟潈鐨勬柟寮忔垨琚湭緇忔巿鏉冪殑鐢ㄦ埛涓嶅彲瀵熻鐨勬敼鍙樻垨鑰呯牬鍧忕殑鎬ц川錛屼粠鑰岀‘淇濇秷鎭湪浼犻佺殑榪囩▼涓笉浼氳鍋剁劧鎴栨晠鎰忎慨鏀廣?nbsp;
鍘熷鎬ц瘉鏄庯紙Proof of origin錛夋槸瀵規秷鎭垨鏁版嵁鐨勫彂閫佽呰繘琛屾爣璇嗙殑璇佹嵁銆傛柇璦娑堟伅鐢辨紜爣璇嗙殑鍙戦佽呬紶閫侊紝騫朵笖涓嶄細閲嶆柊鍙戦佷互鍓嶄紶閫佽繃鐨勬秷鎭傝繖涓瑕佹眰闅愬惈浜嗘暟鎹畬鏁存х殑瑕佹眰銆?nbsp;
鐢變簬闇瑕佸湪鍩轟簬 XML 娑堟伅鍜屽伐浣滄祦鐨勫姩鎬?Web 鏈嶅姟涓栫晫涓鐞嗕笉鍚岄鏍肩殑璧勬簮璁塊棶錛屾墍浠ュ繀欏婚噸鏂拌瘎浼扮瓥鐣ャ佷俊浠誨拰椋庨櫓璇勪及榪欎笁鑰呯浉浜掍箣闂寸殑鍏崇郴銆傜幇鏈夌殑鍩轟簬涓漢韜喚鐨勮闂帶鍒舵ā鍨嬫鍦ㄥ彂灞曟垚涓哄熀浜庤鑹茬殑淇′換鍩熷叧緋伙紝鍦ㄨ縐嶅叧緋諱腑錛屽彲淇′換鐨勬潈濞佹満鏋勫皢鎵ц鏌愰」浠誨姟鐨勬潈闄愭巿浜堜釜浜猴紝鍏惰涓哄彈璇ユ潈闄愰檺鍒躲俉eb 鏈嶅姟浣撶郴緇撴瀯瀹氫箟浜嗛渶瑕佷俊鎭殑浠g悊錛堟湇鍔¤姹傝咃級銆佹彁渚涗俊鎭殑浠g悊錛堟湇鍔℃彁渚涜咃級錛屾湁鏃惰繕鏈夋彁渚涘叧浜庝俊鎭殑淇℃伅鐨勪唬鐞嗭紙鏈嶅姟涓粙鑰呫佸厓淇℃伅鎻愪緵鑰呮垨鏈嶅姟娉ㄥ唽涓績錛夈傛湇鍔′腑浠嬭呯粡甯鎬細鏀跺埌澶ч噺淇℃伅璇鋒眰錛岃繖鏍峰氨闇瑕佸畠鑳藉鍐沖畾璋佹兂瑕佸摢浜涗俊鎭互鍙婅姹傝呮槸涓嶆槸宸茬粡琚巿浜堣闂潈銆傚熀紜璁炬柦鍜屽叧緋誨彉鍖栬繀閫燂紝鍥犳鏈夊叧鐨勭瓥鐣ラ渶瑕佽兘鐏墊椿鐨勫厑璁告垨鎷掔粷璁塊棶銆?/p>
姝ゅ錛屽敖綆?XML 鍙戣獡瑕佷負榪欐牱鐨勬湇鍔℃彁渚涢氱敤鎺ュ彛錛屼絾 XML 涓嶄細鎻愪緵瀹炵幇榪欎竴姊︽兂鎵闇瑕佺殑鏁翠釜鍩虹璁炬柦銆傝屼笖錛孹ML 鍙兘涓嶉傚悎鏋勫緩鏁翠釜 Web 鏈嶅姟瀹夊叏灞傘傜洰鏍囨槸瑕佺‘瀹氬湪鍝簺鍦哄悎鐢?XML 鏍煎紡鎻愪緵淇℃伅浠ラ【鍙婇氱敤鏁版嵁浜ゆ崲杈冧負閲嶈錛屼互鍙婂湪鍝簺鍦哄悎鍒╃敤鐩墠宸插瓨鍦ㄤ簬騫沖彴涔嬩笂鐨勭幇鏈夊畨鍏ㄦф満鍒惰緝涓洪噸瑕併?/p>
SOAP 淇″皝鏄敤 XML 瀹氫箟鐨勶紝浠庤屼嬌鎮ㄥ彲浠ュ悜娑堟伅娣誨姞縐嶇被浼楀鐨勫厓淇℃伅錛屾瘮濡備簨鍔?ID銆佹秷鎭礬鐢變俊鎭拰娑堟伅瀹夊叏鎬с係OAP 淇″皝鐢變袱涓儴鍒嗙粍鎴愶細澶村拰涓諱綋銆傚ご鏄妸鍔熻兘娣誨姞鍒?SOAP 娑堟伅涓殑閫氱敤鏈哄埗銆係OAP 澶村厓绱犱笅涓綰х殑鎵鏈夊瓙鍏冪礌閮藉彨鍋氬ご鏉$洰銆備富浣撴槸涓烘渶緇堢殑娑堟伅鎺ユ敹鏂規兂瑕佺殑搴旂敤鏁版嵁錛堝 RPC錛夊噯澶囩殑瀹瑰櫒銆傚洜姝わ紝鍙互鎶?SOAP 鐪嬩綔鏄湪浼犺緭灞傦紙渚嬪 HTTP錛夊拰搴旂敤灞傦紙渚嬪錛屼笟鍔℃暟鎹級涔嬮棿寮曞叆鐨勫彟澶栦竴灞傦紝鍦ㄦ鍙互鏂逛究鐨勪紶閫佹秷鎭厓淇℃伅銆係OAP 澶存彁渚涘彲鎵╁睍鏈哄埗浠ユ墿灞?SOAP 娑堟伅浣垮叾鍙互閫傜敤浜庡縐嶇敤閫斻傝櫧鐒?SOAP 澶存槸鍚戞秷鎭坊鍔犲畨鍏ㄦу姛鑳芥渶鍚堢悊鐨勫湴鏂癸紝浣嗘槸 SOAP 瑙勮寖鏈韓騫舵病鏈夋寚瀹氳繖鏍風殑澶村厓绱犮?/p>
璁╂垜浠粩緇嗙殑鍒嗘瀽涓涓嬪湪 Web 鏈嶅姟妯″瀷涓幇鏈夌殑鍚勭鍚勬牱鐨勪紶杈撳眰瀹夊叏鏈哄埗涓轟粈涔堜笉澶燂紝鍙堜負浠涔堜細闇瑕?Web 鏈嶅姟瀹夊叏灞傦紝浠ュ強榪欎釜瀹夊叏灞傛渶鍒濇槸鎬庢牱鐨勩?/p>
绔绔殑娑堟伅浼犻掋傚畨鍏ㄤ紶杈撳崗璁紝濡?SSL 鍜?IPSec錛屽彲浠ュ湪浼犺緭榪囩▼涓彁渚涙秷鎭畬鏁存у拰鏈哄瘑鎬э紝浣嗗彧鏈夊湪鐐瑰鐐圭殑鎯呭喌涓嬶紝瀹冧滑鎵嶄細榪欐牱鍋氥備絾鏄紝鍥犱負 SOAP 娑堟伅鏄敱涓粙浣撴帴鏀跺茍澶勭悊鐨勶紝鎵浠ュ嵆渚夸袱涓や箣闂寸殑閫氫俊閾捐礬錛坈ommunication link錛夋槸鍙俊浠葷殑錛屽彧瑕佸湪鎵鏈夌殑涓粙浣撻棿娌℃湁淇′換鍏寵仈錛坱rust association錛夛紝閭d箞瀹夊叏鐨勭瀵圭閫氫俊灝辨槸涓嶅彲鑳界殑銆傚鏋滄湁涓鏉¢氫俊閾捐礬涓嶅畨鍏紝閭d箞绔绔畨鍏ㄦт篃浼氳鍓婂急銆傚氨 Web 鏈嶅姟鎷撴墤鏉ョ湅錛屽畨鍏ㄧ殑浼犺緭瀵逛簬 SOAP 娑堟伅鐨勭瀵圭瀹夊叏鎬ф槸涓嶅鐨勩?/p>
涓棿浠剁殑鐙珛鎬с傛渶緇堬紝鍞竴鑳芥彁渚涚瀵圭瀹夊叏鎬х殑鏂瑰紡灝卞湪浜庡簲鐢ㄥ眰鎴栦腑闂翠歡灞傘傚鏋滄秷鎭湪閫氫俊鏂逛箣闂寸殑鏌愮偣鏄函鏂囨湰錛岄偅涔堝氨鏈夊彲鑳藉湪榪欑偣鍙楀埌鏀誨嚮銆備絾鏄紝鏃㈣鍦ㄦ柊鐨勬垨鐜版湁鐨勫簲鐢ㄤ腑闆嗘垚鍔犲瘑鍔熻兘錛屽張涓嶈兘寮曞叆棰濆鐨勫畨鍏ㄦу急鐐規垨澧炲姞椋庨櫓錛岃繖鏄竴欏逛笉瀹規槗鍙堜笉鍙楁榪庣殑浠誨姟銆傚洜姝わ紝鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝浜轟滑甯屾湜瀹夊叏鎬у姛鑳藉敖鍙兘闈犺繎搴旂敤錛屼絾涓嶅湪搴旂敤鏈韓涓瀯寤恒?/p>
浼犺緭鐨勭嫭绔嬫с係OAP 涓粙浣撶殑鍘熸剰鏄敤鏉ユ妸淇℃伅杞彂鍒頒笉鍚岀殑緗戠粶涓婂幓錛岄氬父浣跨敤鐨勪紶杈撳崗璁篃浼氭湁鎵涓嶅悓銆傝櫧鐒舵墍鏈夌殑閫氫俊閾捐礬閮芥槸瀹夊叏鐨勶紝涓粙浣撲篃鏄煎緱淇¤禆鐨勶紝浣嗘槸錛屽畨鍏ㄤ俊鎭紙濡傛秷鎭彂閫佽呯殑韜喚楠岃瘉錛夐渶瑕佽杞Щ鍒版秷鎭礬寰勪笂鐨勪笅涓涓紶杈撳崗璁畨鍏ㄦу煙錛岃繖涓繃紼嬪啑闀胯屼笖澶嶆潅錛岃繕鍙兘浼氬鑷村畬鏁存ф柟闈㈢殑緙洪櫡銆?/p>
寮傛澶氶樁娑堟伅浼犻掋備紶杈撳眰瀹夊叏鎬т繚璇佹暟鎹湪閫氫俊閾捐礬涓婁紶杈撴椂鐨勫畨鍏ㄣ傚畠涓庡瓨鍌ㄥ湪浠諱綍涓粙浣撲笂鐨勬暟鎹兘鏃犲叧銆傚湪涓嬈′紶杈撹鎺ユ敹騫惰В瀵嗗悗錛屼紶杈撳眰瀹夊叏鎬у淇濇姢鏁版嵁鍏嶅彈娌℃湁緇忚繃鎺堟潈鐨勮闂拰鍙兘鐨勬敼鍙樺氨涓嶆槸寰堟湁甯姪浜嗐傚湪鍏堝瓨鍌ㄦ秷鎭劧鍚庤漿鍙戠殑鎯呭喌涓嬶紙鎸佷箙鐨勬秷鎭槦鍒楋級錛屾秷鎭眰淇濇姢鏄湁蹇呰鐨勩?/p>
鍥犱負鎴戜滑宸茬粡鐪嬪埌瀹夊叏鐨勪紶杈撴満鍒朵笉瓚充互婊¤凍 Web 鏈嶅姟寮鍙戞柟娉曞拰浣跨敤鍦烘櫙鐨勮姹傦紝鎵浠ユ垜浠殑浠誨姟灝辨槸瑕佸垱寤轟竴涓蹇墊?Web 瀹夊叏灞傦紝鍖呮嫭涓嬪垪鍑犱釜緇勪歡錛?/p>
瀵逛簬緗戠粶瀹夊叏鎬э細
鏀寔濡?SSL 鍜?HTTPS 絳夋彁渚涙満瀵嗘у拰瀹屾暣鎬х殑瀹夊叏浼犺緭鏈哄埗銆?nbsp;
瀵逛簬 XML 娑堟伅錛?nbsp;
濡傛灉閫氫俊娌℃湁涓棿鑺傜偣錛岄偅涔堝彂閫佹柟鍙互渚濋潬 SSL 鎴?HTTPS 鏉ヤ繚璇佺敤鎴鋒爣璇嗗拰瀵嗙爜鐨勬満瀵嗘с?nbsp;
W3C 姝e湪鏍囧噯鍖?XML 鏁板瓧絳懼悕宸ヤ綔鐨勬敮鎸併傚畠瀹氫箟浜嗙敓鎴愭秷鎭憳瑕佷笌鍒╃敤鍙戦佹柟鐨勭閽ユ潵絳懼彂娑堟伅鐨勬爣鍑?SOAP 澶村拰綆楁硶銆傚洜姝わ紝鎺ユ敹鏂瑰氨鍙互璇佹槑娑堟伅鍙戦佹柟鐨勮韓浠姐?nbsp;
瀵圭綉緇滃唴閮ㄧ殑銆佸彲淇′換鐨勭涓夋柟楠岃瘉鏈嶅姟錛堜緥濡?Kerberos錛夌殑鏀寔銆?nbsp;
姒傚康鎬?XML 娑堟伅浼犻掓ā鍨嬭繕蹇呴』鏀寔绔绔繚鎶ゆ秷鎭強鍏跺瓙鍏冪礌銆備負浜嗗叏闈㈢殑鏀寔錛岃繃紼嬪拰嫻佽兘鍔涢渶瑕佽鎵╁睍鍒板寘鎷秷鎭氦鎹㈢殑瀹夊叏鎬х壒寰併傚簲璇ユ湁涓縐嶆柟寮忓彲浠ュ畾涔夊孌墊秷鎭拰鐢ㄩ鏈熸帴鏀舵柟鐨勫叕閽ユ潵淇濇姢娑堟伅孌點傞渶瑕佹帰璁ㄧ殑涓浜涜棰樻湁錛?/p>
绔偣璐熻矗瀹炵幇楠岃瘉鍙婃巿鏉冦傚簲璇ユ敮鎸佸湪浼佷笟涔嬮棿浜ゆ崲淇℃伅鐨勫悎鍚岀殑浠諱綍鎻忚堪涓兘瑕佸畾涔夊摢浜涢泧鍛樺彲浠ヤ嬌鐢ㄥ摢浜涙湇鍔°備腑浠嬩綋璐熻矗瀹¤鍜屾湇鍔″師濮嬫ц瘉鏄庛備腑浠嬩綋榪樺彲鑳介渶瑕佹墽琛岄獙璇併佹巿鏉冨拰鏁板瓧絳懼悕楠岃瘉浠ュ強鏈夋晥鎬ф鏌ャ?nbsp;
鍦ㄦ湇鍔$鐐圭殑鏈嶅姟鎻忚堪灞備腑闇瑕佸畾涔夋敮鎸佷笂鏂囪榪扮殑瀹夊叏鎬ч棶棰樼殑闈㈠悜瀹夊叏鎬у厓鏁版嵁銆傝繖浜涘畨鍏ㄦф弿榪板皢鏍規嵁涓諱綋鎴栬鑹插畾涔?Web 鏈嶅姟灞傝闂帶鍒躲傛湇鍔℃弿榪板皢浼氭弿榪版槸鍚︽敮鎸佹暟瀛楃鍚嶃佸姞瀵嗐侀獙璇佸拰鎺堟潈浠ュ強濡備綍鏀寔瀹冧滑銆?nbsp;
璇鋒眰鑰呭皢浣跨敤鏈嶅姟鎻忚堪鐨勫畨鍏ㄦу厓绱犳潵鏌ユ壘鏈嶅姟绔偣錛岃绔偣搴旂鍚堟斂絳栬姹傚強鍏跺畨鍏ㄦф柟娉曘?nbsp;
鏍囧噯緇勬鍦ㄨ皟鏌ュ涓嬩富棰樺拰鎶鏈傞殢鐫榪欎簺鏍囧噯鍥哄畾涓嬫潵錛屽畠浠皢浼氳騫跺叆 Web 鏈嶅姟瀹夊叏鎬т綋緋葷粨鏋勩?/p>
W3C 鏈変竴涓?XML 鍔犲瘑宸ヤ綔緇勶紝甯姪鎻愪緵鏁版嵁鍏冪礌鐨勬満瀵嗘э紝榪欐牱楠岃瘉浜ゆ崲鎴愪負鍙兘銆?nbsp;
W3C 宸插彂甯冧簡涓涓?XML 瀵嗛挜綆$悊鏈嶅姟錛圶ML Key Management Services錛孹KMS錛夌殑澶囧繕褰曪紝鏉ュ府鍔╁垎鍙戝強綆$悊鍦ㄧ鐐逛箣闂磋繘琛屽畨鍏ㄧ殑閫氫俊鎵闇鐨勫瘑閽ャ?nbsp;
OASIS 宸茬粡鎴愮珛浜嗕竴涓妧鏈鍛樹細鏉ュ畾涔夋巿鏉冨拰楠岃瘉鏂█錛圓uthorization and Authentication assertions錛孲AML錛夈傝繖灝嗗府鍔╃鐐規帴鍙楀拰鍐蟲柇璁塊棶鎺у埗鏉冦?nbsp;
OASIS 宸茬粡鎴愮珛浜嗕竴涓妧鏈鍛樹細鏉ユ爣鍑嗗寲璁塊棶鎺у埗鏉冪殑琛ㄨ揪錛圶ACML錛夈傝繖灝嗗府鍔╃鐐硅兘澶熶互涓鑷寸殑鏂瑰紡瑙f瀽 SAML 鏂█銆?nbsp;
闅忕潃鎴戜滑涓嶆柇鐨勭爺絀?Web 鏈嶅姟妯″瀷涓亣鍒扮殑鎵鏈夊▉鑳佸拰瀵圭瓥錛學eb 鏈嶅姟瀹夊叏鎬т綋緋葷粨鏋勪篃鍦ㄤ笉鏂彂灞曠潃銆?/p>
鏈嶅姟璐ㄩ噺錛圦oS錛夊拰鍙潬鐨勬秷鎭紶閫?/p>
鏈嶅姟璐ㄩ噺鍨傜洿濉旀彁渚涗笌 Web 鏈嶅姟姒傚康鏍堟瘡涓灞傛湁鍏崇殑淇℃伅鐨勮鑼冦傚浜庣綉緇滃眰錛岃繖灝嗕細鏆楃ず鑳戒嬌鐢ㄥ悇縐嶇駭鍒殑鏈嶅姟璐ㄩ噺鐨勭綉緇溿?/p>
鐢變簬闇瑕侀氳繃緗戠粶榪涜鍙潬鐨勬秷鎭紶閫掞紝鎵浠ュ緱鏍規嵁鍦ㄨ繖涓棰嗗煙鍐呭彂閫侀珮璐ㄩ噺鏈嶅姟鐨勮兘鍔涙潵閫夋嫨緗戠粶鎶鏈傚彲闈犵殑娑堟伅浼犻掓寚鍩虹璁炬柦鎶婃秷鎭竴嬈″彂閫侊紙鍙彂閫佷竴嬈★級鍒伴瀹氱洰鏍囨垨鎻愪緵紜畾鐨勪簨浠訛紙濡傛灉鍙戦佹病鑳藉畬鎴愶紝涔熻浼氶噸鏂板彂閫佸埌婧愶級鐨勮兘鍔涖傜粨鍚堢綉緇滃眰涓?XML 娑堟伅浼犻掑皢闇瑕佹敮鎸佸洓涓瓑綰х殑娑堟伅浼犻掓湇鍔¤川閲忥細
1. 鏈浣沖姫鍔涳細鏈嶅姟璇鋒眰鑰呭彂閫佹秷鎭紝鏈嶅姟璇鋒眰鑰呭拰鍩虹璁炬柦涓嶅皾璇曢噸鍙戙?/p>
2. 鑷沖皯涓嬈★細鏈嶅姟璇鋒眰鑰呮彁鍑鴻姹傦紝騫朵竴鐩撮噸璇曠洿鍒板畠鎺ユ敹鍒扮‘璁や負姝€傛湇鍔℃彁渚涜呴噸澶嶆秷鎭鐞嗕笉鏄棶棰橈紝渚嬪綆鍗曠殑鏌ヨ澶勭悊銆傚疄鐜拌繖鍙兘鎰忓懗鐫姣忎釜娑堟伅鍖呭惈鍞竴鐨勬爣璇嗐傛湇鍔¤姹傝呬互鑷繁紜畾鐨勬椂闂撮棿闅旈噸鍙戞病鏈夊緱鍒扮‘璁ょ殑娑堟伅銆傛湇鍔℃彁渚涜呭彂鍑虹‘璁ゆ秷鎭紝涓?RPC 鍝嶅簲娑堟伅錛屽鏋滀笉鑳藉鐞嗙殑璇濓紝灝卞彂閫佷笉鑳藉鐞嗙殑娑堟伅寮傚父銆?/p>
3. 鑷沖涓嬈★細榪欏緩绔嬪湪鏈灝戜竴嬈℃儏鍐電殑鍩虹涔嬩笂銆傛湇鍔¤姹傝呰瘯鐫璇鋒眰鐩村埌瀹冨緱鍒板洖搴斻傝薄鐜版湁鐨勫叏灞鍞竴鏍囪瘑絎︼紙universal unique identifier錛孶UID錛夎繖鏍風殑鏈哄埗鍏佽鏈嶅姟鎻愪緵鑰呮姂鍒墮噸澶嶅嬈$殑璇鋒眰錛屼互紜繚璇鋒眰涓嶄細琚嬈℃墽琛屻備緥濡傦紝璇鋒眰鏍規嵁搴撳瓨鐩綍涓殑涓涓彿鐮佹嬁涓浠朵笢瑗褲?/p>
4. 鍒氬ソ涓嬈★細鏈嶅姟璇鋒眰鑰呮彁鍑鴻姹傦紝璇鋒眰宸茬粡鎵ц鐨勫洖搴斾嬌鍏跺緱鍒頒繚璇併傚垰濂戒竴嬈′氦鎹㈡ā寮忔帓闄や簡閲嶄紶璇鋒眰鐨勯渶瑕佸茍涓旈傚簲澶辨晥鐨勬儏鍐點?/p>
鍙潬鐨勬秷鎭紶閫掗氬父鏄氳繃鏍囧噯璁捐妯″紡浼犻佺殑錛屽湪璇ユā寮忎腑錛屼竴浠跺熀紜璁炬柦錛屾湁鏃跺彨鍋氱鐐圭鐞嗗櫒錛屽皢浼氳鐢ㄦ潵鍦ㄩ氫俊鐨勬瘡涓绔崗璋冩秷鎭彂閫併傚湪榪欑妯″紡涓紝鍙戦佹柟閫氳繃鍚屾璇鋒眰鎶婃秷鎭彂緇欑鐐圭鐞嗗櫒銆備竴鏃﹀彂閫佸埌錛屽彂閫佹柟灝卞彲浠ュ緱鍒頒繚璇侊紝涓瀹氫細鎶婃秷鎭彂閫佸嚭鍘繪垨寮曞彂紜畾鐨勪簨浠訛紙渚嬪瓚呮椂錛夈傜鐐圭鐞嗗櫒涓庡叾瀹冭祫婧愮鐞嗗櫒鍙備笌鏈湴浜嬪姟錛屽湪涓嬈′簨鍔′腑涓嶄粎鍙互鐢辯鐐圭鐞嗗櫒瀵規秷鎭繘琛屾帓闃燂紝榪樻湁鍙兘鍦ㄦ暟鎹簱涓褰曚笟鍔¤繃紼嬫楠ゃ傚簲鐢ㄧ▼搴忓簲璇ユ寚媧劇鐐圭鐞嗗櫒鏉ヨ礋璐e彂閫佹秷鎭垨鑰呮嫻嬪彂閫佸け璐ョ殑鍘熷洜錛屽畠鍦ㄧ綉緇滀紶杈撳眰鎴?XML 娑堟伅浼犻掑眰閮藉彲浠ヨ搗浣滅敤銆?/p>
鍙潬鐨勪竴嬈℃ф秷鎭彂閫佺殑鎶鏈拰鐩殑閮戒笉浼氬紩璧蜂簤璁備絾鏄紝鍥寸粫濡備綍鍦?SOAP 鍜?XML 鐨勪笂涓嬫枃涓敮鎸佽繖欏規妧鏈凡緇忔彁鍑轟簡閲嶈鐨勮川鐤戙傚叧閿棶棰樻槸錛氬簲涓嶅簲璇ュ湪 XML 娑堟伅灞備笂瀹氫箟蹇呰鐨勫崗璁拰娑堟伅鏍煎紡錛屼粠鑰屽厑璁稿彲闈犵殑娑堟伅鍙戦佹垚涓轟袱绔簲鐢ㄧ▼搴忕殑璐d換錛屾垨鑰呰兘涓嶈兘鍦ㄨ緝浣庣殑灞傦紙濡備紶杈撳眰涓婏級瀹氫箟鍗忚鍜屾秷鎭牸寮忥紵
鍦ㄦ病鏈夋敮鎸佸彲闈犵殑娑堟伅浼犻掔殑浼犺緭鏂瑰紡鐨勬儏鍐典笅錛堝嵆浜掕仈緗戯級錛孹ML 娑堟伅浼犻掑眰灝嗛渶瑕佸湪涓嶅彲闈犵殑鍩虹璁炬柦涔嬩笂鏀寔榪欎簺鏈嶅姟璐ㄩ噺銆傜鐐圭鐞嗗櫒灝嗛渶瑕佷慨鏀規秷鎭紝鑰屼笉鏄慨鏀規秷鎭殑浼犺緭淇″皝錛岃繖鏍鋒墠鑳芥垚鍔熸壆婕斿叾瑙掕壊銆傚簲鐢ㄧ▼搴忓拰涓氬姟榪囩▼鐨勫畾涔夊皢蹇呴』鑰冭檻鎵鏈夊彲鑳界殑緇撴灉錛屽鎷掓敹娑堟伅鎴栧湪鍙帴鍙楃殑鏃墮棿闀垮害鍐呭彂閫佷笉鍑哄幓銆備絾鏄紝榪欎簺瀹氫箟榪橀渶瑕佽冭檻鍦ㄥ彂閫佽繃紼嬩腑鍙戠敓鐨勪腑闂寸姸鎬併傚悜涓氬姟榪囩▼鍏紑榪欎簺鐘舵佸彲鑳戒細澶уぇ澧炲姞鍏跺畾涔夌殑澶嶆潅紼嬪害錛屼絾瀵逛簬瀹氫箟榪囩▼鐨勪笟鍔″垎鏋愬笀鑰岃█騫舵棤澶ぇ鎰忎箟銆傚湪涓浜涙儏鍐典笅錛屼嬌鐢?XML 娑堟伅浼犻掓潵鍙戦佸彲闈犵殑娑堟伅浼犻掓牸寮忓彲鑳戒細瀵艱嚧浣跨敤鐜版湁鐨勮繖浜涗紶杈撴鏃犳晥鐜囥傛渶濂借兘寮鍙戜竴縐嶅湪浜掕仈緗戜笂浣跨敤鐨勫彲闈犵殑 HTTP 鏍囧噯銆?/p>
鍦ㄦ湁鏀寔鍙潬鐨勬秷鎭紶閫掔殑浼犺緭鏂瑰紡鐨勬儏鍐典笅錛堝嵆鍦ㄤ紒涓氬唴閮級錛屽畠鍙互鐢ㄤ簬鍙戦佸彲闈犵殑娑堟伅錛岃屼笉鏄?XML 娑堟伅浼犻掑眰錛堝彲鑳界己鐪佷負絀哄疄鐜幫級銆傜鐐圭鐞嗗櫒灝嗕細鍙慨鏀逛紶杈撲俊灝侊紝鑰屼笉浼氫慨鏀?XML 娑堟伅銆備嬌鐢ㄥ彲闈犵殑浼犺緭浣垮簲鐢ㄧ▼搴忓拰涓氬姟榪囩▼瀹氫箟涓嶉渶瑕佺煡閬撴垨澶勭悊娑堟伅鍙戦佺殑涓棿鐘舵併?/p>
闇瑕佸湪灝嗘潵榪涜鐨勫嚑鐐硅ˉ鍏咃細
浜掕仈緗戠殑 HTTP 闇瑕佸姞浠ユ敼榪涙墠鑳芥彁渚涘彲浠ュ湪浼佷笟闂翠嬌鐢ㄧ殑綆鍗曞彲闈犵殑娑堟伅浼犻掋傝繖浼氬甫鏉ラ澶栫殑濂藉錛氫笉姝?SOAP錛岃澶氱娑堟伅綾誨瀷閮藉彲浠ラ噰鐢ㄥ彲闈犵殑娑堟伅浼犻掋傞渶瑕?XML 娑堟伅浼犻掑眰澶勭悊鍙潬鐨勬秷鎭紶閫掔殑鎯呭喌灝變細闅忎箣鍑忓皯錛屼績榪涗笉渚濊禆浜庣綉緇滈夋嫨鐨勫簲鐢ㄧ▼搴忓紑鍙戙?nbsp;
HTTP 涓婄殑 XML 娑堟伅浼犻掑眰涔熼渶瑕佸鐞嗗彂甯冨拰璁㈤槄銆佹秷鎭帓搴忋佸彂閫佹椂闂撮檺鍒躲佷紭鍏堢駭鍜屽鐐逛紶閫佺瓑絳夐棶棰樸?nbsp;
鏈嶅姟鎻愪緵鑰呭鍙潬鐨勬秷鎭紶閫掔殑璐ㄩ噺鍜屽疄鐜扮殑鏀寔鎯呭喌灝嗕細鍦ㄦ湇鍔℃弿榪扮殑緇戝畾淇℃伅涓畾涔夈?/p>
鏈嶅姟瀹炵幇灞傦紙渚嬪錛岄氳繃浜嬪姟鐨勬垨瀹夊叏鐨?SOAP 緇戝畾錛夌殑鏈嶅姟鎻忚堪浠ュ強鎺ュ彛灞傦紙渚嬪錛屼粠璇鋒眰鑰呭紑濮嬬瓑寰呮潵鑷彁渚涜呯殑鍝嶅簲涔嬪悗鏈闀跨粡榪囧涔咃級鐨勫叾瀹冩湇鍔℃弿榪頒腑閮戒細鍏崇郴鍒版湇鍔¤川閲忥紙Quality of Service錛変俊鎭備漢浠湡寰呯潃寮鍙戝嚭 WSDL 鎵╁睍鎴栨柊鐨勬湇鍔℃弿榪板眰鏉ュ厑璁告寚瀹氬叾瀹冩湇鍔¤川閲忓拰鍔熻兘鐨勮鑼冦?/p>
Web 鏈嶅姟灞備笂鐨勬湇鍔¤川閲忓彲浠ュ湪鏈嶅姟鍚堟垚鍜屾湇鍔℃祦涓嬌鐢ㄣ傚湪涓烘祦閫夋嫨鏈嶅姟鎴栨彁紺烘祦綆$悊鍣ㄨ寮濮嬫仮澶嶆垨鍏跺畠鐨勬祦鏃訛紝棰勬湡鐨勬墽琛屾椂闂淬佽秴鏃跺箋佸巻鍙插鉤鍧囨墽琛屾椂闂村奸兘鍙互浣滀負杈撳叆銆傛湇鍔℃弿榪版爤鐨勭鐐規弿榪板眰鍜屽伐浣滄祦鎻忚堪灞傚繀欏繪彁渚涜繖涓淇℃伅銆?/p>
Web 鏈嶅姟鐨勬湇鍔¤川閲忛棶棰樺拰瑙e喅鏂規浠嶇劧寰堢揣榪?/p>
緋葷粺鍜屽簲鐢ㄧ▼搴忕鐞?Management)
闅忕潃 Web 鏈嶅姟鎴愪負鍟嗕笟榪愪綔鐨勯噸瑕佸洜绱狅紝灝遍渶瑕佸鍏惰繘琛岀鐞嗐傚湪榪欑鎯呭喌涓嬶紝鎵璋撶鐞嗘槸鎸囦笓涓哄簲鐢ㄧ▼搴忓畾鍒剁殑鎴栦粠鍘傚晢閭i噷涔版潵鐨勭鐞嗗簲鐢ㄧ▼搴忓彲浠ュ彂鐜?Web 鏈嶅姟鐨勫熀紜璁炬柦銆乄eb 鏈嶅姟銆佹湇鍔℃敞鍐屼腑蹇冨拰 Web 鏈嶅姟搴旂敤紼嬪簭瀛樺湪鎬с佸彲鐢ㄦт互鍙婂仴搴峰害銆傛渶浠や漢婊℃剰鐨勭粨鏋滄槸綆$悊緋葷粺榪樺簲褰撹兘澶熸帶鍒跺拰閰嶇疆鍩虹璁炬柦鍙婄粍浠躲?/p>
綆$悊姒傚康鎬?Web 鏈嶅姟鏍堝悇灞傜殑 Web 鏈嶅姟鍜?Web 鏈嶅姟妯″瀷緇勪歡蹇呭畾鏄湁鍙兘鐨勩傚綆$悊鐨勯渶姹傚彲浠ュ垎鎴愪袱涓泦涓殑棰嗗煙銆傜涓涓鍩熸槸鐢ㄤ簬瀹炵幇 Web 鏈嶅姟鐨勫熀紜璁炬柦鐨勫彲綆$悊鎬с備富瑕佺殑鑰冭檻搴斿綋鏄‘淇濆彲鐢ㄦу拰鎻愪緵鏈嶅姟鎻忚堪銆佹秷鎭紶閫掑拰緗戠粶鐨勫叧閿厓绱犵殑鎬ц兘銆俉eb 鏈嶅姟鍩虹璁炬柦鎻愪緵鑰呭簲褰撴彁渚涜繖涓灞備笂鐨勭郴緇熺鐞嗐?/p>
浼佷笟瀵瑰叾鑷繁鐨勫熀紜璁炬柦鍙婄鐞嗘嫢鏈夊畬鍏ㄧ殑鑷富鏉冦備絾鏄紝褰撲紒涓氬湪瀵圭瓑鍩虹涓婄浉浜掍綔鐢ㄦ椂錛屽氨搴斿綋鎻愪緵瀵圭綉緇滃眰銆乆ML 娑堟伅浼犻掑眰銆佹湇鍔℃敞鍐屼腑蹇冨拰 Web 鏈嶅姟瀹炵幇鐨勫熀鏈姤鍛婂拰鎭㈠鍔炴硶銆傛澶栵紝浼佷笟鍚戝叾鍚堜紮浜烘彁渚涚殑綆$悊鎺ュ彛搴斿綋鏄湪鏈嶅姟灞備笂鎿嶄綔鐨勶紝鑰屼笉鏄湪鐩稿浣庣駭鐨勫熀紜璁炬柦灞備笂銆傚悎浼欎漢搴旇鑳藉璁塊棶鍒版姤鍛婃搷浣滃拰璇鋒眰澶勭悊鐨勭姸鎬佸拰鍋ュ悍搴︾殑鎺ュ彛錛屼絾涓嶄竴瀹氳鐞嗚В浼佷笟濡備綍綆$悊鍏惰姹傜殑緇嗚妭銆?/p>
瀵逛簬緗戠粶灞傦紝鐜版湁鐨勭綉緇滅鐞嗕駭鍝佸嚑涔庢敮鎸佺洰鍓嶆墍鏈夌殑緗戠粶鍩虹璁炬柦銆傝繖浜涗駭鍝佸簲褰撶敤浜庣鐞嗕紒涓氬唴閮ㄧ殑 Web 鏈嶅姟鐨勭綉緇滃熀紜璁炬柦銆傚綋浼佷笟鐩鎬簰浣滅敤鏃訛紝灝卞簲璇ュ悜鍏跺悎浼欎漢鎻愪緵鏈夊叧 Web 鏈嶅姟鍩虹璁炬柦鍙敤鎬х殑鍩烘湰鎶ュ憡銆傚獎鍝?Web 鏈嶅姟鍩虹璁炬柦鍙敤鎬х殑緗戠粶鍙敤鎬у簲浣滀負鍥犵礌涔嬩竴鍐欏叆鎶ュ憡銆?/p>
鍦?XML 娑堟伅浼犻掑眰錛屽崗璁簲璇ュ湪浼佷笟鍐呴儴鐢辯幇鏈夌殑鍩虹璁炬柦綆$悊宸ュ叿鏉ョ鐞嗐傚湪浼佷笟鐩鎬簰浣滅敤鐨勬儏鍐典笅錛屾瘡涓珯鐐歸兘鏈夊繀瑕佹彁渚涘崗璁殑鍩烘湰鎶ュ憡鍜屾仮澶嶅姙娉曘備緥濡傦紝濡傛灉绔欑偣 A 鏀寔浼氳瘽錛屽氨璇ュ悜绔欑偣 B 鎻愪緵鍙敤浜庢煡璇㈡椿璺冪殑 IBM Software Group Architecture Overview Web Services Conceptual Architecture 28 浼氳瘽浠ュ強寮鴻鍥炴粴鐨勬帴鍙c傚崗璁眰闇瑕佹甯哥殑棰戦亾涓庡崗璁拰綾諱技瀵圭瓑鐨勬帶鍒舵帴鍙c?/p>
綆$悊鐨勭浜屼釜鏂歸潰鏄?Web 鏈嶅姟鏈韓鐨勫彲綆$悊鎬с備竴浜涗富瑕佺殑鑰冭檻鏄ц兘銆佸彲鐢ㄦс佷簨浠跺拰浣跨敤閲忓害錛屽洜涓哄畠浠皢涓烘湇鍔℃彁渚涜呭競鍦烘敹鍙栨墍鎻愪緵鐨勬湇鍔′嬌鐢ㄨ垂鎻愪緵蹇呰淇℃伅銆?/p>
鏈嶅姟鎻忚堪鍙互鐢ㄤ簬瀹d紶鍙鐞嗘х壒寰佸拰綆$悊闇姹傘傝繖鏂歸潰鐨勭害瀹氭鍦ㄥ紑鍙戜箣涓?/p>
鏈嶅姟娉ㄥ唽涓績鐨勪換浣曞疄鐜幫紝涓嶇鏄敤浜庣浜烘秷璐硅繕鏄叕鍏辨秷璐癸紝閮借姹傚熀紜璁炬柦鏄彲鐢ㄧ殑銆佸彂閫佹壙璇虹殑鏈嶅姟璐ㄩ噺騫惰兘澶熸姤鍛婁嬌鐢ㄦ儏鍐點傝繖浜涚郴緇熺鐞嗗厓绱犲浜庢垚鍔熼噰鐢?UDDI 鏄崄鍒嗛噸瑕佺殑銆?/p>
瀵逛簬 Web 鏈嶅姟搴旂敤紼嬪簭緇勪歡鏉ヨ錛屾敮鎸佺鐞嗙幆澧冨彲鑳戒細澶уぇ澧炲姞搴旂敤紼嬪簭鐨勫鏉傛с傜敱浜?Web 鏈嶅姟蹇呴』鏄撲簬寮鍙戯紝鎵浠ュ繀欏誨敖鍙兘鍚戝紑鍙戣呴殣钘忚繖鏍風殑澶嶆潅鎬с俉eb 鏈嶅姟鐨勭鐞嗘柟寮忚浣垮熀紜璁炬柦鑳借嚜鍔ㄦ彁渚涢噺搴︺佸璁℃棩蹇椼佸惎鍔ㄥ拰鍋滄澶勭悊榪囩▼銆佷簨浠墮氱煡鍜屼綔涓?Web 鏈嶅姟榪愯鏃剁殑涓閮ㄥ垎錛堜篃灝辨槸璇達紝璧風爜鏄?SOAP 鏈嶅姟鍣級鐨勫叾瀹冪鐞嗗姛鑳姐傚洜涓哄熀紜璁炬柦閫氳繃瑙傚療瀹冩墍鎵樼鐨勭粍浠剁殑琛屼負涓嶅彲鑳芥敹闆嗗埌鎵鏈夌殑淇℃伅錛屾墍浠?Web 鏈嶅姟瀹炵幇涔熻浼氶渶瑕佸悜鎵樼瀹冪殑鏈嶅姟鍣ㄦ彁渚涘熀鏈殑鍋ュ悍搴﹀拰鐩戠潱淇℃伅銆?/p>
Web 鏈嶅姟鍩虹璁炬柦搴旇涓烘湇鍔℃彁渚涗竴縐嶇畝鍗曠殑鏂瑰紡浠ュ弬涓庣鐞嗗拰鍒╃敤綆$悊鍩虹璁炬柦銆傚彲綆$悊鐨勬湇鍔$殑 WSDL 鏂囨。鐨勫畾涔夊簲褰撴槸 Web 鏈嶅姟鑳藉疄鐜版彁渚涢氳繃綆$悊緋葷粺璁塊棶 Web 鏈嶅姟鐨勭鐞嗕俊鎭殑鍔熻兘銆傝繖涓鎺ュ彛鍙兘鍖呮嫭鐨勮兘鍔涙槸鑾峰緱閰嶇疆鍜岄噺搴︽暟鎹佹洿鏂伴厤緗強鎺ユ敹鏉ヨ嚜鍙鐞嗙殑 Web 鏈嶅姟鐨勪簨浠躲?/p>
Web 鏈嶅姟浣撶郴緇撴瀯鐨勫鉤鍙扮嫭绔嬫т嬌瀹冧笉閫傚悎濂楃敤浠諱綍涓鏉?Web 鏈嶅姟綆$悊鏍囧噯銆傚洜姝わ紝闇瑕佹湁涓縐嶅熀浜?Web 鏈嶅姟鑰屼笖鍏佽 Web 鏈嶅姟涓庣鐞嗙郴緇熼氫俊鐨勬柟娉曘備負浜嗚揪鍒拌繖涓鐩殑錛岃繕搴斿綋瀹氫箟鐢?WSDL 鏂囨。鎻忚堪鐨勩佸彲鎺ユ敹鏉ヨ嚜鍙鐞?Web 鏈嶅姟鐨勪簨浠朵互鍙婇噺搴︽洿鏂扮殑綆$悊鏈嶅姟錛屽茍浣垮叾鍙敤銆傜鐞嗘湇鍔$殑瀹炵幇鎶鏈笌 Web 鏈嶅姟鏃犲叧銆備絾鏄紝瀵逛簬鍩轟簬 Java 鎶鏈殑鐜錛孞ava 綆$悊鎵╁睍錛圝ava Management Extension錛孞MX錛夊簲璇ユ槸鍚堜箮閫昏緫鐨勮屼笖鍘傚晢涓嶅彲鐭ョ殑閫夋嫨銆傞氳繃浣跨敤 JMX 榪欐牱鐨勫紑鏀炬爣鍑嗭紝瀵圭幇鏈夌殑緋葷粺綆$悊鎻愪緵鑰呮潵璇達紝瑕佹妸鍏剁洰鍓嶆墍鎻愪緵鐨勪駭鍝佹墿灞曚負鍖呮嫭 Web 鏈嶅姟鍏抽敭鍏冪礌鐨勭鐞嗗簲璇ユ槸寰堝鏄撶殑銆俉eb 鏈嶅姟鐨勭鐞嗕綋緋葷粨鏋勪粛鍦ㄥ悜鍓嶅彂灞曘?/p>
14.4 Web Services 欏圭洰瀹炴垬
14錛?錛? Web Services瀹炵幇
鏈功鏄噸鐐硅瑙JB 3.0鐨勩傚湪鐞嗚В浜哤eb Services鍘熺悊涔嬪悗錛?鎺ヤ笅鏉ユ垜浠瑙e浣曚嬌鐢↗2EE鍜孍JB3.0鏉ュ疄鐜癢eb Services
Web 鏈嶅姟閬靛驚 Java 2 騫沖彴錛屼紒涓氱増錛圝ava 2 Platform錛孍nterprise Edition錛孞2EE錛夈侀氱敤瀵硅薄璇鋒眰浠g悊浣撶郴緇撴瀯錛圕ommon Object Request Broker Architecture錛孋ORBA錛変互鍙婂叾瀹冮拡瀵逛笌鑰﹀悎杈冪揣鐨勫垎甯冨紡鎴栭潪鍒嗗竷寮忓簲鐢ㄧ▼搴忛泦鎴愮殑鏍囧噯銆俉eb 鏈嶅姟鏄儴緗插茍鎻愪緵閫氳繃 Web 璁塊棶涓氬姟鍔熻兘鐨勬妧鏈紱J2EE銆丆ORBA 鍜屽叾瀹冩爣鍑嗘槸瀹炵幇 Web 鏈嶅姟鐨勬妧鏈?/p>
J2EE 1.4涓轟嬌鐢ㄥ父瑙凧ava綾繪垨浼佷笟綰ava Beans鏉ュ垱寤哄拰閮ㄧ講web services鎻愪緵浜嗕竴涓叏闈㈢殑騫沖彴銆備互涓嬭〃鏍肩粰鍑轟簡J2EE 1.4涓寘鎷殑web service APIs鐨勭粏鑺傘?nbsp;
瀹氫箟鍦↗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>
JAX-RPC鐨勫彨娉曟湁鐐圭敤璇嶄笉褰擄紝鍥犱負瀹冩棦鏀寔RPC綾誨瀷鐨剋eb services錛屼篃鏀寔鏂囨。綾誨瀷鐨剋eb services銆?/p>
Web Services閮ㄧ講妯″瀷
鍦↗2EE 1.4涔嬪墠錛屾墍鏈塉2EE鍟嗗閮戒嬌鐢ㄤ粬浠鏈夌殑閮ㄧ講妯″瀷鏀寔web services銆侸2EE 1.4涓篔ava Web Services瀹氫箟浜嗛儴緗叉ā鍨嬨傚畠涓篔2EE騫沖彴涓婄殑web services鍒跺畾浜嗗紑鍙戯紝閮ㄧ講浠ュ強鏈嶅姟鍙戝竷鍜屼嬌鐢ㄧ殑鏍囧噯銆?/p>
鏈変簡J2EE 1.4瀵箇eb services鐨勬敮鎸侊紝璁╂垜浠涔犱嬌鐢↗2EE騫沖彴鏉ュ緩閫爓eb service鐨勬柟娉曘?/p>
浣跨敤J2EE鍒涘緩涓涓猈eb Service
鎶妛eb service鍒涘緩鎴愪竴涓交渚跨殑鍜屽彲浜掓搷浣滅殑鍒嗗竷寮忕粍浠朵笉鏄竴欏圭悙紕庣殑浠誨姟銆傚涔嬪墠璁ㄨ鐨勶紝浣犳棦鍙互鎶婂父瑙凧ava綾伙紝涔熷彲浠ユ妸鏃犵姸鎬丒JB閮ㄧ講鎴恮eb services銆傚父瑙凧ava綾昏鎵撳寘鍦ㄤ竴涓獁eb妯″潡涓紝鑰孍JB web services琚墦鍖呭湪鏍囧噯鐨別jb-jar妯″潡涓?/p>
鍦ㄨ繖涓ょ閮ㄧ講閫夋嫨涓紝浣犱細浣跨敤鍝竴涓憿?
Java 綾誨鏃犵姸鎬丒JB:姘告棤姝㈠鐨勪簤璁?/p>
浣犱細閫夋嫨甯歌Java綾昏繕鏄疎JB浣滀負浣犲垱寤簑eb service鐨勬妧鏈彲鑳芥槸涓涓暱鏈熺殑浜夎銆侸ava綾繪瘮EJB鏇村鏄撳紑鍙戯紝瀹冩槸綰殑Java瀵硅薄錛屽茍涓斿畠涓嶅叿鏈塃JB甯︽潵鐨?#8220;棰濆杈庨噸”銆備絾鏄紝EJB鎻愪緵浜嗗嚑涓緢濂界殑鐗圭偣錛屾瘮濡傝澹版槑鐨勪簨鍔″拰瀹夊叏鎬э紝鍥犳瀹冧嬌寮鍙戣呭皢綺懼姏闆嗕腑浜庡緩绔嬪晢涓氶昏緫錛岃屼笉闇瑕佹媴蹇冨熀紜鏈嶅姟鏋舵瀯銆侲JB 3.0澶уぇ綆鍖栦簡璁捐妯″瀷錛屽湪瀹冪殑瑙勮寖涓紝EJB鐪嬭搗鏉ュ氨鍍忓父瑙凧ava綾匯?/p>
浣跨敤J2EE 5.0綆鍖朣OA鐨勫紑鍙?/p>
銆銆浣跨敤J2EE鍒涘緩闈㈠悜鏈嶅姟鐨勫簲鐢ㄧ▼搴忕‘瀹炲緢鍥伴毦錛屽洜姝ら氳繃浣跨敤鐢盝SR 181瀹氫箟鐨刉eb Services 鍏冩暟鎹敞瑙o紝J2EE 5.0灝嗕嬌寮鍙戞洿綆鍗曘侲JB 3.0鍜學eb Services鍏冩暟鎹叿鏈夌浉浼肩殑鐩爣錛屽氨鏄悜寮鍙戣呮彁渚涗翰鍜屽姏銆?/p>
銆銆涓轟簡鍦↗2EE 1.4涓紑鍙戜竴涓畝鍗曠殑Java web service錛屼綘闇瑕佸嚑涓獁eb service瀹氫箟鏂囦歡:WSDL錛屾槧灝勬枃浠跺拰鍑犱釜鍐楅暱鐨勬爣鍑嗕互鍙婄鏈夌殑web services閮ㄧ講鎻忚堪絎︺俉eb Services鍏冩暟鎹鑼冧嬌鐢ㄤ竴縐嶇被浼間簬EJB 3.0鐨勭己鐪侀厤緗柟娉曟潵浣垮紑鍙戞洿綆渚褲俉eb Services鍏冩暟鎹敞瑙e鐞嗗櫒(鎴杦eb services 瑁呴厤宸ュ叿)浼氫負浣犵敓鎴愯繖浜涙枃浠訛紝鍥犳浣犲彧闇瑕佸叧蹇冪被鐨勫疄鐜般?/p>
銆銆褰撲綘浣跨敤Web Services鍏冩暟鎹紑鍙戞椂錛岃繖鏄竴涓湅璧鋒潵濡傛綆鍗曠殑Java web service:
package com.ascenttech.ejb30.ws.demo;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService(name = "HelloWorldService",
targetNamespace = "http://hello/targetNamespace" )
public class HelloWorldService {
@WebMethod public String sayhello(String name ) {
return "Hello” +name+ “ from jws";
}
}
銆銆姝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>
package com.ascenttech.ejb30.ws;
import javax.ejb.Remote;
import javax.jws.WebService;
@WebService
public interface HelloServiceInf extends java.rmi.Remote{
@WebMethod java.lang.String sayHello(java.lang.String name)
throws java.rmi.RemoteException;
}
銆銆濡備笅鏄疎JB 3.0涓?HelloWorld EJB鐨勫疄鐜扮被:
package com.ascenttech.ejb30.ws;
import java.rmi.RemoteException;
import javax.ejb.Stateless;
@Stateless(name="HelloServiceEJB")
public class HelloServiceBean implements HelloServiceInf {
public String sayHello(String name) {
return("Hello "+name +" from first EJB3.0 Web Service");
}
}
銆銆浠ヤ笂渚嬪瓙娓呮鐨勮〃鏄庝簡閫氳繃浣跨敤web services鍏冩暟鎹拰EJB 3.0錛屾湇鍔″紑鍙戞鍦ㄥ彉寰楄秺鏉ヨ秺綆鍗曘傜幇鍦紝浣犲彲浠ュ湪瀹炵幇浜咼2EE瑙勮寖鐨勫簲鐢ㄦ湇鍔′腑錛屾瘮濡侸Boss Application Server絳夛紝寮濮嬪垱寤哄拰閮ㄧ講浣犵殑web services浜嗐?/p>
14.4錛? Web Services 欏圭洰瀹炴垬
14.4.2.1 Web Services鐨勫疄鐜?br />鏈妭浣跨敤EJB 3.0 瀹炵幇涓涓獁eb Services鐧誨綍鐨勪緥瀛愩備笅闈㈡垜浠垱寤轟竴涓伐紼嬪彨錛欵mployeeManager銆傚姞鍏ョ敤鍒扮殑EJB 3.0鐨刯ar鍖呫?/p>
鎴戜滑鍏堝垱寤烘湇鍔″櫒绔殑瀹炰綋Bean錛岃繖鍜屽垱寤烘櫘閫氱殑Ejb3.0瀹炰綋bean鏄竴鏍風殑錛?/p>
package com.ascent.ejb.po;
import java.io.Serializable;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@SuppressWarnings("serial")
@Entity
@Table(name = "usr")
public class User implements Serializable
{
private Integer id;
private String name;
private String password;
private String description;
@Id
@GeneratedValue
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
@Column(name = "name", nullable = false)
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
@Column(name = "password", nullable = false)
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
@Column(name = "description", nullable = true, length = 100)
public String getDescription()
{
return description;
}
public void setDescription(String description)
{
this.description = description;
}
}
鎺ョ潃鍒涘緩榪滅▼鎺ュ彛錛?/p>
package com.ascent.webservice.bean;
import java.rmi.Remote;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.RPC)
public interface LoginDao extends Remote {
@WebMethod
public boolean isLogin(String name, String password);
}
鍦↙oginDao綾諱腑瑕佹敞鎰忕殑鏄疪emote鎺ュ彛鏄瀹炵幇鐨勶紝@SOAPBinding(style=Style.RPC)錛孲oap鐨勭粦瀹氭柟寮忎篃鏄渶瑕佺殑錛屼笉鐒跺湪瀹㈡埛绔槸鎵句笉鍒癓oginDao 銆?/p>
涓嬮潰鍒涘緩浼氳瘽bean錛?/p>
package com.ascent.webservice.bean;
import java.util.List;
import javax.ejb.Stateful;
import javax.ejb.Stateless;
import javax.jws.WebService;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@Stateless
@WebService(endpointInterface = "com.ascent.webservice.bean.LoginDao")
public class LoginDaoBean
{
@PersistenceContext
protected EntityManager em;// the manager of entity
public boolean isLogin(String name, String password)
{
// define query sentence
StringBuffer hql = new StringBuffer();
hql.append("from User u where u.name='" + name + "'");
hql.append(" and u.password='" + password + "'");
// create the query
Query query = em.createQuery(hql.toString());
List queryList = query.getResultList();
// if the result is null
if (queryList.size() == 0)
{
return false;
}
// if the user's length greater 1
if (queryList.size() > 1)
{
return false;
}
// return single user
return true;
}
}
鑷蟲鏈嶅姟鍣ㄧ鐨勭被鏄緩濂戒簡錛岃繖閲屽張涓や釜闂錛岄渶瑕佽鏄庝竴涓?/p>
A錛?涓や釜綾葷殑鏂規硶涓兘娌℃湁鎶涘嚭寮傚父錛屽彲涓嶅彲浠ユ姏鍑哄憿? 鍙互銆備絾鍒板疄鐜癝OA鐨勬椂鍊欎細鏈変竴浜涢棶棰橈紝灝辨槸寮傚父鍦ㄧ粡axis 閫氳繃WSDL2Java 鐢熸垚鍚庯紝鍦ㄧ▼搴忚繍琛屾椂鏈夊彲鑳戒細鍑虹幇鎵句笉鍒扮殑鎯呭艦銆傛墍浠ユ湰鏂囦負浜嗚澶у鍦ㄤ豢鐓ц繖涓緥瀛愭椂閮借兘鎴愬姛錛屾墍浠ヤ篃灝辨姏寮冧簡寮傚父鐨勬姏鍑恒?/p>
B錛?涓や釜綾葷殑鏂規硶鐨勮繑鍥炲兼槸鍩烘湰綾誨瀷錛岃屼笉鏄嚜瀹氫箟綾誨瀷錛屼負浠涔堜細榪欐牱鍛紝鑷畾涔夌被鍨嬪彲浠ヤ笉鍙互鍛紝鍙互銆?/p>
鐜板湪鎴戜滑鐨剋ebservice鐨勬湇鍔″櫒绔氨宸茬粡鍒涘緩濂戒簡錛屾垜浠妸鏈嶅姟鍣ㄧ鐨勪笁涓被鍜宲ersistence.xml鏂囦歡涓璧鋒墦鍖呴儴緗插埌jboss鏈嶅姟鍣ㄩ噷銆傚寘鍚嶆槸錛歟mpdEjb銆?/p>
涓嬮潰鎴戜滑鏉ュ垱寤哄鎴風錛?/p>
package com.ascent.webservice.client;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
import com.ascent.webservice.bean.LoginDao;
public class LoginClient
{
public static void main(String[] args) throws Exception
{
String userName ="lxl";
String password = "lxl";
URL url = new URL("http://localhost:8080/empdEjb/LoginDaoBean?wsdl");
QName qname =
new QName("http://bean.webservice.ascent.com/jaws","LoginDaoService");
ServiceFactory factory = ServiceFactory.newInstance();
Service service = factory.createService(url, qname);
LoginDao loginDao = (LoginDao) service.getPort(LoginDao.class);
boolean isExists = loginDao.isLogin(userName, password);
if(isExists)
{
System.out.println("hello " + userName);
}
else
{
System.out.println("sorry " + userName + ", you are not user in the system!");
}
}
}
鎶婃湇鍔″櫒绔彂甯冨嚭鍘諱互鍚庯紝鏈嶅姟鍣ㄧ浼氳嚜鍔ㄥ彂甯冧竴涓獁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鏂囦歡鐨勫唴瀹瑰涓嬶細
<definitions name="LoginDaoService"
targetNamespace="http://bean.webservice.ascent.com/jaws">
<types/>
<message name="LoginDao_isLogin">
<part name="String_1" type="xsd:string"/>
<part name="String_2" type="xsd:string"/>
</message>
-
<message name="LoginDao_isLoginResponse">
<part name="result" type="xsd:boolean"/>
</message>
-
<portType name="LoginDao">
-
<operation name="isLogin" parameterOrder="String_1 String_2">
<input message="tns:LoginDao_isLogin"/>
<output message="tns:LoginDao_isLoginResponse"/>
</operation>
</portType>
-
<binding name="LoginDaoBinding" type="tns:LoginDao">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
-
<operation name="isLogin">
<soap:operation soapAction=""/>
-
<input>
<soap:body namespace="http://bean.webservice.ascent.com/jaws" use="literal"/>
</input>
-
<output>
<soap:body namespace="http://bean.webservice.ascent.com/jaws" use="literal"/>
</output>
</operation>
</binding>
-
<service name="LoginDaoService">
-
<port binding="tns:LoginDaoBinding" name="LoginDaoPort">
<soap:address location="http://lixinli:8080/empdEjb/LoginDaoBean"/>
</port>
</service>
</definitions>
榪欐牱涓涓猈ebService+Ejb 3.0鐨勪緥瀛愬氨瀹炵幇浜嗐?/p>
14.4.2.2 SOA鐨勫疄鐜?br />鏈緥榪樻槸鍩轟簬鍓嶄袱涓緥瀛愮殑鍩虹涓婄殑錛岃淇濊瘉涓婇潰鐨勪緥瀛愭槸鑳芥甯歌繍琛岀殑銆?/p>
1.WSDL2Java
浠庡悕瀛椾笂鍙互鐪嬪嚭錛屾槸鎶妛sdl 杞寲涓簀ava鐨?鍦ㄤ笂闈㈢殑渚嬪瓙涓垜浠湪鏈嶅姟鍣ㄧ鐢熸垚浜嗕竴涓獁sdl鏂囦歡錛岀幇鍦ㄨ鍋氱殑灝辨槸浣犳妸閭d釜wsdl鏂囦歡緇欏埆浜烘垨鑰呭埆鐨勫叕鍙革紝璁╀粬浠牴鎹畐sdl涓墍鎻忚堪鐨勪綘鎵鎻愪緵鐨勬湇鍔★紝鍘誨紑鍙戜竴涓簲鐢紝鏉ヨ闂綘鎵鎻愪緵鐨勬帴鍙c傛嬁鍒拌繖涓猈SDL鏂囦歡鍚庤鍋氫粈涔堝憿錛宼o java銆傛垜浠潵鐪嬬湅鎬庝箞to java銆?/p>
榪欓噷錛屽湪鍘熸潵鐨凟mployeeManager宸ョ▼涓嬮潰寤轟竴涓獁sdl鏂囦歡澶癸紝灝嗗畠鏀懼湪涓嬮潰錛岀劧鍚庢墍瑕佸仛鐨勫噯澶囧伐浣滄槸錛屾妸鍖呮嫭axis鍦ㄥ唴鐨勫嚑涓猨ar鍖呮壘鍒幫紝璁劇疆鍦ㄤ綘鐨刢lasspath閲岄潰銆傜劧鍚庡湪鍛戒護琛屼笅榪愯WSDL2Java銆?/p>
鍝嚑涓猨ar鍖咃紵
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
榪欐槸鎴慶lasspath 閲岄潰鎵璁劇疆鐨勫嚑涓猨ar鍖咃紝鍚庨潰涓や釜鍙互涓嶉渶瑕侊紝絎簩涓篃鍙互涓嶉渶瑕侊紝鍚庝咯涓彧鏄繚璇佽繍琛岀殑鏃跺欐病鏈夎鍛娿?/p>
1錛?灝哃oginDaoBean.wsdl 鏀懼湪wsdl鏂囦歡澶逛笅闈€侲:\workspace\EmployeeManager\wsdl
2錛?鍦ㄥ懡浠よ涓嬭繘鍏:\workspace\EmployeeManager\wsdl
3錛?鎵ц java org.apache.axis.wsdl.WSDL2Java LoginDaoBean.wsdl
榪欎釜鏃跺欙紝浣犱細鍙戠幇鍦╳sdl鏂囦歡澶逛笅闈㈢敓鎴愪簡涓涓洰褰曪紝瀹冮噷闈㈠寘鍚簡鍑犱釜java綾匯?/p>
LoginDao.java錛孡oginDaoBindingStub.java錛孡oginDaoService.java錛孡oginDaoServiceLocator.java
2 SOA鐨勫疄鐜?br />鏈妭鏄竴涓互SOA+struts瀹炵幇鐧誨綍鐨勪緥瀛愩傛柊寤轟竴涓獁eb宸ョ▼錛孍mployeeWebService錛岀劧鍚庡皢涓婇潰鐢熸垚鐨勫嚑涓被鏀懼叆浣犵殑src鐩綍涓嬮潰錛屾槸鏀炬暣涓洰褰曪紝鍒彧鏀懼嚑涓被榪涘幓. 鏋勫緩struts璧勬簮銆傚垱寤簊truts鐨勮繃紼嬪氨涓嶅湪榪欓噷緇嗚浜嗐傚垱寤虹殑action鍐呭濡備笅錛?/p>
package com.ascent.webservice.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import com.ascent.webservice.struts.form.LoginForm;
import com.ascent.webservice.bean.jaws.LoginDao;
import com.ascent.webservice.bean.jaws.LoginDaoServiceLocator;
public class LoginAction extends Action
{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LoginForm loginForm = (LoginForm) form;
String userName = loginForm.getLoginName();
String password = loginForm.getPassword();
LoginDaoServiceLocator loginDaoServiceLocator = new LoginDaoServiceLocator();
LoginDao loginDao=
loginDaoServiceLocator.getLoginDaoPort();
boolean isExists = loginDao.isLogin(userName, password);
if(isExists)
{
System.out.println("hello " + userName);
HttpSession session = request.getSession();
session.setAttribute("loginName", loginForm.getLoginName());
return mapping.findForward("success");
}
else
{
System.out.println("sorry " + userName + ", you are not user in the system!");
ActionMessages messages = new ActionMessages();
messages.add("login",new ActionMessage("error.login.jsp.loginName.exists"));
this.saveErrors(request, messages);
return mapping.getInputForward();
}
}
}
榪欓噷鐢ㄥ埌鐨凩oginDaoServiceLocator綾誨拰getLoginDaoPort()鏂規硶灝辨槸浣跨敤WSDL2Java鍛戒護鎶妛sdl鏂囦歡鐢熸垚鐨勭被銆傜幇鍦ㄥ氨鍙互鎵撳寘鎴愬彨employee鐨剋ar鏂囦歡錛岃繍琛屽畠銆傝嚦姝わ紝浣犱究鍙互鍦ㄦ祻瑙堝櫒涓緭鍏?a href="http://localhost:8080/employee/login.jsp">http://localhost:8080/employee/login.jsp錛岃繍琛屼綘榪欎釜SOA鐨勫簲鐢ㄤ簡銆傚鏋滄槸鎶婃湇鍔″櫒绔儴緗插埌鍒殑鏈哄櫒涓婏紝鍙鎶妉ocalhost鏀逛負鐩稿簲鐨刬p灝卞彲浠ヤ簡銆?/p>
灝忕粨
鏈珷棣栧厛浠嬬粛浜嗙洰鍓嶄竴涓墠娌挎妧鏈細Web Services鍜岄潰鍚戞湇鍔$殑杞歡鏋舵瀯錛圫ervice Oriented Architecture錛岀畝縐癝OA錛夈傚湪鐞嗚В浜哤eb Services鍘熺悊涔嬪悗錛?鎺ヤ笅鏉ユ垜浠瑙d簡濡備綍浣跨敤J2EE鍜孍JB3.0鏉ュ疄鐜癢eb Services銆?br />
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>:
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.
The combination of the style and use attributes leads to four possible style/use pairs:
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. |