锘??xml version="1.0" encoding="utf-8" standalone="yes"?> • BPEL(Business Process Execution Language)鍙堝彨BPEL4WS(Business Process Execution Language For Web Service)錛岄潰鍚?/span>Web鏈嶅嫏鐨勬キ鍕欐祦紼嬪煼琛岃獮璦銆傛槸涓紼嬌鐢?/span>Web鏈嶅嫏瀹氱京鍜屽煼琛屾キ鍕欐祦紼嬬殑瑾炶█銆?/span>BPEL鎻愪緵浜嗕竴紼浉灝嶇啊鍠槗鎳傜殑鏂規硶錛屽彲灝囧鍊?/span>WEB鏈嶅嫏緄勫悎鍒頒竴鍊嬫柊鐨勫京鍚堟湇鍕?/span>(紼變綔妤嫏嫻佺▼)涓?/span> • BPEL鏈韓鏄竴鍊?/span>Web鏈嶅嫏錛屽彲浠ヤ綔鐐烘湇鍕欑殑鎻愪緵鑰呫?/span> • BPEL鏄熀鏂?/span>Web鏈嶅嫏鐨勶紝娌掓湁Web鏈嶅嫏灝辨矑鏈?/span>BPEL銆?br />
• 涓鍊嬩互bpel鐐哄緦綞寸殑鏂囦歡(渚嬪MyFlow.bpel) • 涓鍊?/span>WSDL鏂囦歡 • 涓鍊嬮儴緗?/span>XML鏂囦歡錛屾ǎ瀛愬艦浼?/span>bpel.xml • 闇瑕佺啛鎮夊柈鍊嬬殑Web Service鐨勪嬌鐢ㄦ柟娉?/span> • 闇瑕佷簡瑙e叿楂旂殑妤嫏嫻佺▼ • 闇瑕佷竴鍊嬮亱琛?/span>BPEL鐨勮檿鐞嗗櫒 • 闇瑕佷竴鍊嬫祦紼嬭ō璦堝櫒 • 鐣剁劧闇瑕佸皪BPEL瑾炴硶妯欑敖鐨勬帉鎻$瓑 BPEL鐨勪竴鑸祼妲?/span> • <process> • <partnerLinks> • <partnerLink> • </partnerLink> • </partnerLinks> • <variables> • <variable/> • </variables> • <faultHandlers> • </faultHandlers> • <sequence> • Activities • </sequence> • </process> <process>鐨勫爆鎬?/span> <process name="ncname" targetNamespace="uri" queryLanguage="anyURI"? expressionLanguage="anyURI"? suppressJoinFailure="yes|no"? enableInstanceCompensation="yes|no"? abstractProcess="yes|no"? xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"> . . </process> <partnerLinks>妯e紡 <partnerLinks> <!– 娉ㄦ剰:鑷沖皯瑕佹寚瀹氫竴鍊嬭鑹?/span>. --> <partnerLink name="ncname" partnerLinkType="qname" myRole="ncname“ partnerRole="ncname"> </partnerLink> </partnerLinks> <variables>妯e紡 <variables> <variable name="ncname" messageType="qname“/> </variables> <faultHandlers>妯e紡 <faultHandlers> <catch faultName="qname“ faultVariable="ncname"> activity </catch> <catchAll> activity </catchAll> </faultHandlers> Activities鍖呭惈鍏烽珨濡備笅 • <receive> • <reply> • <invoke> • <assign> • <throw> • <terminate> • <wait> • <empty> • <sequence> • <switch> • <while> • <pick> • <flow> • <scope> • <compensate> 鍩烘湰媧誨嫊涓 • <invoke> – 瑾跨敤鏌愬?/span> Web 鏈嶅嫏涓婄殑鎿嶄綔 • <receive> – 絳夊緟涓姊濇秷鎭締鍥炴噳鐢辨煇浜哄緸澶栭儴閫茶瑾跨敤鐨勬湇鍕欎粙闈㈢殑鎿嶄綔 • <reply> – 鐢熸垚杓稿叆錛忚幾鍑烘搷浣滅殑鍥炴噳 • <wait> – 絳夊緟涓孌墊檪闁?/span> 鍩烘湰媧誨嫊浜?/span> • <assign> – 鎶婅硣鏂欏緸涓鍊嬪湴鏂硅瑁藉埌鍙︿竴鍊嬪湴鏂?/span> • <throw> – 鎸囨槑鏌愬嬪湴鏂瑰嚭閷簡 • <terminate> – 緄傛鏁村嬫湇鍕欏渚?/span> • <empty> – 浠楹戒篃涓嶅仛 緄愭鍖栨椿鍕?/span> • <sequence> – 瀹氱京涓緄勬椹熺殑鏈夊簭搴忓垪 • <switch> – 浣跨敤鐝懼湪甯歌鐨?/span>“case-statement”杈︽硶渚嗙敚鐢熷垎鏀?/span> • <while> – 瀹氱京涓鍊嬭看鍦?/span> • <pick> – 鍩瘋騫炬鍙伕璺緫涓殑涓姊?/span> • <flow> – 浠ュ強鎸囨槑涓緄勬椹熸噳瑭蹭甫琛屽湴鍩瘋 涓鍊嬪畬鏁寸殑綈″柈紺轟緥 <process name="test" targetNamespace="http://acm.org/samples" suppressJoinFailure="yes" xmlns:tns="http://acm.org/samples" xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns:bpelx="http://schemas.oracle.com/bpel/extension" xmlns:ora="http://schemas.oracle.com/xpath/extension" xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"> <partnerLinks> <!-- The 'client' role represents the requester of this service. --> <partnerLink name="client" partnerLinkType="tns:test" myRole="testProvider"/> </partnerLinks> <variables> <variable name="input" messageType="tns:testRequestMessage"/> <variable name="output" messageType="tns:testResponseMessage"/> </variables> <sequence name="main"> <receive name="receiveInput" partnerLink="client" portType="tns:test" operation="process" variable="input" createInstance="yes"/> <assign name="creatReturnStr"> <copy> <from expression="concat("Hello", bpws:getVariableData('input','payload','/tns:testRequest/tns:input'))"></from> <to variable="output" part="payload" query="/tns:testResponse/tns:result"/> </copy> </assign> <reply name="replyOutput" partnerLink="client" portType="tns:test" operation="process" variable="output"/> </sequence> </process>
BPEL鐨勯亱浣滄柟寮?/span>
BPEL鐨勪竴鑸鎴?/span>
BPEL鐨勫鐝鵑渶姹?/span>
8.6 BPEL鐨勭祼妲?/span>
紼嬪簭鍚嶇ū
|
JBoss ESB |
|
鏁告摎搴礬寰戝拰鍚嶇ū
|
222.118.20.108\jbossesb |
|
紼嬪簭鐨勬枃浠舵鎴愯鏄?/span>
|
||
1)聽聽聽聽聽聽
Jboss
2)聽聽聽聽聽聽
jbossesb-4.0Beta1MP1聽聽聽聽
2.1 jbossesb-appl.ear
2.2 jbossEsb.properties
2.3
JBossESB-ds.xml
2.4 properties-service.xml
2.5 ObjStore.xml
閰嶇疆姝ラ濡備笅
:
|
||
閬嬭姊濅歡鍜岄厤緗鏄?/span>
|
||
|
Windows
Linux |
|
|
1)鏁告摎婧愰厤緗湪JBossESB-ds.xml鏂囦歡閰嶇疆錛岃┏绱頒俊鎭涓?/span>: <datasources> 聽 <local-tx-datasource> 聽聽聽 <jndi-name>JBossESBDS</jndi-name>
聽聽聽 <connection-url>jdbc:jtds:sqlserver://222.118.20.108;DatabaseName=jbossesb</connection-url> 聽聽聽 <driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class> 聽聽聽 <user-name>dbname</user-name> 聽聽聽 <password>access</password>
聽聽聽 <min-pool-size>10</min-pool-size> 聽聽聽 <max-pool-size>100</max-pool-size> 聽聽聽 <blocking-timeout-millis>1000</blocking-timeout-millis> 聽聽聽 <idle-timeout-minutes>5</idle-timeout-minutes>
聽 </local-tx-datasource>
</datasources> 2.淇敼jbossEsb.properties鏂囦歡: org.jboss.soa.esb.mail.smtp.host=www.163.com org.jboss.soa.esb.mail.smtp.port=23 org.jboss.soa.esb.mail.smtp.user=ejinmy org.jboss.soa.esb.mail.smtp.password=123456789abc
# # Object Store Settings # org.jboss.soa.esb.objStore.configfile=file:/e:/temp/ObjStore.xml |
|
|
蹇呴渶鏄?/span>
JBoss .
閬嬭
JBoss App Server
灝卞暉鍕曚簡
JBoss ESB. |
|
|
鏁告摎搴〃(script) CREATE TABLE batches ( 聽聽聽 batch_num int NOT NULL, 聽聽聽 seq integer NOT NULL, 聽聽聽 data varchar, 聽聽聽 CONSTRAINT batches_pk PRIMARY KEY (batch_num,seq) );
CREATE TABLE object_snap ( 聽聽聽 uid int NOT NULL, 聽聽聽 stamp int, 聽聽聽 snap_type varchar, 聽聽聽 object_uid int, 聽聽聽 batch_num int, 聽聽聽 xml_data varchar, 聽聽聽 CONSTRAINT object_snap_pk PRIMARY KEY (uid) );
CREATE TABLE people_index ( 聽 聽聽uid bigint NOT NULL, 聽聽聽 stamp int, 聽聽聽 latest_snap_uid int, 聽聽聽 latest_snap_date varchar, 聽聽聽 name varchar, 聽聽聽 phone varchar, 聽聽聽 address varchar, 聽聽聽 CONSTRAINT people_index_pk PRIMARY KEY (uid) );
CREATE TABLE uid_table ( 聽聽聽 uid integer NOT NULL, 聽聽聽 sequence_name varchar NOT NULL, 聽聽聽 last_used_uid bigint NOT NULL, 聽聽聽 CONSTRAINT uid_table_pk PRIMARY KEY (uid) );
INSERT INTO uid_table (uid, sequence_name, last_used_uid) VALUES (1, 'jbossEsb_objuid', 10500000); INSERT INTO uid_table (uid, sequence_name, last_used_uid) VALUES (2, 'jbossEsb_batchuid', 251000); |
|
鍌?/span>
聽聽聽
娉?/span>
|
||
姝ゆ枃妾旀槸閰嶇疆瀹夎JBOSS ESB鐨勬椹熻鏄庢浉. |
||
銆銆銆
聽聽
聽聽jinmy
聽聽聽聽
|
||
聽
浜?JBI(Java Business Integration)
JBI鏄疭OA鐨勮В姹哄拰闆嗘垚鐨勫熀紺?br />JBI鎻愪緵浜嗙祫浠朵箣闁撲氦浜掔殑娑堟伅鍩虹錛?br />聽1)NormalizedMessage(NM) 鎵鏈夊熀浜庢秷鎭殑鏁告摎鐗囨鈥斺擲OAP鐗囨銆丮OM娑堟伅銆丠TTP鏁告摎鎴栧叾瀹冧俊鎭斺旇鑱氬悎銆侀泦涓?br />聽鎳夌敤鍒版キ鍕欓倧杓佸偝杓革紝濡傛灉鏈夊繀瑕佸墖杞夋彌鎴愬叾浠栨牸寮忛毃寰岃鍒嗘淳鍒版渶緄傜洰鐨勫湴
聽2)JBI machine (SE)
聽聽 緄勪歡鎻愪緵鎴栬呮秷璨繪湇鍕欐槸鍩烘柤鏈湴鐨?br />聽3)JBI binding (BC)
聽聽 緄勪歡 鎻愪緵鎴栬呮秷璨繪湇鍕欐槸閫氶亷涓浜涢氫俊鍗旇鎴栬呮槸鍏朵粬閬犵▼鎶琛?br />聽緄勪歡涔嬮枔鐨勪氦浜掗氶亷娑堟伅浜ゆ彌錛屾秷鎭槸鏈嶅嫏鎻愪緵鑰呯櫦浣堢殑WSDL聽
鏈嶅嫏鍏冧歡(Service Unit)
聽涓鍊嬫湇鍕欏厓浠剁湅浣滄槸涓鍊嬮粦鐩掑瓙,瀹冩彁渚涗簡涓鍊嬮潨鎱嬬殑鏈嶅嫏錛?br />聽鏈嶅嫏鍏冧歡涓寘鍚湁錛屾彁渚涚殑鏈嶅嫏鍜屾湇鍕欐秷璨昏呫傚畠鍊戦兘寰炲爆鏈嶅嫏鍏冧歡錛屼竴鍊嬫湇鍕欏厓浠跺彲浠ユ湁0鍊嬫垨鑰呭鍊嬫湇鍕?/p>
聽鏈嶅嫏闆嗗悎(service Assembly)
聽緄勫悎鏈嶅嫏鍏冧歡鏄ぇ鐨勬噳鐢ㄧ▼搴忔垨鑰呮柊鐨勬湇鍕欏艦寮忓嚭鐝?A Service Assembly:涓緄凧BI 鏈嶅嫏鍏冧歡閫e悓鎻忚堪瀹冨戠殑闂滀總鍜岀洰妯欑祫浠?br />綹界祼:
JBI鏄疭OA緄愭鐨勫熀紺庯紝瀹冩妸鍘熶締鐨勬キ鍕欏嚱鏁擱泦鎴愮偤涓鍊嬫湇鍕欙紝浣挎湇鍕欐彁渚涜呭拰鏈嶅嫏娑堣不鑰呬箣闁撶殑浜や簰鏄澗鑰﹀悎鐨勶紝閫氶亷service assembly(鏈嶅嫏闆嗗悎錛?br />鍙互緄勫悎涓嶅悓鐨勭▼搴忥紝鏋舵鍦?
servicemix
娑堟伅緄愭鐨勪粙绱?br />鐢ㄩ亷web services(SOAP)鎳夎┎鐭ラ亾娑堟伅鍖呮嫭淇″皝銆佹秷鎭牠銆佷富楂斻侀檮浠?鍚屾ǎJMS娑堟伅緄愭涔熸槸宸笉澶氬寘鎷秷鎭牠銆佹秷鎭爆鎬с佹秷鎭珨.
浠MS銆丼OAP鐐哄熀紺庡彲浠ュ鐝鵑潰鍚戞秷鎭ā鍨?MOM Message Oriented Model)銆?br />JMS娑堟伅妯e紡:
SpyTextMessage {
聽聽聽聽 Header {
聽聽聽聽聽聽聽 jmsDestination聽 : QUEUE.mytestjms
聽聽聽聽聽聽聽 jmsDeliveryMode : 2
聽聽聽聽聽聽聽 jmsExpiration聽聽 : 0
聽聽聽聽聽聽聽 jmsPriority聽聽聽聽 : 4
聽聽聽聽聽聽聽 jmsMessageID聽聽聽 : ID:6-11454947326091
聽聽聽聽聽聽聽 jmsTimeStamp聽聽聽 : 1145494732609
聽聽聽聽聽聽聽 jmsCorrelationID: null
聽聽聽聽聽聽聽 jmsReplyTo聽聽聽聽聽 : null
聽聽聽聽聽聽聽 jmsType聽聽聽聽聽聽聽聽 : null
聽聽聽聽聽聽聽 jmsRedelivered聽 : false
聽聽聽聽聽聽聽 jmsProperties聽聽 : {}
聽聽聽聽聽聽聽 jmsPropReadWrite: false
聽聽聽聽聽聽聽 msgReadOnly聽聽聽聽 : true
聽聽聽聽聽聽聽 producerClientId: ID:6
聽聽聽聽 }
聽聽聽聽 Body {
聽聽聽聽聽聽聽 text聽聽聽聽聽聽聽聽聽聽聽 :sender message from liao test
聽聽聽聽 }
JMS綈″柈綬ㄧ▼瀵︾従榛炲皪榛炵殑娑堟伅銆鏈嶅嫏鍣ㄧ敤jboss-4.0.3SP1
1)棣栧厛鍦↗BOSS涓儴灞竴鍊嬮粸灝嶉粸鐨勬秷鎭殜鍒?br />閰嶇疆鏂囦歡鏀懼湪JBOSS_Home\server\default\deploy\jms
閰嶇疆鏂囦歡鐨勫収瀹圭偤:
<?xml version="1.0" encoding="UTF-8"?>
<server>
聽<!--鏄竴鍊嬮粸灝嶉粸鐨勭敤org.jboss.mq.server.jmx.Queue(Topic),desination鐨勫悕紼辯偤mytestjms聽
聽 鏇村鐨勯厤緗鏄庡彲浠ョ湅鍘熶締jboss鑷付鐨凧ms閰嶇疆鏂囦歡錛屾枃浠跺悕瑕佺敤*-service.xml
聽-->
聽 <mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=mytestjms">
聽聽聽 <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
聽 </mbean>
</server>
2)瀵︾従娑堟伅鐧奸佽?br />import java.util.Hashtable;
import javax.jms.*;
import javax.naming.*;
public class JMSSender {
聽聽聽 QueueSession session;
聽聽聽 QueueConnection conn;
聽聽聽 QueueSender sender;
聽聽聽 QueueReceiver receiver;
聽聽聽 public void clientconnect()throws Exception
聽聽聽 {
聽聽聽聽聽聽聽 聽聽聽聽聽聽聽 env.put(Context.PROVIDER_URL,"localhost");
聽聽聽聽聽聽聽 Context iniCtx = new InitialContext(env)聽 ;
聽聽聽聽聽聽聽聽 鍓靛緩JMS閫f帴鐨勫伐寤犻
聽聽聽聽聽聽聽 Object tmp = iniCtx.lookup("ConnectionFactory");
聽聽聽聽聽聽聽 QueueConnectionFactory qcf = (QueueConnectionFactory)tmp;
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽 聽聽聽聽聽聽聽 //鍓?/a>寤篔MS鏈冭┍
聽聽聽聽聽聽聽聽 session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽聽聽聽 clientconnect();
聽聽聽聽聽聽聽聽聽聽聽 TextMessage textmsg = this.session.createTextMessage();
聽聽聽聽聽聽聽聽聽聽聽 textmsg.setText("sender message from liao test");
聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽 }catch(Exception e)
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽 e.printStackTrace();
聽聽聽聽聽聽聽 }
聽聽聽 }
聽聽聽 /**
聽聽聽聽 * 鍋滄鍜岄棞闁塉MS閫f帴
聽聽聽聽 * @throws JMSException
聽聽聽聽 */
聽聽聽 public void disConnect() throws JMSException
聽聽聽 {
聽聽聽聽聽聽聽 conn.stop();
聽聽聽聽聽聽聽 session.close();
聽聽聽聽聽聽聽 conn.close();
聽聽聽 }
聽聽聽 public Message receiver() throws JMSException
聽聽聽 {
聽聽聽聽聽聽聽 return receiver.receive(1000);
聽聽聽 }
聽聽聽 public static void main(String[] args)throws Exception
聽聽聽 {
聽聽聽聽聽聽聽聽 new JMSSender();
聽聽聽 }
}
3)瀵︾従娑堟伅鎺ュ彈鑰?br />import java.util.Hashtable;
import javax.jms.*;
import javax.naming.*;
public class JMSReceiver {
聽聽聽 QueueSession session;
聽聽聽 QueueConnection conn;
聽聽聽 QueueReceiver receiver;
聽聽聽
聽聽聽 public void clientconnect()throws Exception
聽聽聽 {
聽聽聽聽聽聽聽 Hashtable env =聽 new Hashtable();
聽聽聽聽聽聽聽 env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
聽聽聽聽聽聽聽 env.put(Context.PROVIDER_URL,"localhost");
聽聽聽聽聽聽聽 Context iniCtx = new InitialContext(env)聽 ;
聽聽聽聽聽聽聽 Object tmp = iniCtx.lookup("ConnectionFactory");
聽聽聽聽聽聽聽 QueueConnectionFactory qcf = (QueueConnectionFactory)tmp;
聽聽聽聽聽聽聽 Queue queue = (Queue)iniCtx.lookup("queue/mytestjms");
聽聽聽聽聽聽聽 conn = qcf.createQueueConnection();
聽聽聽聽聽聽聽聽 session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
聽聽聽聽聽聽聽 conn.start();
聽聽聽聽聽聽聽 receiver = session.createReceiver(queue);
聽聽聽 }
聽聽聽 public void disConnect() throws JMSException
聽聽 {
聽聽聽聽聽聽 conn.stop();
聽聽聽聽聽聽 session.close();
聽聽聽聽聽聽 conn.close();
聽聽 }
聽聽 public Message receiver() throws JMSException
聽聽 {
聽聽聽聽聽聽 return receiver.receive(1000);
聽聽 }
聽聽 public JMSReceiver()throws Exception
聽聽 {
聽聽聽聽聽聽聽 clientconnect();
聽聽聽聽聽聽聽聽 Message msg = receiver();
聽聽聽聽聽聽聽聽 System.out.println(msg);
聽聽聽聽聽聽聽聽 if (msg instanceof TextMessage)
聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽 TextMessage tmsg = (TextMessage)msg;
聽聽聽聽聽聽聽聽聽聽聽聽 聽聽聽聽聽聽聽聽 disConnect();
聽
聽聽 }
聽
聽聽聽 public static void main(String[] args)throws Exception
聽聽聽 {
聽聽聽聽聽聽聽 new JMSReceiver();
聽聽聽 }
}
涓婚娑堟伅鐢ㄥ埌Topic,鎬濊礬鍩烘湰鐩稿悓錛屾帴鍙楀繀闇鍏堣▊闁辨秷鎭富欏岋紝鐣舵湁鐧奸佽呮妸娑堟伅鐧肩鄲閫欏嬩富欏岀殑鏅傚?br />鍏堝墠璦傞柋鐨勬帴鍙楀氨鏈冩敹鍒伴欏嬫秷鎭?br />SOA涓璊MS涔熸槸涓鍊嬬啽闁錛屽鎴剁閫氬父鐢↗MS鐧奸佹秷鎭啀ESB涓鐢ㄥ叿楂旂殑鏈嶅嫏銆?/p>
1)聽聽聽聽聽聽 鎻愪緵瀹㈡埗绔鐢ㄧ殑鎺ュ彛(web services)
2)聽聽聽聽聽聽 綬ㄥ铏曠悊铏曠悊娑堟伅鐨勯錛屾秷鎭従鍦ㄥ寘鎷?/span> , 鐧婚櫢娑堟伅銆佺櫥鍑烘秷鎭佹秷鎭櫦閫?娑堟伅鐙鎱嬬殑淇敼
鐧婚櫢娑堟伅鍖呮嫭
:
瀹㈡埗绔殑鐢ㄦ埗鍚嶃?/span>
ip
銆佺鍙?/span>
;
鐧誨嚭娑堟伅鍖呮嫭
:
瀹㈡埗绔殑鐢ㄦ埗鍚嶏紝鏈嶅嫏鍣ㄥ皣娉ㄩ姺瀹㈡埗绔櫥闄告檪鐧奸亷渚嗙殑娑堟伅
鐧奸佺殑娑堟伅鍖呮嫭
:
鐧奸佷漢錛屾帴鍙椾漢錛岀櫦閫佷簨浠訛紝鐧奸佺殑鍏у
.
淇敼鐙鎱?鍖呮嫭娑堟伅鐨勯棞閸靛瓧ID
3)聽聽聽聽聽聽
鍦ㄥ鎴剁鐧婚櫢鐨勬檪鍊欑洠娓槸鍚︽槸鍚︽湁鏂版秷鎭紝鏈夊墖鐧奸佺鄲瀹㈡埗绔?br />
4)鐧奸佺殑娑堟伅濡傛灉鎺ュ彈鐢ㄦ埗涓嶅湪綬氾紝鍓囦繚瀛樿┎娑堟伅錛岀瓑鎺ュ彈鑰呯櫥闄哥殑鏅傚欏啀鐧奸佺鄲鎺ュ彈鑰呫?br />
娑堟伅鏈変竴鍊嬬媭鎱婲琛ㄧず鏂扮殑娑堟伅錛孫琛ㄧず宸茬稉紕鴻獚鐨勬秷鎭?
娑堟伅鍌崇鄲鐢ㄦ埗錛岀敤鎴剁⒑瑾嶅湪鍥炲娑堟伅鐙鎱?br />瀹㈡埗绔鐢ㄧ殑鎺ュ彛鍙互鏄疛MS,Http鐢辨柤鐝懼湪鍙湁delphi瀹㈡埗绔紝鐝懼湪鎻愪緵web services璦晱
嫻佺▼鍦?