當(dāng)前位置:工程項目OA系統(tǒng) > 泛普各地 > 河北O(jiān)A系統(tǒng) > 石家莊OA系統(tǒng) > 石家莊OA信息化
架構(gòu)Web Service:描述與注冊,發(fā)布Web服務(wù)
架構(gòu)Web Service:描述與注冊,發(fā)布Web服務(wù)
柴曉路 (
Chief System Architect
2001年9月20日
本文是架構(gòu)Web服務(wù)的系列文章的第六篇,也是最后一篇,文本以前文為基礎(chǔ),在前文的應(yīng)用實例的基礎(chǔ)上,考察了發(fā)布Web服務(wù)界面的整個過程:XML
Schema建模、WSDL發(fā)布和UDDI注冊。通過本文,大家可以詳細(xì)具體地了解各個XML和Web Service的系列規(guī)范在Web
Service的發(fā)布時所起的左右,對Web
Service技術(shù)也將有一個深入的理解。
在前文中,我已經(jīng)介紹過,Web服務(wù)是通過SOAP消息調(diào)用的,通過WSDL進(jìn)行界面描述的,以及通過UDDI進(jìn)行公共注冊發(fā)布的。在前一篇文章中,我已經(jīng)介紹了如何進(jìn)行SOAP
API的消息定義,那么在本文中,我將單把save_category提出來,看看在具體的實現(xiàn)上,應(yīng)當(dāng)如何對這個消息使用W3C XML
Schema進(jìn)行建模,如果使用WSDL將基于該消息調(diào)用的Web服務(wù)進(jìn)行規(guī)范描述并交付調(diào)用者,以及如何將這個Web服務(wù)連同它的WSDL規(guī)范化描述文件一起發(fā)布到UDDI注冊中心中去。希望大家能通過本文的實例講解,在本系列的最后完整地了解Web服務(wù)的工作原理和相關(guān)技術(shù)規(guī)范的作用。
本文所引用的資源主要包括兩類,一類是Web服務(wù)的技術(shù)資源網(wǎng)站,包含了大量Web服務(wù)的技術(shù)信息,另一類是Web服務(wù)“stack"系列技術(shù)規(guī)范,他們是一個整體的技術(shù)體系,包括UDDI、SOAP、WSDL、XML Schema, XML等。本文的最后給出了這些資源的鏈接,有興趣的讀者可以通過這些資源鏈接找到所需的內(nèi)容。
SOAP消息示例
以下是一個save_category的調(diào)用例子,在例子中使用了SOAP HTTP Binding(使用的SOAP規(guī)范的版本是1.2),假設(shè)目標(biāo)Web服務(wù)被部署在www.sagitta.com,而調(diào)用的Web服務(wù)的入口位置將是http://www.sagitta.com/catalog/。
在這個消息中,將在一個現(xiàn)有的category中添加一個新的category和一個新的product。
POST /catalog HTTP/1.1
Content-Type: text/xml;
charset="utf-8"
Content-Length: nnnn
SOAPAction: "http://www.sagitta.com/catalog/"
Host:
www.sagitta.com
<?xml version="1.0" encoding="UTF-8"
?>
<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope">
<env:Body>
<save_category
xmlns="http://www.sagitta.com/schema/">
<authInfo>5Az784kJceHCE982eB</authInfo>
<category categoryKey="cb4e17d1-6100-47f6-a532-cd9cbd30c073"
parentCategoryKey="ab4e3de1-7865-f2c1-b49a-beccbd21c072">
<name>Consumer
Electronics</name>
<description>Product Category for Consumer Electronics
</description>
<category
categoryKey=""
parentCategoryKey="cb4e17d1-6100-47f6-a532-cd9cbd30c073">
<name>SONY Consumer
Electronics</name>
<description>Sony's Product Category for Consumer
Electronics</description>
</category>
<product
productKey="" parentCategoryKey="
cb4e17d1-6100-47f6-a532-cd9cbd30c073">
<name>DSC-S75 Digital
Camera</name>
<description>Sony's Brand-New Professional Digital
Camera</description>
<compliantSpecBag>
<specification specificationKey="Key[USB1.1]"
/>
</compliantSpecBag>
<featureBag>
<feature>……</feature>
<feature>……</feature>
</featureBag>
<parameterBag>
……
</parameterBag>
</product>
</category>
</save_category>
</env:Body>
</env:Envelope>
該調(diào)用消息的返回消息可能是:
HTTP/1.1 200 OK
Content-Type: text/xml;
charset="utf-8"
Content-Length: nnnn
<?xml version="1.0" encoding="UTF-8"
?>
<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope">
<env:Body>
<categoryList
xmlns="http://www.sagitta.com/schema/">
<category
categoryKey="cb4e17d1-6100-47f6-a532-cd9cbd30c073"
parentCategoryKey="ab4e3de1-7865-f2c1-b49a-beccbd21c072">
<category categoryKey="8933aa50-3aaf-11d5-80dc-002035229c64"
parentCategoryKey="cb4e17d1-6100-47f6-a532-cd9cbd30c073"
/>
<product
productKey="89307600-3aaf-11d5-80dc-002035229c64"
parentCategoryKey="cb4e17d1-6100-47f6-a532-cd9cbd30c073"
/>
</category>
</categoryList>
</env:Body>
</env:Envelope>
從中我們可以看到在save_category和categoryList兩個元素后面都帶了一個xmlns的修飾"http://www.sagitta.com/schema/"。這URI唯一表示了該元素及其所有子元素的的命名空間。同時通過這個URL可以獲得這些元素的Schema定義。
使用W3C XML Schema描述的XML文檔的模式定義在整個Web服務(wù)的技術(shù)系列中處于一個支持工具的地位。W3C XML Schema是任何類型的XML文檔的建模工具。在Web服務(wù)體系中,無論在SOAP消息的表示上,還是在WSDL的界面描述上,XML Schema都是不可缺少的重要工具和底層支持。
下面我將從XML Schema開始,針對save_category這個消息(同時也對應(yīng)一個服務(wù)入口)逐一介紹如何為我們的XML消息進(jìn)行XML Schema建模,如何使用WSDL將save_category這個服務(wù)入口進(jìn)行界面描述,然后將這個入口發(fā)布到UDDI注冊中心中去。
XML Schema建模
XML Schema的文件后綴是.xsd文件,一個XML Schema中的定義通常分為兩部分,型(Type)定義和元素(Element)定義。下面我們結(jié)合save_category具體的XML Schema定義來說明如何使用XML Schema來實現(xiàn)模式定義。
在下面的XML Schema文檔中,型定義包括:compliantSpecBag,featureBag,parameter,parameterBag,product和category六個類型,而元素定義為save_category這一個元素。
save_category的XML Schema描述定義:(完整的XML Schema文檔是:sagitta.xsd)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
以上是XML Schema的文件頭。
<xs:complexType
name="compliantSpecBag">
<xs:sequence>
<xs:element
name="specification" minOccurs="0"
maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension
base="xs:string">
<xs:attribute name="specificationKey" type="xs:string"
use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
在這段Schema描述中,描述了compliantSpecBag這個元素類型,任何使用compliantSpecBag類型的元素可以包含的元素是specification,這個元素可以出現(xiàn)0次到無窮次(無限制,事實上不可能出現(xiàn)無窮次),而specification這個元素中包含一個屬性specificationKey,該屬性是必須的,同時類型為字符串(xs:string)。xs這個命名空間是W3C XML Schema 2001的命名空間(namespace)。
<xs:complexType
name="featureBag">
<xs:sequence>
<xs:element
name="feature" type="xs:string" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
在這里,描述了featureBag這個元素類型,任何使用featureBag類型的文檔元素可以包含的子元素是feature,而feature元素能夠出現(xiàn)0次到無窮次(無限制,事實上不可能出現(xiàn)無窮次)。該元素的內(nèi)容的類型是字符串(xs:string)。
<xs:complexType
name="parameter">
<xs:sequence>
<xs:element
name="keyName" type="xs:string"/>
<xs:element name="keyValue" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType
name="parameterBag">
<xs:sequence>
<xs:element
name="parameter" type="parameter" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
這里首先描述了parameter這個元素類型,任何使用parameter類型的文檔元素可以包含的子元素有兩個keyName和keyValue,它們都是必須出現(xiàn)的子元素,同時僅可出現(xiàn)一次。他們的類型也都是字符串(xs:string)。然后描述的是parameterBag元素類型,任何使用parameterBag類型的文檔元素可以包含的子元素是parameter,而這個子元素的類型是先前定義的parameter(在XML Schema中,類型名和元素名的域空間是正交的,不需要考慮任何的名字重復(fù)問題),parameter元素出現(xiàn)的次數(shù)可以是從0次到無窮次。
<xs:complexType
name="product">
<xs:sequence>
<xs:element name="name"
type="xs:string"/>
<xs:element
name="description" type="xs:string"/>
<xs:element name="compliantSpecBag"
type="compliantSpecBag"/>
<xs:element
name="featureBag" type="featureBag"/>
<xs:element name="parameterBag"
type="parameterBag"/>
</xs:sequence>
<xs:attribute name="productKey"
type="xs:string"
use="required"/>
<xs:attribute name="parentCategoryKey" type="xs:string"
use="required"/>
</xs:complexType>
這里描述了product這個元素類型,任何使用product類型的文檔元素可以包含的子元素是name、description、compliantSpecBag、featureBag、parameterBag。name和description元素的類型都是xs:string。而compliantSpecBag、featureBag、parameterBag的類型大家通過查看這斷XML Schema定義也可以很清楚地發(fā)現(xiàn)是引用了前面定義的這些類型定義。任何使用product類型的文檔元素還有兩個必須出現(xiàn)的屬性productKey和parentCategoryKey,這是兩個字符串(xs:string)類型的屬性值,分別表示了自身元素的鍵值和父輩category的鍵值。
<xs:complexType
name="category">
<xs:sequence>
<xs:element name="name"
type="xs:string"/>
<xs:element
name="description" type="xs:string"/>
<xs:element name="category" type="category" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element
name="product" type="product" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="categoryKey"
type="xs:string" use="required"/>
<xs:attribute
name="parentCategoryKey" type="xs:string" use="required"/>
</xs:complexType>
這是category元素類型的描述,任何使用product類型的文檔元素可以包含的子元素是name、description、category和product。name和description元素的類型都是簡單類型xs:string。而category是一個遞歸元素,引用了自身這個元素類型。而product的元素類型則是前面描述好的product類型。任何使用product類型的文檔元素還有兩個必須出現(xiàn)的屬性categoryKey和parentCategoryKey,這是兩個字符串(xs:string)類型的屬性值,分別表示了自身元素的鍵值和父輩category的鍵值。
<xs:element
name="save_category">
<xs:complexType>
<xs:sequence>
<xs:element
name="authInfo"
type="xs:base64Binary"/>
<xs:element name="category" type="category" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
這是在這個Schema文檔中唯一的一個元素定義,元素save_category是一個復(fù)合類型,它的元素可以有authInfo和category。其中authInfo是一個base64編碼的字符串,而category則是一個可以出現(xiàn)0次到無限次的類型為category的子元素。我們不難發(fā)現(xiàn)元素定義和類型定義的基本機(jī)制是一樣的,事實上,我們完全可以將這段定義拆分成兩段,一段為類型定義,一段為元素定義,下面給出這個等價實例,希望有助于對Schema的理解。
<xs:complexType
name="save_category">
<xs:sequence>
<xs:element
name="authInfo" type="xs:base64Binary"/>
<xs:element name="category" type="category" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="save_category" type="save_category" />
那為什么要采用第一種方法,而不使用第二種方法呢,原因也很簡單,由于整個Web服務(wù)相關(guān)的消息Schema中,諸如category、product、featureBag、compliantSpecBag、parameterBag這些元素都可能被復(fù)用,因此定義成類型比較合適,而save_category是一個單一的消息,不可能被其他元素復(fù)用,因此就直接定義成了元素。
</xs:schema>
最后,我給出對應(yīng)本節(jié)描述的save_category元素的Schema定義的Schema圖示來結(jié)束本小節(jié)。
Figure 1. SOAP API Schema圖示
WSDL服務(wù)描述
對SOAP API消息完成Schema建模之后,一方面這個數(shù)據(jù)模型可以由SOAP Interface來使用,當(dāng)發(fā)生具體調(diào)用時可以使用這個數(shù)據(jù)模型來除了傳入的參數(shù)并生成傳出的參數(shù)。同時,利用這個數(shù)據(jù)模型,我們可以生成相應(yīng)的WSDL描述,從而將這個Web服務(wù)的接口文檔發(fā)布給使用者,該接口文檔是具備被程序自動處理的能力的。
以下是WSDL文檔詳細(xì)的定義:(完整的WSDL文檔是: sagitta.wsdl)
<?xml version="1.0"?>
<definitions
name="catalogService"
targetNamespace="http://www.sagitta.com/wsdl/savecategory.wsdl"
xmlns:tns="http://www.sagitta.com/wsdl/savecategory.wsdl"
xmlns:myxs="http://www.sagitta.com/schema/"
xmlns:soap="http://www.w3.org/2001/06/soap-envelope"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<import namespace="http://www.sagitta.com/schema/" location=" http://www.sagitta.com/schema/save_category.xsd" />
這是WSDL文件的文件頭,其中的import元素指明在這個WSDL文件中,types系統(tǒng)是由http://www.sagitta.com/schema/save_category.xsd文件具體描述,在這里僅僅是將其導(dǎo)入。
<message name="save_category">
<part name="body" element="myxs:save_category"/>
</message>
<message
name="categoryList">
<part name="body"
element="myxs:categoryList"/>
</message>
這里定義了兩條消息:save_category消息,在前面的Schema建模中已經(jīng)完整地創(chuàng)建了根元素的結(jié)構(gòu)定義。其中myxs是這里使用的命名空間(namespace),命名空間的具體定義在文件頭上出現(xiàn)。而categoryList將會對應(yīng)save_category消息的返回消息,在Schema建模中沒有表現(xiàn),在這里我也僅列出一個元素名,相信大家在看了本文的前半部分以及本系列的前一篇文章之后,會很清楚如何來定義。
<portType
name="save_category_portType">
<operation
name="save_category_operation">
<input
message="tns:save_category"/>
<output
message="tns:categoryList"/>
</operation>
</portType>
這部分定義了服務(wù)訪問點的調(diào)用模式的類型,表明這個入口類型是請求/響應(yīng)模式,請求消息是save_category,而響應(yīng)消息是categoryList。
<binding name="save_category_soapBinding" type="
save_category_portType ">
<soap:binding
style="document" transport=" http://www.w3.org/2001/06/soap-envelope/http">
<operation
name="save_category_operation">
<soap:operation soapAction=" http://www.sagitta.com/catalog/">
<input>
<soap:body use="literal" namespace=" http://www.sagitta.com/schema/"
encodingStyle=" http://www.w3.org/2001/06/soap-encoding"/>
</input>
<output>
<soap:body use="literal" namespace=" http://www.sagitta.com/schema/"
encodingStyle=" http://www.w3.org/2001/06/soap-encoding"/>
</output>
</soap:operation>
</operation>
</soap:binding>
</binding>
這部分將服務(wù)訪問點的抽象定義與SOAP HTTP綁定,描述如何通過SOAP/HTTP來訪問按照前面描述的訪問入口點類型部署的訪問入口。其中規(guī)定了在具體SOAP調(diào)用時,應(yīng)當(dāng)使用的soapAction是"http://www.sagitta.com/catalog/",而請求/響應(yīng)消息的編碼風(fēng)格都應(yīng)當(dāng)采用SOAP規(guī)范默認(rèn)定義的編碼風(fēng)格" http://www.w3.org/2001/06/soap-encoding "。
<service name="catalogService">
<documentation>Online Web Service for Catalog</documentation>
<port name="save_category_port"
binding="tns:save_category_soapBinding">
<soap:address location="http://www.sagitta.com/catalog/"/>
</port>
</service>
</definitions>
這部分是具體的Web服務(wù)的定義,在這個名為catalogService的Web服務(wù)中,提供了一個服務(wù)訪問入口(其實還有很多,不過在這里因為演示的原因,僅僅介紹了一個),訪問地址是"http://www.sagitta.com/catalog/",使用的消息模式是由前面的binding所定義的。
UDDI服務(wù)發(fā)布
在前一節(jié)中,我們已經(jīng)通過使用WSDL這個工具將Catalog Service這個Web服務(wù)進(jìn)行了結(jié)構(gòu)化地描述。為了使更多的潛在用戶能夠發(fā)現(xiàn)這個Web服務(wù),同時也為了加強(qiáng)這個Web服務(wù)的互操作能力和災(zāi)難恢復(fù)時的連接保持能力,我們需要使用UDDI SDK將這個Web服務(wù)注冊到UDDI注冊中心中去。
假設(shè)我們之前已經(jīng)注冊了一個businessEntity,叫做www.sagitta.com,一個在線服務(wù)提供商,這個businessEntity的鍵值是"434554F4-6E17-1342-EA41-36E642531DA1",那么我們要在這個businessEntity下注冊一個businessService,以用于描述前面的Catalog Service。同時需要成立的假設(shè)是我們也預(yù)先注冊了一個Service Type(tModel),這個tModel描述了我們這個需要發(fā)布的Web服務(wù)的調(diào)用規(guī)范,具體內(nèi)容是前面我定義的這個WSDL文檔,在UDDI中,注冊的是描述的鏈接。
businessService注冊的SOAP消息如下,其中使用了Microsoft的test.uddi.microsoft.com站點,因此authInfo中可以填入測試用的udditest。
<?xml version="1.0" encoding="UTF-8"?>
<Envelope
xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<save_service
generic="1.0" xmlns="urn:uddi-org:api">
<authInfo>udditest</authInfo>
<businessService businessKey="434554F4-6E17-1342-EA41-36E642531DA1"
serviceKey="">
<name>categoryService</name>
<description xml:lang="en">Online Web Service for
Catalog</description>
<bindingTemplates>
<bindingTemplate bindingKey=""
serviceKey="">
<description xml:lang="en">categoryService's
BindingTemplate3</description>
<accessPoint
URLType="http">http://www.sagitta.com/catalog/</accessPoint>
<tModelInstanceDetails>
<tModelInstanceInfo
tModelKey="uuid:E31A569A-AEFF-4468-BA4D-2BF22FE4ACEF">
<description xml:lang="en">Sagitta Web Service Type
Description</description>
<instanceDetails>
<description xml:lang="en">Sagitta Web Service Type
Description</description>
<overviewDoc>
<description xml:lang="en">Sagitta Web Service
Overview</description>
<overviewURL>http://www.sagitta.com/wsdl/savecategory.wsdl</overviewURL>
</overviewDoc>
</instanceDetails>
</tModelInstanceInfo>
</tModelInstanceDetails>
</bindingTemplate>
</bindingTemplates>
</businessService>
</save_service>
</Body>
</Envelope>
通過上述的API調(diào)用,我們就已經(jīng)把這個服務(wù)注冊進(jìn)了UDDI注冊中心,其中bindingTemplate的accessPoint是服務(wù)的入口,而overviewDoc中的overviewURL是WSDL文檔的訪問位置。
潛在的使用者可以通過查詢UDDI注冊中心找到這個Web服務(wù),通過overviewURL中保存的URL找到服務(wù)的描述,然后通過accessPoint所指定的訪問地址來訪問這個服務(wù)。
當(dāng)發(fā)生緊急服務(wù)崩潰的時候,Web服務(wù)可能被遷移到另一臺主機(jī)上,IP地址,甚至是訪問的URL都可能有很大變化,此時原先的集成的連接將不再工作。但是由于UDDI注冊的存在,我們可以通過自動化的程序手段來解決這個問題,使得類似的服務(wù)災(zāi)難恢復(fù)的過程非常迅速。
具體的流程一般是:
當(dāng)恢復(fù)的服務(wù)啟動后,自動去更新UDDI注冊中心上的數(shù)據(jù),將訪問入口修改到新的URL位置;
連入的客戶端系統(tǒng)當(dāng)發(fā)現(xiàn)無法訪問最終服務(wù)的時候,將會定期去查詢UDDI注冊中心,看看新的BindingTemplate數(shù)據(jù)和本地緩存的有沒有差別,如果有的話,就下載到本地,重新建立服務(wù)綁定,完成服務(wù)連接的遷移。
總結(jié)
到這篇文章為止,如何架構(gòu)Web Service這個系列就將告一段落,在整個系列中,從為什么要有Web服務(wù)開始,到什么是Web服務(wù),Web服務(wù)的開發(fā)工具,對Web服務(wù)作了一個概念上的全面介紹。然后以一個具體實例來介紹Web服務(wù)的構(gòu)建模式和各種Web Service "stack"技術(shù)的具體應(yīng)用。希望這個系列對大家理解和接受下一代的應(yīng)用包裝模式Web服務(wù)有一個全面的幫助。
參考資料
- Web Service 技術(shù)/評論網(wǎng)站
-
- UDDI-China.ORG,
以UDDI為主的Web服務(wù)技術(shù)網(wǎng)站。
- WebServices.ORG,
Web服務(wù)的綜合類技術(shù)網(wǎng)站。
- IBM
developerWorks/Web Service Zone, IBM的Web服務(wù)技術(shù)資源中心
- MSDN Online Web
Services Developer Resources, Microsoft的Web服務(wù)的開發(fā)者資源網(wǎng)站
- ITPapers/Web
Service, ITPapers的Web服務(wù)評論文章
- UDDI-China.ORG,
以UDDI為主的Web服務(wù)技術(shù)網(wǎng)站。
- 解決B2B電子商務(wù)應(yīng)用交互和集成的InterOP Stack系列技術(shù)標(biāo)準(zhǔn)規(guī)范
-
- UDDI執(zhí)行白皮書,
UDDI-China.org, UDDI.org
- UDDI技術(shù)白皮書,
UDDI-China.org, UDDI.org
- UDDI程序員API規(guī)范,
UDDI-China.org, UDDI.org
- UDDI數(shù)據(jù)結(jié)構(gòu)參考,
UDDI-China.org, UDDI.org
- Web
Service Description Language (WSDL) 1.0, IBM, 25 Sep 2000
- SOAP:
Simple Object Access Protocol Specification 1.1, IBM, Microsoft,
DevelopMentor, 2000
- XML Schema Part 0:
Primer , W3C, 2 May 2001
- Extensible Markup Language (XML) 1.0 (Second Edition), W3C, 6 Oct 2000
- UDDI執(zhí)行白皮書,
UDDI-China.org, UDDI.org
作者簡介
柴曉路: 上海得易電子商務(wù)技術(shù)有限公司(DealEasy)首席系統(tǒng)架構(gòu)師、XML技術(shù)顧問。UDDI-China.org藍(lán)色火焰工作室(Blue Blaze Studio)成員。UDDI Advisor
Group成員,WSUI Working
Group成員。2000年獲復(fù)旦大學(xué)計算機(jī)科學(xué)碩士學(xué)位,曾在國際計算機(jī)科學(xué)學(xué)術(shù)會議(ICSC)、亞太區(qū)XML技術(shù)研討會(XML
Asia/Pacific'99)、中國XML技術(shù)研討會(北京)、計算機(jī)科學(xué)期刊等各類國際、國內(nèi)重要會議與期刊上發(fā)表論文多篇。專長于基于XML的系統(tǒng)集成和數(shù)據(jù)交換的技術(shù)研究,同時對數(shù)據(jù)庫、面向?qū)ο蠹夹g(shù)及CSCW等技術(shù)比較擅長。
- 1將Web服務(wù)用于電子交易的單點登錄
- 2面向服務(wù)的應(yīng)用集成——EAI和Web服務(wù)
- 3OA辦公系統(tǒng)軟件信息傳遞的安全解決方案
- 4ColdFusion MX增加對J2EE、XML和Web服務(wù)的兼容
- 5破解OA項目實施難題:建立項目實施與交付體系
- 6微軟、IBM和BEA制定出Web服務(wù)新規(guī)格
- 7OA辦公系統(tǒng)支持表單手寫簽名、審批意見
- 8At Your Service, On the Web
- 9知識經(jīng)濟(jì)時代的知識、競爭與制度演化
- 10企業(yè)知識資本運(yùn)營模式簡述
- 11[編譯] 石家莊OA信息化測度:目標(biāo)、過程及方法(夏敬華譯)
- 12什么是真正的石家莊OA信息化
- 1321世紀(jì)企業(yè)文化發(fā)展的六大趨勢
- 14信息技術(shù)與業(yè)務(wù)流程融合
- 15微軟展示新版互聯(lián)網(wǎng)服務(wù)MSN 8.0
- 16Web服務(wù)內(nèi)幕,第7部分:WSFL和遞歸組合
- 17Web服務(wù)內(nèi)幕,第1部分:我們已走了多遠(yuǎn)?
- 18A Platform for Web Services
- 19石家莊OA信息化——信息化的奢侈品?<br><div align=right>——夏敬華專訪&l
- 20微軟將于10月采取訂閱銷售模式
- 21泛普軟件石家莊OA信息化實施階段劃分
- 22解讀德魯克
- 23知識地圖在項目型組織中的應(yīng)用
- 24OA研發(fā)團(tuán)隊的項目管理主要關(guān)注9類關(guān)鍵活動,如下:
- 25搜索:非結(jié)構(gòu)化信息管理的核心
- 26EIP 相關(guān)資源
- 272009金和協(xié)同管理“破冰之旅”助企業(yè)安然渡冬
- 28InterOP Stack新一代平臺互操作技術(shù):InterOP Stack技術(shù)應(yīng)用前瞻
- 29石家莊OA信息化的基本XML和RDF技術(shù)(二):將文件合并到RDF模型和基本的RDF查詢
- 30XML Web Service 安全性
成都公司:成都市成華區(qū)建設(shè)南路160號1層9號
重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓
版權(quán)所有:泛普軟件 渝ICP備14008431號-2 渝公網(wǎng)安備50011202501700號 咨詢電話:400-8352-114