當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 上海OA系統(tǒng) > 上海OA信息化
設(shè)計(jì)合同
申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114
AMTeam.org設(shè)計(jì)合同
Scott Seely
Microsoft Corporation
2001年6月6日
簡(jiǎn)介
我們已經(jīng)很長(zhǎng)時(shí)間沒有在 At Your Service
專欄中與您進(jìn)行交流了。為了扭轉(zhuǎn)這一局面,我們專門成立了一個(gè)小組來從事這方面的工作,小組成員包括 Matt Powell 和 Scott Seely。我是
Scott,先由我和大家來探討有關(guān)問題。不久前,Mary Kirtland
在讓我們認(rèn)識(shí)一下(英文)一文中對(duì)我們進(jìn)行了介紹。不過,既然以后由我們主持本專欄的工作,我們想更為詳細(xì)地介紹一下自己。
Matt 在 Microsoft 工作了 10 年以上,大部分時(shí)間是在 Microsoft 的開發(fā)人員支持機(jī)構(gòu)中工作。他堅(jiān)持認(rèn)為自己是一個(gè)網(wǎng)絡(luò)協(xié)議專家,因?yàn)樗偸怯袡C(jī)會(huì)對(duì)涉及 DLC、NetBIOS、Winsock、RPC、SNMP、WinInet 和 ISAPI 中的一切提供支持。相對(duì)于 Windows? 資源管理器來說,Matt 更喜歡使用 MS-DOS 提示符;在緊急情況下,甚至?xí)褂?EDLIN 來編輯文本文件。業(yè)余時(shí)間,Matt 喜歡帶著他的一家九口去觀看西雅圖水手隊(duì)的比賽。他總是坐在第一排,就在 Ichiro 的身后觀看比賽,不停揮舞著白毛巾,瘋狂地為西雅圖水手隊(duì)吶喊助威。
如果您閱讀過本專欄以前發(fā)布的文章,您可能會(huì)注意到 James Francisco(他以前是我們小組的成員之一)曾經(jīng)提到我們已經(jīng)落后于進(jìn)度表,因?yàn)橐话腴_發(fā)人員(指我)休假回家去照顧孩子了。3 月 15 日,我去看望了我的女兒 Angeline。她的母親、哥哥和我都花了四周時(shí)間來了解我們這個(gè)新家庭成員。在那段時(shí)間中,我還為 Prentice Hall 撰寫完有關(guān) SOAP 的一書《SOAP:使用 XML 開發(fā)跨平臺(tái) Web 服務(wù)》(英文)。它將在 2001 年 7 月底與讀者見面。除了著書之外,我還從事跨平臺(tái)開發(fā)工作。這是因?yàn)閷?shí)際上,我使用過三個(gè)非 Microsoft 的 SOAP 工具包:我自己的 SimpleSOAP(英文)、Apache SOAP(英文)和 SOAP::Lite(英文)。
概述
在本專欄中,我們將討論為 Web
服務(wù)設(shè)計(jì)合同時(shí),需要考慮哪些因素。希望您在提到 Web 服務(wù)時(shí),不要再聯(lián)想到諸如檢索股票價(jià)格或是查看您所在城市當(dāng)前的氣溫這樣的事情了。相反,您應(yīng)該將 Web
服務(wù)看作具有相當(dāng)完善功能的 API 的組件。在本專欄中,我們將討論如何設(shè)計(jì) Web 服務(wù)的接口以及滿足全球化要求。
定義 Web 服務(wù)的接口
現(xiàn)在,通過 Web 服務(wù)說明語言 (WSDL)
文件可以告知他人如何訪問和使用 Web 服務(wù)。最初引入 SOAP 時(shí),曾出現(xiàn)過多種基于 XML 的接口說明語言 (IDL)。所有這些 IDL
識(shí)別不同的描述服務(wù)方式,并且包含一些特定于它們所依附的 SOAP 實(shí)現(xiàn)方案的項(xiàng)目。業(yè)界很快意識(shí)到必須進(jìn)行標(biāo)準(zhǔn)化,這樣就產(chǎn)生了 WSDL。WSDL
說明了以下項(xiàng)目:
Web 服務(wù)可以識(shí)別的數(shù)據(jù)類型
消息架構(gòu)
Web
服務(wù)使用的交換方法(請(qǐng)求/響應(yīng)、單向、多播等等)
Web 服務(wù)的位置
錯(cuò)誤信息
標(biāo)頭信息
對(duì)
WSDL 的完整說明已超出了本文討論的范圍,不過在本文的末尾,您可以找到一些非常好的 WSDL 背景資料的鏈接?,F(xiàn)在我只想集中討論如何使用以上項(xiàng)目來定義 Web
服務(wù)的接口。
定義接口時(shí),首先應(yīng)考慮數(shù)據(jù)類型。應(yīng)該始終確保您的類型可以重新映射到 XML 架構(gòu)數(shù)據(jù)類型。例如,對(duì)于字符串,應(yīng)該使用 xsd:string。構(gòu)建復(fù)雜的類型時(shí),請(qǐng)確保它們最終可以分解為預(yù)定義的 XML 架構(gòu)數(shù)據(jù)類型之一。例如,您可以通過電子郵件地址和業(yè)務(wù)電話號(hào)碼來定義一個(gè)聯(lián)系人。WSDL 文件的類型部分類似于以下內(nèi)容:
<definitions xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:s0="http://tempuri.org/"
targetNamespace="http://tempuri.org/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<s:schema
attributeFormDefault="qualified"
elementFormDefault="qualified"
targetNamespace="http://tempuri.org/">
<s:element
name="ContactInfo">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1"
name="name" nillable="true"
type="s0:PersonName"
/>
<s:element minOccurs="1" maxOccurs="1"
name="emailAddress" nillable="true"
type="s0:EmailAddress"
/>
<s:element minOccurs="0" maxOccurs="unbounded"
name="phoneNumbers" nillable="true"
type="s0:PhoneNumber"
/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType
name="PersonName">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1"
name="first"
nillable="false" type="s:string"
/>
<s:element minOccurs="1" maxOccurs="1"
name="middle" nillable="true"
type="s:string"
/>
<s:element minOccurs="1" maxOccurs="1"
name="last"
nillable="false" type="s:string" />
</s:sequence>
</s:complexType>
<s:complexType
name="PhoneNumber">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1"
name="areaCode" nillable="false"
type="s:long"
/>
<s:element minOccurs="1" maxOccurs="1"
name="prefix"
nillable="true" type="s:long"
/>
<s:element minOccurs="1" maxOccurs="1"
name="suffix"
nillable="false" type="s:long"
/>
</s:sequence>
</s:complexType>
</s:schema>
</types>
...
</definitions>
正如您所看到的,所有的復(fù)雜類型最終都分解為現(xiàn)有的 XML 架構(gòu)數(shù)據(jù)類型。有了這樣的限制,其它 SOAP 實(shí)現(xiàn)方案就更有可能與您的 Web 服務(wù)進(jìn)行交互。這是因?yàn)椴煌钠脚_(tái)存在著不同的 XML 架構(gòu)實(shí)現(xiàn)方案,只要符合標(biāo)準(zhǔn)并盡量避免使用自己偏愛的個(gè)人實(shí)現(xiàn)方案,就可以增加 Web 服務(wù)的可用性。
下一步,應(yīng)考慮如何將 Web 服務(wù)的功能分解成多個(gè)因子。對(duì) Web 服務(wù)進(jìn)行編程時(shí),應(yīng)該將相關(guān)的操作組合到單個(gè)端口中。對(duì)于收藏服務(wù),我們?cè)谠O(shè)計(jì)上將其分解為三個(gè)服務(wù):
登錄:對(duì)被授權(quán)者進(jìn)行身份驗(yàn)證并授予他們一個(gè)訪問服務(wù)時(shí)使用的密鑰
帳戶:處理最終用戶的創(chuàng)建和收藏?cái)?shù)據(jù)的維護(hù)事項(xiàng)
報(bào)表:處理報(bào)表
將功能分成相關(guān)的功能塊后,在構(gòu)建特定的功能時(shí),Web
服務(wù)的用戶就可以很輕松地找到他們所需的功能。編程人員可以了解與特定端口有關(guān)的功能,從而使他們的工作變得更為輕松。
這些端口的實(shí)現(xiàn)一般駐留在一個(gè)對(duì)象中。在內(nèi)部,對(duì)象可以共享公共的 Helper 函數(shù)。在外部,這些對(duì)象不應(yīng)該依賴于內(nèi)部狀態(tài)。我曾觀察過新聞組,發(fā)現(xiàn)許多人在試圖傳送 SOAP 對(duì)象的指針或引用時(shí)都遭遇了失敗。為什么他們會(huì)失敗呢?因?yàn)樗麄冊(cè)O(shè)計(jì)的東西要求引用指針,但很快他們就會(huì)意識(shí)到 SOAP 不允許這樣做。
如果您陷入了困境,我們向您介紹一個(gè)很好的解決方法:使用 in/out 參數(shù)。無論對(duì)象是 in、out 還是 in/out 參數(shù),它必須能將自己的狀態(tài)寫入 XML。當(dāng)您指定所需的對(duì)象部分時(shí),請(qǐng)分析一下功能真正需要什么數(shù)據(jù),并且只需要該信息。這可能會(huì)產(chǎn)生巨大的差異,因?yàn)樵诰W(wǎng)絡(luò)上傳輸數(shù)據(jù)可能比整個(gè)串行化過程花費(fèi)的時(shí)間更多。消息越小,到達(dá)目的地所需的時(shí)間也就越少。
您可能還希望確保能夠監(jiān)視來回傳送的參數(shù)。如果使用可以生成 WSDL 的工具(例如 .NET 運(yùn)行時(shí)或 SOAP Toolkit v2 WSDLGEN.EXE 工具),您可能不會(huì)意識(shí)到自己正在浪費(fèi)帶寬。在構(gòu)建解決方案時(shí),請(qǐng)花一些時(shí)間來了解生成的 WSDL 看起來像什么。看看是否可以找到減少消息往返次數(shù)的位置。例如,Visual Basic? COM 對(duì)象中作為 ByRef 發(fā)送的任何參數(shù)(如果您不指定,它們將都是 ByRef)都是一個(gè) in/out 參數(shù)。如果使用該對(duì)象,但在返回之前不對(duì)它進(jìn)行修改,則應(yīng)該將該參數(shù)更改為 ByVal。同樣地,請(qǐng)檢查 C++ 對(duì)象的 IDL 文件,并確保參數(shù)進(jìn)行了相應(yīng)的限定。
大多數(shù)情況下,Web 服務(wù)使用了請(qǐng)求/響應(yīng)(即傳統(tǒng)的 RPC)。可以通過忽略 operation 的 output 元素來指定單向。
請(qǐng)求/響應(yīng):
<operation name='DeleteFavorite' parameterOrder='key Username
FavID'>
<input
message='wsdlns:Account.DeleteFavorite' />
<output message='wsdlns:Account.DeleteFavoriteResponse'
/>
</operation>
單向:
<operation name='DeleteFavorite' parameterOrder='key Username
FavID'>
<input
message='wsdlns:Account.DeleteFavorite'
/>
</operation>
單向消息只是忽略了輸出消息。如果有必要,請(qǐng)忽略“輸出消息”。這樣做可以減少等待的時(shí)間,并且可以使服務(wù)運(yùn)行得更快一些,因?yàn)榭蛻舫绦虿辉俚却祷氐南ⅰ?/FONT>
因?yàn)?WSDL 是 IDL,WSDL 端口代碼的唯一要求是它必須正確地響應(yīng)任何 SOAP 請(qǐng)求。這對(duì)您意味著什么呢?假定我們正在使用一個(gè)客戶端應(yīng)用程序,它要和三個(gè)處理訂單的服務(wù)器進(jìn)行通信。其中一個(gè)服務(wù)器可以處理家具訂單,另一個(gè)處理書籍訂單,第三個(gè)則處理 DVD 訂單。假定這些系統(tǒng)之間的唯一差別是項(xiàng)目的數(shù)據(jù)庫(kù),則我們可以使用相同的客戶程序來訪問不同的服務(wù)。唯一的差別應(yīng)該是服務(wù)的端點(diǎn)。(這是 UDDI 所依賴的概念之一。)WSDL 的 SOAP 綁定通過使用 soap:address 元素來做到這一點(diǎn)。
<service name='Account' >
<port name='AccountSoapPort' binding='wsdlns:AccountSoapBinding'
>
<soap:address
location='http://coldrooster.com/ssf/account.asp' />
</port>
</service>
許多能識(shí)別 WSDL 的工具包允許在讀取文件后更改端點(diǎn)。如果知道實(shí)現(xiàn)端口的其它服務(wù)的位置,或者使用 UDDI 服務(wù)器來獲取類似的信息,則可以使用同一個(gè)客戶程序與不同的端點(diǎn)進(jìn)行通信。
如果花費(fèi)一些時(shí)間來考慮 SOAP 接口,您的 Web 服務(wù)將可以從任何計(jì)算機(jī)上進(jìn)行訪問。如果多個(gè)資源提供了相同的服務(wù),公共接口將允許單個(gè)客戶程序訪問不同的 Web 服務(wù)。使用自動(dòng)生成 WSDL 的工具設(shè)計(jì)這些應(yīng)用程序時(shí),請(qǐng)花費(fèi)一些時(shí)間來查看生成的 WSDL 并確保只發(fā)送絕對(duì)必要的信息。因?yàn)閷?duì)于簡(jiǎn)短的操作,您會(huì)發(fā)現(xiàn)網(wǎng)絡(luò)將成為瓶頸。
Web 服務(wù)的全球化
還應(yīng)該考慮訪問 Web
服務(wù)的類型。世界各地的用戶可能都在使用該服務(wù),這對(duì)您意味著什么呢?
您可能會(huì)遇到數(shù)據(jù)存儲(chǔ)和傳輸?shù)膯栴}。如果您的服務(wù)接受字符串?dāng)?shù)據(jù),請(qǐng)確保可以接受、傳輸和存儲(chǔ)國(guó)際字母表(例如日語、西里爾語、阿拉伯語等等)。有了收藏服務(wù),我們可以通過要求服務(wù)接受 UTF-8 和 UTF-16 編碼的 XML 來處理該問題。Microsoft? SOAP Toolkit v2 可以做到這點(diǎn)??紤]后端系統(tǒng)時(shí),您還應(yīng)該考慮大字符集問題,即使用支持 Unicode 的字符串類型和數(shù)據(jù)存儲(chǔ)器。對(duì)于收藏服務(wù),我們使用 Visual Basic,因?yàn)樗梢栽诒镜靥幚?Unicode 字符串。在存儲(chǔ)器端,我們使用 nchar 和 nvarchar 數(shù)據(jù)類型在 Microsoft? SQL Server 中存儲(chǔ)所有的字符串。正如您可以看到的,挑選合適的工具可以更輕松地滿足國(guó)際化這個(gè)方面的要求。
您還需要考慮如何分發(fā) Web 服務(wù)文檔。由于大多數(shù)開發(fā)人員可以使用英語進(jìn)行讀寫,因此只要提供規(guī)范的英文文檔,您就可以贏得巨大的訪問量。在這些文檔中,不要使用俚語,而應(yīng)該使英文盡可能簡(jiǎn)單易懂。要吸引其它國(guó)家中的用戶接受您的服務(wù),您可能需要考慮使用開發(fā)人員的母語提供文檔。
返回 SOAP 錯(cuò)誤時(shí),您可能需要考慮允許被授權(quán)者為 Fault.Description 成員指定首選語言。錯(cuò)誤數(shù)適中將有助于服務(wù)的最終用戶進(jìn)行查看。我們?cè)胩峁┮恍┮蕴囟ㄕZ言表述的錯(cuò)誤字符串,但最終決定不這樣做。(我聽說 Project Lucy 正在考慮對(duì)錯(cuò)誤字符串進(jìn)行翻譯,可能在今年的晚些時(shí)候他們的小組將會(huì)就這一問題進(jìn)行討論。)相反,我們編寫了有關(guān)文檔,在其中指定了一些 Fault.Code 值,Web 服務(wù)提供的函數(shù)會(huì)返回這些值。這樣將允許編程人員編寫使用收藏服務(wù)來處理自己的錯(cuò)誤和本地化的應(yīng)用程序。
還應(yīng)該考慮:當(dāng) Web 服務(wù)不僅在您所在地區(qū)而且在其它地區(qū)被公眾接受時(shí),應(yīng)該做些什么。此時(shí),Cold Rooster 的服務(wù)都集中在華盛頓州的雷蒙德。美國(guó)之外的用戶必須通過橫跨大洋的 Internet 鏈接來使用服務(wù)。如果這樣的用戶很多,我們必須考慮在世界的其它地區(qū)部署 Web 服務(wù),以便用戶獲得更快的響應(yīng)時(shí)間。使用全球分布的服務(wù)器來處理請(qǐng)求以后,又出現(xiàn)了新的問題。其中一個(gè)是:擴(kuò)展 Web 服務(wù)時(shí),必須考慮如何分發(fā)用戶數(shù)據(jù)。
對(duì)于收藏服務(wù),以下列舉了可能出現(xiàn)的一些新問題:
被授權(quán)者希望能夠訪問所有 Web 服務(wù)器上的 Web 服務(wù),因此我們必須提供在數(shù)據(jù)中心之間同步數(shù)據(jù)的方法。
無論最終用戶處于哪個(gè)位置,他們都希望數(shù)據(jù)可以傳送給他們。這意味著我們必須強(qiáng)制被授權(quán)者記住所聯(lián)系的哪個(gè)數(shù)據(jù)中心可以獲取最終用戶數(shù)據(jù),或者將所有的用戶數(shù)據(jù)傳播到所有數(shù)據(jù)中心。
當(dāng)審計(jì)事件在全球發(fā)生時(shí),我們?nèi)绾翁幚韺徲?jì)日志?最有可能的是:在某個(gè)位置的某個(gè)數(shù)據(jù)庫(kù)中存儲(chǔ)所有的審計(jì)數(shù)據(jù),并簡(jiǎn)單地將對(duì)該數(shù)據(jù)源的請(qǐng)求排隊(duì),以避免任何延遲問題。
我們必須設(shè)計(jì)規(guī)則,解決全球各地分散的數(shù)據(jù)中心之間的更改沖突。例如,被授權(quán)者可能在兩個(gè)不同的服務(wù)器上更改了管理聯(lián)系人數(shù)據(jù),我們必須要提出如何處理這種沖突的規(guī)則。
與全球化有關(guān)、但易于忽略的最后一個(gè)問題是確定如何接受付款。您是允許用戶使用任何貨幣付款呢,還是要求他們使用您的本地貨幣付款?全球化這方面的問題可能非常復(fù)雜,我們現(xiàn)在暫時(shí)將它放入思想庫(kù)中,如果讀者感興趣,我們將在以后的文章中進(jìn)行討論。
總結(jié)
設(shè)計(jì) Web 服務(wù)時(shí),要考慮 Web 服務(wù)是如何使用的。如果在工具所生成的
WSDL
文件方面花費(fèi)一些時(shí)間,可以優(yōu)化它在網(wǎng)絡(luò)上的性能。這些文件將有助于找出在何處傳送大量數(shù)據(jù)會(huì)對(duì)總體吞吐量造成不良影響。同時(shí),避免將所有功能都放置在一個(gè)存儲(chǔ)桶中,除非這樣做是非常必要的。在一個(gè)端口上將相關(guān)的功能歸集在一起。
考慮全球化問題時(shí),應(yīng)盡量使設(shè)計(jì)的程序適用于處于不同地區(qū)的用戶。預(yù)料到用戶可能使用多種語言。對(duì)于收藏服務(wù),我們進(jìn)行了測(cè)試,確??梢詾榇笞帜副淼恼Z言(例如中文)存儲(chǔ)字符串。測(cè)試您的 Web 服務(wù)時(shí)也應(yīng)該這么做。標(biāo)識(shí)可能不在前 128 個(gè) ASCII 字符范圍內(nèi)的所有字符串,并確??梢源鎯?chǔ)和提取中文、阿拉伯語以及其它一些字母表的字符串。這將檢查您處理 Unicode 字符串的能力。
有關(guān) WSDL 的更多知識(shí),請(qǐng)查閱以下文章:
WSDL 背景資料:
WSDL 入門(英文)
Yasser Shohoud 撰寫的 WSDL 簡(jiǎn)介(英文)
- 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信息化
- 1OA辦公系統(tǒng)在線試用過程中,客戶如何選擇和判斷呢
- 2上海眾國(guó)汽車集團(tuán) 網(wǎng)絡(luò)智能辦公OA系統(tǒng)
- 3經(jīng)營(yíng)知識(shí)
- 4上海OA信息化的幾種學(xué)科體系
- 5上海OA信息化也能大規(guī)模定制“生產(chǎn)”
- 6實(shí)施上海OA信息化的要素分析
- 7OA辦公系統(tǒng)中那些復(fù)雜的應(yīng)用,諸如客戶管理、財(cái)務(wù)管理等
- 8泛普OA軟件給大眾的印象正是實(shí)用、易用、開放
- 9[原創(chuàng)]小論企業(yè)價(jià)值鏈中的上海OA信息化
- 10信息化技術(shù)是實(shí)現(xiàn)有效上海OA信息化的基礎(chǔ)
- 11建筑施工行業(yè)OA辦公軟件、項(xiàng)目管理軟件將是泛普軟件的“菜”
- 12微軟基于Web計(jì)算的框架結(jié)構(gòu)分析
- 13泛普OA成功實(shí)施的保障
- 14樂趣無窮,可能無限的新技術(shù)-web service
- 15企業(yè)發(fā)展的知識(shí)動(dòng)因Vs.上海OA信息化三要素(by AMT 夏敬華 孟凡強(qiáng))
- 16泛普OA加速企業(yè)移動(dòng)信息化普及
- 17國(guó)外上海OA信息化四流程框架
- 18知識(shí)的分類與知識(shí)創(chuàng)新的過程
- 19Web服務(wù)到底是什么
- 20用C#制作一個(gè)最簡(jiǎn)單的Web Service
- 21企業(yè)搜索、競(jìng)爭(zhēng)情報(bào)和上海OA信息化
- 22使用.Net, Java或者M(jìn)S SOAP Toolkit 創(chuàng)建Web服務(wù)
- 23隱性知識(shí)的轉(zhuǎn)化
- 24OA軟件不是你想象之中那樣
- 25上海OA信息化訪問單
- 26IT企業(yè)如何進(jìn)行上海OA信息化?
- 27知識(shí)輸出的八個(gè)階段
- 28政務(wù)協(xié)同與信息的親民政策
- 29上海凱波水下工程有限公司OA辦公系統(tǒng)
- 30隱性知識(shí)的轉(zhuǎn)化和傳播
成都公司:成都市成華區(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