當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 河北O(jiān)A系統(tǒng) > 石家莊OA系統(tǒng) > 石家莊OA信息化
無(wú)SOAP的Web服務(wù),第二部分
申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114
AMTeam.org無(wú)SOAP的Web服務(wù),第二部分
--“Web 服務(wù)調(diào)用框架”的體系結(jié)構(gòu),WSIF 的體系結(jié)構(gòu)
Nirmal K. Mukhi(nmukhi@us.ibm.com),副研究員,IBM Research
Aleksandor Slominski(aslom@indiana.edu),研究助理,IU Extreme! Lab,Indiana University
2001 年 9 月
在前面的文章中介紹了 WSIF,說(shuō)明了它怎樣為簡(jiǎn)化的 Web 服務(wù)調(diào)用提供獨(dú)立于綁定的 API。這篇文章將看看一些高級(jí)的
WSIF 功能。這將需要對(duì)其體系結(jié)構(gòu)有一個(gè)概述,接下來(lái)您將看到怎樣開發(fā)多服務(wù)綁定,以及怎樣給 Web 服務(wù)更新和添加新的綁定實(shí)現(xiàn)。
“Web
服務(wù)調(diào)用框架”(Web Services Invocation Framework(WSIF))是為調(diào)用 Web 服務(wù)提供簡(jiǎn)單 API
的工具箱,而不管服務(wù)怎樣提供或由哪里提供。在前面的文章中(請(qǐng)參閱參考資料),我們討論了對(duì) WSIF 的需要、其設(shè)計(jì)背后的思想以及描述了一些主要的功能。我們比較了
WSIF 的由 WSDL 驅(qū)動(dòng)的 API 和用于使用Web 服務(wù)的常規(guī) API,并且描述了端口類型編譯器和無(wú)存根調(diào)用。
WSIF 甚至還可以提供更多。其體系結(jié)構(gòu)允許通過(guò)端口工廠(port factory)發(fā)現(xiàn)調(diào)用端口。我們可以使用定制的綁定實(shí)現(xiàn)進(jìn)行服務(wù)調(diào)用的調(diào)用端口,并且將它們插入到框架中。我們也可以設(shè)計(jì)我們自己的端口工廠,這樣使用定制的算法能夠查找或創(chuàng)建調(diào)用端口。最后,對(duì)于消息內(nèi)用到的數(shù)據(jù),WSIF 允許我們使用任何本機(jī)類型系統(tǒng)。在這篇文章中,我們將描述啟用這些功能的 WSIF 的體系結(jié)構(gòu)方面,并且討論利用這種靈活體系結(jié)構(gòu)的特定方法。
WSIF 的體系結(jié)構(gòu)
WSIF 通過(guò)以下步驟調(diào)用服務(wù)操作:
裝入 WSDL
文檔。
為服務(wù)創(chuàng)建一個(gè)端口工廠。
該端口工廠用來(lái)檢索服務(wù)端口。
如果需要,通過(guò)使用根據(jù)某個(gè)本機(jī)類型系統(tǒng)定型的消息部件創(chuàng)建消息。
通過(guò)給該端口提供待調(diào)用操作的名稱以及操作需要的一個(gè)輸入和/或輸出消息進(jìn)行調(diào)用。
WSIFPort
這里關(guān)鍵的抽象是 WSDL 端口的運(yùn)行時(shí)表示,稱之為
WSIFPort。它負(fù)責(zé)在特殊綁定的基礎(chǔ)上進(jìn)行實(shí)際調(diào)用。例如,為了調(diào)用抽象服務(wù)操作,我們要有 WSIFSOAPPort,它能使用為此服務(wù)在 WSDL 中指定的
SOAP 綁定。該體系結(jié)構(gòu)的靈活性集中在清單 1 中所示的 WSIFPort 接口上。
清單 1:WSIFPort 接口
public interface
WSIFPort {
public boolean executeRequestResponseOperation (String
op,
WSIFMessage
input,
WSIFMessage
output,
WSIFMessage fault)
throws
WSIFException;
// some other methods not specified
here
}
這個(gè)接口的實(shí)現(xiàn)將必須知道使用指定的抽象輸入和輸出消息怎樣調(diào)用操作。如果基于 Apache SOAP API,WSIFPort 的 SOAP 實(shí)現(xiàn)可以根據(jù)來(lái)自該服務(wù) WSDL 文檔的 SOAP 綁定信息創(chuàng)建一個(gè) Call 對(duì)象,然后使用抽象輸入消息創(chuàng)建調(diào)用必需的參數(shù)??梢杂?SOAP 響應(yīng)來(lái)植入隨后可由客戶機(jī)檢查的抽象輸出消息。
WSIFPortFactory
WSIFPortFactory
負(fù)責(zé)檢索用于特殊調(diào)用的 WSIFPort。它具有清單 2 所描述的接口。
清單 2:WSIFPortFactory 接口
public
interface WSIFPortFactory {
public WSIFPort getPort () throws
WSIFException;
public WSIFPort getPort (String portName) throws
WSIFException;
}
請(qǐng)注意不帶參數(shù)的 getPort 版本允許該接口實(shí)現(xiàn)有某個(gè)定制的算法來(lái)選擇用于調(diào)用的 WSIFPort。WSIF 分發(fā)包有該接口的兩個(gè)實(shí)現(xiàn):靜態(tài)端口工廠和動(dòng)態(tài)端口工廠。靜態(tài)端口工廠存儲(chǔ) WSIFPort 對(duì)象列表,并且當(dāng)發(fā)出 getPort() 時(shí),以偽隨機(jī)方式返回其中一個(gè)對(duì)象。動(dòng)態(tài)端口工廠存儲(chǔ)動(dòng)態(tài)提供者列表。這些提供者中的每一個(gè)能夠根據(jù)服務(wù)的 WSDL 信息在運(yùn)行時(shí)創(chuàng)建 WSIFPort。當(dāng)在動(dòng)態(tài)端口工廠調(diào)用 getPort() 時(shí),工廠將以偽隨機(jī)方式選擇動(dòng)態(tài)提供者,使它能創(chuàng)建接著返回的 WSIFPort。端口工廠體系結(jié)構(gòu)的整體視圖如圖 1 所示。
圖 1:WSIF 端口/端口工廠體系結(jié)構(gòu)
WSIF 部件
到此為止我們討論了 WSIF
端口怎樣從特定的實(shí)現(xiàn)分離出來(lái)以及怎樣用端口工廠來(lái)發(fā)現(xiàn)和創(chuàng)建端口。端口使我們能夠建立調(diào)用,但是實(shí)施調(diào)用本身之前基本的一步是創(chuàng)建操作所需的消息。WSDL
中的消息由綁到某個(gè)類型系統(tǒng)的命名部件組成。典型情況下,將 XML 模式用作類型系統(tǒng)為 WSDL
部件定型。這獨(dú)立于語(yǔ)言,非常強(qiáng)大。通過(guò)將這種模式類型映射到更方便的類型系統(tǒng)以及允許在屬于該類型系統(tǒng)和模式類型的對(duì)象之間進(jìn)行轉(zhuǎn)換,從客戶機(jī)調(diào)用這種服務(wù)。例如,當(dāng)
Java 是本機(jī)類型系統(tǒng)時(shí),使用設(shè)計(jì)為具有明確目的類,通過(guò)序列化和反序列化完成 Java 和模式之間的轉(zhuǎn)換。
將 WSIF 的部件體系結(jié)構(gòu)設(shè)計(jì)為任何本機(jī)類型系統(tǒng)可用于消息部件,并允許相同消息內(nèi)的部件用不同的類型系統(tǒng)定型。在必須將來(lái)自兩個(gè)或多個(gè)獨(dú)立的 WSDL 消息(和不同的本機(jī)類型系統(tǒng)相關(guān)聯(lián))組合到單一消息中時(shí),后者是必需的。除了允許有不同的本機(jī)類型系統(tǒng),還需要有解釋消息部件的通用的方法,這樣就可能統(tǒng)一地查看 WSIF 消息對(duì)象。WSIF 采取的方法是模式為消息部件所用的標(biāo)準(zhǔn)抽象類型,并且所有這樣的模式類型有相應(yīng)的 JavaBean(可以使用將模式轉(zhuǎn)換到 Java 的規(guī)范映射進(jìn)行定義)。這給出了 WSIF 部件通用的類型系統(tǒng)。因此 WSIFPart 接口看似如清單 3 所示。
清單 3:WSIFPart 接口
public interface
WSIFPart {
public Class getJavaType ();
public Object
getJavaValue ();
}
只要能將這些表示轉(zhuǎn)換為相應(yīng)的規(guī)范 Java 類型,該接口的特定實(shí)現(xiàn)就可以使用任何一個(gè)內(nèi)部類型系統(tǒng)。由 WSIF 提供的唯一 WSIFPart 接口實(shí)現(xiàn)是使用 Java 作為類型系統(tǒng)的 WSIFJavaPart。還有別的實(shí)現(xiàn)能夠利用通用使用模式來(lái)提高效率。例如,請(qǐng)考慮在所用的最通用的綁定中與在文檔風(fēng)格 SOAP 綁定中一樣,涉及 XML 文檔交換。此處,將部件值表示為文字的 XML 而不是 Java 對(duì)象將非常高效,當(dāng)使用文檔風(fēng)格 SOAP 綁定進(jìn)行調(diào)用時(shí),可以不需要解析或序列化/反序列化。
修改綁定選擇算法
綁定選擇算法的修改非常直截了當(dāng)。所有開發(fā)者必須做的是編寫他們自己的
WSIFPortFactory 實(shí)現(xiàn),或擴(kuò)展現(xiàn)有的實(shí)現(xiàn)。請(qǐng)考慮 WSIFDynamicPortFactory。它存儲(chǔ)動(dòng)態(tài)提供者列表,該列表根據(jù)需要給特殊的
WSDL 綁定生成一個(gè) WSIFPort。例如,這個(gè)端口工廠根據(jù)提供者類型查找動(dòng)態(tài)提供者,這樣它知道哪一個(gè)動(dòng)態(tài)提供者處理 SOAP
端口,哪一個(gè)處理我們可能定義的 CORBA 端口,等等。我們可以用我們自己的 getPort()
方法擴(kuò)展該端口工廠來(lái)選擇需要的端口。為了說(shuō)明這是有幫助的情況,請(qǐng)考慮清單 4 中的地址簿 Web 服務(wù)。
清單 4:地址簿 Web 服務(wù)
xmlns:typens="http://www.ibm.com/namespace/wsif/samples/ab/types"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:java="http://schemas.xmlsoap.org/wsdl/java/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
http://www.ibm.com/namespace/wsif/samples/ab"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
http://www.ibm.com/namespace/wsif/samples/ab"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
該服務(wù)提供兩種綁定:HTTP 之上的 SOAP 和本機(jī) Java。在 WSDL 中直接綁定 Java 類沒有標(biāo)準(zhǔn)的方法,但是這只會(huì)造成理解上的障礙,因此我們不再贅述。給定該服務(wù)多綁定的可用性,客戶機(jī)將希望使用可能提供最好性能(比如 Java 綁定)的一個(gè),大概因?yàn)樗橄蟛僮鞯?Java 方法調(diào)用直接轉(zhuǎn)換,而不需要網(wǎng)絡(luò)、序列化/反序列化等操作。當(dāng)然,Java 綁定只在部署了服務(wù)的環(huán)境可用。不象 SOAP 綁定,它不能在因特網(wǎng)上公用。因此我們希望做的是當(dāng)可以時(shí)選擇 Java 綁定,而在其它情況下使用 SOAP 綁定。如清單 5 所示,可以通過(guò)編寫我們自己的 WSIFPortFactory 來(lái)實(shí)現(xiàn)。
清單 5:定制的綁定選擇算法(請(qǐng)參閱參考資料以獲取全部代碼)
public
class MyWSIFPortFactory extends
WSIFDynamicPortFactory {
public WSIFPort
getPort () throws WSIFException {
WSIFException ex = null;
WSIFPort
portInstance = null;
// examine list of available ports
// do we have a
port with a Java binding?
for(int i = 0; i < myPortsArr.length; ++i)
{
try {
Port port = myPortsArr[i];
Binding binding =
port.getBinding();
if (binding instanceof JavaBinding) {
// attempt to
create a port that can
// make invocations using this binding
portInstance
=
createDynamicWSIFPort(def, service, port);
if(portInstance != null)
{
return portInstance;
}
}
} catch(WSIFException wex) {
if(ex ==
null) {
ex = wex;
}
}
}
// unable to create a port that can
invoke a Java
// binding (why? perhaps there is no Java port
// for this
service, or the Java port cannot be
// created for invocation since we are
not in
// an environment that has access to the resources
// that the Java
binding uses)
// use WSDL ports with other
// bindings for invoking the
service
// Full code not shown here due to length.
// Please see the
Resources section at the end of
// this article to download the actual code.
}
}
如果您下載了清單 5 中示例的全部代碼(參考資料部分中可得到),您應(yīng)該仔細(xì)查看下面的指導(dǎo)說(shuō)明來(lái)執(zhí)行它:
將 zip 壓縮文檔解壓縮到某個(gè)目錄(本例我們使用 C:Forge)。它將創(chuàng)建一個(gè)子目錄,比如
C:Forgetwsif-1.0-my-factory。
當(dāng)您準(zhǔn)備好編譯這個(gè)示例時(shí),務(wù)必包括 WSIF 文檔中描述的所有必需的 JAR
文件。
編譯 C:FORGEwsif-1.0-my-factorysamples 中的樣本源代碼,然后將包含已編譯的 Java .class
文件的這個(gè)目錄添加到 CLASSPATH 環(huán)境變量中。
當(dāng)它完全編譯成功時(shí),在命令行運(yùn)行清單 6 中的第一個(gè)命令。它使用本地示例文件,并且利用修改的動(dòng)態(tài)調(diào)用器。
清單 6:本地應(yīng)用程序中的動(dòng)態(tài)調(diào)用
C:jdk1.3binjava.exe -classpath
".;C:Forgewsif-1.0-my-factorysamples;
C:Forgewsif-1.0samples;C:Forgewsif-1.0samplesgenerated;
C:Forgewsif-1.0samplesgenerated;C:Forgexml-soapxml_soap22.jar;C:Forge
jaxp-1.1jaxp.jar;C:Forgejaxp-1.1crimson.jar;C:Forgejavamail-1.2mail.jar;
C:Forgejaf-1.0.1activation.jar;C:Forgewsif-1.0libwsif-all-1.0.jar"
clients.MyDynamicInvoker samplesservicesstockquoteStockquote.wsdl
getQuote IBM
Reading WSDL document from
'samplesservicesstockquoteStockquote.wsdl'
Preparing WSIF dynamic
invocation
DEBUG: examining for selection port SOAPPort
DEBUG: selected
soap port SOAPPort
DEBUG: examining for selection port JavaPort
DEBUG:
selected java port JavaPort
Preffered port name 'JavaPort'
Executing
operation getQuote
Result:
quote=90.05
Done!
清單 7 展示了第二個(gè)使用 WSDL 的示例,來(lái)自 Web 服務(wù)站點(diǎn) Xmethods.net 而不是本地示例文件。
清單 7:跨網(wǎng)絡(luò)的動(dòng)態(tài)調(diào)用
C:jdk1.3binjava.exe
-classpath
".;C:Forgewsif-1.0-my-factorysamples;
C:Forgewsif-1.0samples;C:Forgewsif-1.0samplesgenerated;
C:Forgewsif-1.0samplesgenerated;C:Forgexml-soapxml_soap22.jar;
C:Forgejaxp-1.1jaxp.jar;C:Forgejaxp-1.1crimson.jar;
C:Forgejavamail-1.2mail.jar;C:Forgejaf-1.0.1activation.jar;
C:Forgewsif-1.0libwsif-all-1.0.jar"
clients.MyDynamicInvoker
http://services.xmethods.net/soap/urn:xmethods-
delayed-quotes.wsdl getQuote IBM
Reading WSDL document from
'http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl'
Preparing WSIF dynamic invocation
DEBUG: examining for selection port
net.xmethods.services.stockquote.StockQuotePort
DEBUG: selected soap port
net.xmethods.services.stockquote.StockQuotePort
Preffered port name
'net.xmethods.services.stockquote.StockQuotePort'
Executing operation
getQuote
Result:
Result=90.0
Done!
在運(yùn)行時(shí)更新/添加綁定實(shí)現(xiàn)
假如我們想要升級(jí)
SOAP 實(shí)現(xiàn)。使用該體系結(jié)構(gòu),我們可以不必重編譯用戶代碼或存根代碼完成到新的實(shí)現(xiàn)的遷移,因?yàn)?WSIF API 將保持不變。我們將編寫新的 WSIFPort
實(shí)現(xiàn),能夠使用由新的 SOAP 實(shí)現(xiàn)提供的修改過(guò)的 SOAP 客戶機(jī) API 進(jìn)行調(diào)用。接著,我們編寫將 WSDL SOAP 接口轉(zhuǎn)換到新的 WSIFPort
實(shí)現(xiàn)的動(dòng)態(tài)提供者。一旦我們注冊(cè)了這個(gè)新的動(dòng)態(tài)提供者,它將代替以前注冊(cè)的 SOAP 動(dòng)態(tài)提供者,并且將通過(guò)新的 WSIFPort 實(shí)現(xiàn)進(jìn)行所有 WSDL SOAP
端口調(diào)用。
請(qǐng)考慮一下我們定義我們自己的 WSDL 綁定的情況。首先,我們必須確保 WSIF 運(yùn)行時(shí)能夠裝入帶有新的綁定的 WSDL 文檔;這需要我們?yōu)榭蓴U(kuò)展性元素定義處理程序,這些元素是使用 WSDL4J(請(qǐng)參閱參考資料)的擴(kuò)展注冊(cè)中心 API 添加到我們的 WSDL 中的元素。我們將不深入到這怎樣實(shí)現(xiàn)的細(xì)節(jié)中。然后我們可以編寫 WSIFPort 和動(dòng)態(tài)提供者實(shí)現(xiàn),以更新 SOAP 綁定同樣的方式向端口工廠注冊(cè)新的動(dòng)態(tài)提供者。
存根體系結(jié)構(gòu)
我們可以從這種體系結(jié)構(gòu)得到的最重要的好處是:它使我們能夠得到可由受管環(huán)境定制的客戶機(jī)存根。所有
WSIF 存根擴(kuò)展清單 8 指定的基本類。
清單 8:WSIFStub 基本類
// some methods and
other details omitted
public abstract class WSIFStub {
/**
* Locates a
port factory using JNDI if available,
* otherwise uses dynamic port factory
with
* pre-registered dynamic providers
*/
protected void
locatePortFactory(.....) {
.....
}
/**
* Initializes stub with ports
defined in WSDL document
* document must contain *exactly* one service and
all
* ports must implement one and only one port type.
*/
protected
void initializeFromLocation (...) {
.....
}
/**
* Return the port
currently being used.
*/
public WSIFPort getPort () {
return
wp;
}
/**
* Return the port factory currently being
used.
*/
public WSIFPortFactory getPortFactory () {
return
wpf;
}
/**
* Create a new proxy using the given
WSIFPortFactory.
*/
public void setPortFactory (WSIFPortFactory wpf)
{
.....
}
/**
* Create a new proxy pre-configured to use the given
port
* for interacting with the service.
*/
public void setPort
(WSIFPort wp) {
.....
}
/**
* Select the port to use by giving the
name of the port
* that is desired. If a port of that name cannot be retrived
from
* the port factory than an exception will be thrown. The port
* I use
will only be updated if this method is successful.
*/
public void
selectPort (String portName) {
.....
}
}
這種體系結(jié)構(gòu)給了我們巨大的好處。在允許受管環(huán)境順著模式作出改變的同時(shí),它使應(yīng)用程序能夠使用同一存根,而不必重新編譯任何東西。請(qǐng)考慮清單 5 中的例子,我們使用定制的綁定選擇算法編寫了我們自己的端口工廠。如果我們?cè)趹?yīng)用程序服務(wù)器環(huán)境操作 JNDI,我們可以將該端口工廠實(shí)現(xiàn)綁定到恰當(dāng)?shù)闹付ǖ?JNDI 環(huán)境。當(dāng)存根在初始化期間查找端口工廠時(shí),它將得到新的實(shí)現(xiàn)。當(dāng)然,我們可以通過(guò)直接調(diào)用存根上的 setPortFactory 方法強(qiáng)制在存根所使用的端口工廠進(jìn)行改變(如果這是我們想要做的),或者我們可以通過(guò)使用存根的 setPort 方法強(qiáng)制使用特殊端口。
總結(jié)
隨著 Web 服務(wù)持續(xù)發(fā)展,使用 SOAP
之外的協(xié)議訪問(wèn)服務(wù)端點(diǎn)將變得很普遍。因此當(dāng)我們編寫使用 Web 服務(wù)的應(yīng)用程序時(shí),我們需要工作在 WSDL 級(jí)而不是在 SOAP 級(jí)的
API。
WSIF 提供了著眼于 Web 服務(wù)調(diào)用的抽象方式,這樣我們可以使用不受綁定束縛的調(diào)用 API 編寫應(yīng)用程序。WSIF 有生成可定制存根的端口類型編譯器;WSIF API 足夠簡(jiǎn)單,以至于應(yīng)用程序能夠通過(guò)直接使用它來(lái)進(jìn)行無(wú)存根調(diào)用。WSIF 的體系結(jié)構(gòu)能夠以靈活的方式定義定制端口和端口工廠,并且也使被創(chuàng)建的消息能夠使用任何本機(jī)類型系統(tǒng)。在存根用來(lái)進(jìn)行調(diào)用的端口或端口工廠中,對(duì)于受管環(huán)境(比如應(yīng)用程序服務(wù)器),生成的存根有入口點(diǎn)來(lái)進(jìn)行運(yùn)行時(shí)修改。
Web 服務(wù)需要獨(dú)立于綁定的可擴(kuò)展調(diào)用框架,WSIF 是朝該方向邁出的第一步。
參考資料
- 請(qǐng)參加關(guān)于這篇文章的討論論壇。
- 請(qǐng)閱讀介紹性文章,它討論了 WSIF 怎樣促成當(dāng)前 Web 服務(wù)調(diào)用模型的改進(jìn),并且描述了 WSIF
的一些主要功能。
- 您可以從此處下載本文清單 5 的所有代碼以及清單 6 和清單 7 中的示例。
- 請(qǐng)下載 alphaWorks 上的 WSIF 分發(fā)包,并且試驗(yàn)比較簡(jiǎn)單的樣本。它將給您一個(gè)由 WSIF
支持的不同調(diào)用風(fēng)格的第一手示例以及它優(yōu)于特定協(xié)議客戶機(jī) API 的優(yōu)勢(shì)。
- 重溫 WSDL 規(guī)范,看一看允許哪一種擴(kuò)展;您也可以學(xué)習(xí)怎樣使用 WSDL 擴(kuò)展機(jī)制定義用來(lái)訪問(wèn)
Web 服務(wù)的 SOAP 綁定。
- 重溫 SOAP 規(guī)范本身。
- 如果以前您沒有對(duì) Web 服務(wù)編過(guò)程,Web
Services Toolkit 是很好的起點(diǎn)。
- 請(qǐng)查看 WSDL4J,一個(gè)可擴(kuò)展的 WSDL 分析框架,WSIF 在此基礎(chǔ)上進(jìn)行構(gòu)建。
Nirmal K. Mukhi 是 IBM 的 T J Watson Research Lab 的“副研究員”,自 2000 年 11 月,他一直在從事各種 Web 服務(wù)技術(shù)的研究。他還對(duì) AI、創(chuàng)造性編寫以及過(guò)時(shí)的計(jì)算機(jī)游戲感興趣。您可以通過(guò) nmukhi@us.ibm.com 與 Nirmal 聯(lián)系。
Aleksander Slominski 是 Indiana
University 的博士生,他是 IU Extreme! Lab 的研究助理,致力于實(shí)現(xiàn)“公共組件體系結(jié)構(gòu)”的 XML/SOAP
啟用版。他還設(shè)計(jì)和實(shí)現(xiàn)了“XML 拖解析器”(XML Pull Parser),并且對(duì) XML 的性能和可用性方面感興趣。在 2001
年夏天期間,他是 IBM 的 T J Watson Research Lab 的實(shí)習(xí)生,在那里他從事 WSIF 第一版的研究。您能夠通過(guò)
aslom@indiana.edu 和 Alek
聯(lián)系。
瀏覽:無(wú)SOAP的Web服務(wù),第一部分
- 1重慶OA信息化
- 2成都OA信息化
- 3貴陽(yáng)OA信息化
- 4西安OA信息化
- 5武漢OA信息化
- 6北京OA信息化
- 7廣州OA信息化
- 8深圳OA信息化
- 9天津OA信息化
- 10沈陽(yáng)OA信息化
- 11長(zhǎng)春OA信息化
- 12福州OA信息化
- 1EIP 相關(guān)資源
- 2炎黃盈動(dòng)AWS石家莊OA信息化應(yīng)用套件
- 3XML Web Service 基礎(chǔ)
- 4Sun拒入“WS-I” 不想跟微軟IBM玩游戲
- 5有一個(gè)綜合性學(xué)術(shù)資源檢索站點(diǎn),不錯(cuò)!
- 6Ask the DotNetJunkies: Consuming Remote Web Services in ASP.
- 7Re: 知識(shí)時(shí)代企業(yè)的四個(gè)要素
- 8初探石家莊OA信息化
- 9Web Services with ASP.NET
- 10大型集團(tuán)公司OA辦公系統(tǒng)平臺(tái)建設(shè)實(shí)施計(jì)劃
- 11Web Services Interoperability and SOAP
- 12即插即用portlet
- 13關(guān)于模型的簡(jiǎn)單介紹!
- 14為企業(yè)開啟Web服務(wù)之門-Sun ONE軟件產(chǎn)品發(fā)布會(huì)在京舉行
- 15Building a Distributed Web Service Using a Strongly-Typed Da
- 16中小企業(yè)如何化解經(jīng)濟(jì)危機(jī)
- 17OA支持工作流報(bào)表的格式自定義——通過(guò)工作流報(bào)表
- 18架構(gòu)Web Service:什么是Web服務(wù)?
- 19W3C加速語(yǔ)義網(wǎng)和Web服務(wù)方案開發(fā)
- 20Web Services. Part I: The Basics
- 21微軟、IBM和BEA制定出Web服務(wù)新規(guī)格
- 22管理結(jié)構(gòu)性的、半結(jié)構(gòu)性的以及非結(jié)構(gòu)性的數(shù)據(jù)類型(by AMT 邢華編譯)
- 23構(gòu)建石家莊OA信息化系統(tǒng)的探討
- 24信息技術(shù)與業(yè)務(wù)流程融合
- 25BEA向Web服務(wù)互操作發(fā)展
- 26加速戰(zhàn)略學(xué)習(xí)
- 27Sharing information through the Lotus Knowledge Discovery Sy
- 28石家莊泛普OA軟件管理門戶登錄
- 29Web Service Case Study: 認(rèn)證考試申請(qǐng)服務(wù)
- 30[編譯] 石家莊OA信息化測(cè)度:目標(biāo)、過(guò)程及方法(夏敬華譯)
成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
版權(quán)所有:泛普軟件 渝ICP備14008431號(hào)-2 渝公網(wǎng)安備50011202501700號(hào) 咨詢電話:400-8352-114