當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 泛普各地 > 河北O(jiān)A系統(tǒng) > 石家莊OA系統(tǒng) > 石家莊OA信息化
Web Service Case Study: 認(rèn)證考試申請(qǐng)服務(wù)
申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114
AMTeam.orgWeb Service Case Study: 認(rèn)證考試申請(qǐng)服務(wù)
柴曉路 (
Chief System Architect
2002年4月10日
本文是Web Service Case
Study系列文章的第二篇。在這篇文章中,我將圍繞一個(gè)認(rèn)證考試申請(qǐng)系統(tǒng)展開設(shè)計(jì)和討論,這個(gè)應(yīng)用與本文的系統(tǒng)不同,主要是面向B2C模式的應(yīng)用,著眼點(diǎn)在于如何將這個(gè)系統(tǒng)的客戶端插入到盡可能多的公共平臺(tái)、桌面系統(tǒng)中去,同時(shí)借助這個(gè)Case
Study,我將著重講解在Web服務(wù)設(shè)計(jì)的時(shí)候,如何有效地使用XML
Schema設(shè)計(jì)系統(tǒng)中使用的XML數(shù)據(jù)模式。
本文中針對(duì)的應(yīng)用實(shí)例是一個(gè)認(rèn)證考試系統(tǒng),應(yīng)用背景如下:(以下陳述純屬虛構(gòu))
UDDI-China.org是中國(guó)的Web Services技術(shù)組織,提供Web服務(wù)系列技術(shù)的技術(shù)認(rèn)證服務(wù),具體負(fù)責(zé)這個(gè)技術(shù)認(rèn)證服務(wù)的是UDDI-China.org下的WSTA機(jī)構(gòu)。任何技術(shù)人員都可以向WSTA機(jī)構(gòu)提出申請(qǐng),要求進(jìn)行某一項(xiàng)Web服務(wù)技術(shù)(比如XML Schema、SOAP、WSDL、UDDI等)的技術(shù)認(rèn)證,一般流程是要經(jīng)過申請(qǐng)、修讀相應(yīng)課程、考試這三個(gè)主要步驟。WSTA認(rèn)證考試系統(tǒng)就是為了管理和加速這個(gè)流程而開發(fā)的一套系統(tǒng)。
在介紹具體的系統(tǒng)流程之前,我們先來(lái)看看這個(gè)系統(tǒng)的實(shí)體關(guān)系圖:
Figure 1. 認(rèn)證考試系統(tǒng)實(shí)體關(guān)系圖
結(jié)合圖1中,我們的系統(tǒng)中,基本上可以有這樣三個(gè)主要的流程:
注冊(cè):申請(qǐng)人需要填寫申請(qǐng)表,經(jīng)過申請(qǐng)審核其資格,通過后準(zhǔn)許進(jìn)入課程修讀以及考試流程;
課程修讀:通過了申請(qǐng)之后,系統(tǒng)將為這個(gè)申請(qǐng)人自動(dòng)安排一個(gè)課程的修讀日程,并安排指定授課老師;
考試:當(dāng)申請(qǐng)人經(jīng)過課程的修讀(當(dāng)然也可以不讀書直接考試),可以申請(qǐng)參加考試,系統(tǒng)將自動(dòng)為其安排一個(gè)考試日程,當(dāng)申請(qǐng)人完成考試后,將得到相應(yīng)的成績(jī)單以及認(rèn)證證書(當(dāng)然要是通過的)。
設(shè)計(jì)人員希望這個(gè)系統(tǒng)的使用者不但能夠通過UDDI-China.org的Web
Page來(lái)使用認(rèn)證考試系統(tǒng),同時(shí)設(shè)計(jì)人員還希望能讓各種桌面工具能夠直接與UDDI-China.org的認(rèn)證考試系統(tǒng)集成,比如用戶在使用個(gè)人事務(wù)計(jì)劃軟件時(shí),就能夠?qū)⑸暾?qǐng)、聽課和考試等事務(wù)納入系統(tǒng)的安排,涉及的事務(wù)安排可以通過個(gè)人事務(wù)計(jì)劃軟件與UDDI-China.org的認(rèn)證考試系統(tǒng)的交互來(lái)自動(dòng)完成。交互的界面被設(shè)計(jì)為使用Web服務(wù)調(diào)用接口,而Web服務(wù)接口中輸入/輸出的數(shù)據(jù)應(yīng)當(dāng)是XML格式的,拋開Web服務(wù)調(diào)用接口先不談,我們先來(lái)看看系統(tǒng)接口中需要使用的XML數(shù)據(jù)模型。
經(jīng)過系統(tǒng)分析,設(shè)計(jì)人員認(rèn)為以下實(shí)體是需要使用XML來(lái)描述的:
Application,在這個(gè)XML描述實(shí)體中,將涉及圖1中的Applicant和Application;
CourseSession,在這個(gè)XML描述實(shí)體中,將涉及圖1中的Applicant、Employee、CourseSession和Course;
ExamSession,在這個(gè)XML描述實(shí)體中,將涉及圖1中的Applicant、ExamSession、Exam和Test。
下面,我們分別給出這三個(gè)XML實(shí)例文檔的模式。
XML Schema建模
Application
首先,我們給出Application文檔的XML Schema定義及其模式圖示,隨后我們?cè)僖灰辉敿?xì)解釋模式的細(xì)節(jié)。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element
name="Application" type="applicationType">
<xs:annotation>
<xs:documentation>Application的模式定義</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="applicationType">
<xs:annotation>
<xs:documentation>Application類型定義</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element
name="person" type="personType"/>
<xs:element name="company"
type="xs:string"/>
<xs:element
name="experience" type="xs:string"/>
<xs:element name="reference" type="xs:string" minOccurs="0"
maxOccurs="3"/>
<xs:element
name="certificationID" type="xs:long"/>
<xs:element name="applicationDate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="personType">
<xs:annotation>
<xs:documentation>個(gè)人信息類型定義</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element
name="personID" type="xs:long"/>
<xs:element name="name">
<xs:complexType>
<xs:sequence>
<xs:element name="surname"
type="xs:string"/>
<xs:element name="givenName"
type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element
name="contact" type="contactType"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType
name="contactType">
<xs:annotation>
<xs:documentation>聯(lián)系方法類型定義</xs:documentation>
</xs:annotation>
<xs:choice>
<xs:element
name="email"/>
<xs:element
name="phone"/>
<xs:group
ref="mailAddress"/>
</xs:choice>
</xs:complexType>
<xs:group
name="mailAddress">
<xs:sequence>
<xs:element
name="streetAddress" type="xs:string"/>
<xs:element name="postCode" type="xs:string"/>
</xs:sequence>
</xs:group>
</xs:schema>
上面的代碼給出了Application的XML Schema文檔,其中定義了一個(gè)Application元素,這個(gè)元素是Application數(shù)據(jù)文檔的根元素。Application元素使用了applicationType這個(gè)復(fù)合類型作為它的類型定義。而applicationType類型定義引用了personType這個(gè)類型定義作為個(gè)人信息的描述,personType類型定義中使用了contactType類型定義來(lái)描述個(gè)人的聯(lián)系方式,而contactType類型定義還使用了mailAddress這個(gè)組定義,以支持choice的定義方式。
在詳細(xì)介紹這個(gè)層次結(jié)構(gòu)之前,我們可以先來(lái)看一看圖2的模式圖示。
Figure 2. Application模式圖示
applicationType復(fù)合類型用于描述一個(gè)申請(qǐng)表,applicationType復(fù)合類型定義包含了6個(gè)子元素:person、company、experience、reference、certificationID、applicationDate,分別表示個(gè)人信息、所屬公司、工作經(jīng)驗(yàn)、參考技能認(rèn)證、認(rèn)證考試ID、申請(qǐng)日期。其中person的類型是復(fù)合類型personType,而其他5個(gè)元素都是簡(jiǎn)單類型。company、experience、reference的類型都是字符串xs:string,certificationID的類型是xs:long,而applicationDate的類型是xs:date。其中除reference的出現(xiàn)次數(shù)可以是0到3次以外,其他的元素都是出現(xiàn)且僅出現(xiàn)1次。
person子元素應(yīng)用了personType復(fù)合類型,personType復(fù)合類型定義包含了3個(gè)子元素:personID、name和contact,分別表示個(gè)人ID、姓名和聯(lián)系方法。personID是一個(gè)簡(jiǎn)單類型元素,類型為xs:long。name是一個(gè)復(fù)合結(jié)構(gòu),包含了兩個(gè)子元素surname和givenName,共同描述了人的姓名。
而contact子元素則是應(yīng)用了contactType復(fù)合類型定義,contactType是一個(gè)選擇類型,應(yīng)用contactType類型的元素可以選擇是包含一個(gè)email子元素、或是包含一個(gè)phone子元素,或是包含一個(gè)mailAddress子元素,mailAddress使用了在后面定義的元素組定義mailAddress。
為了使得對(duì)contact元素的定義理解地更為具體一些,我們下面給出一些contact元素的實(shí)例表示的例子,具體的,包含在person元素內(nèi)。
<person>
<personID>20302290</personID>
<name>
<surname>Joe</surname>
<givenName>Huang</givenName>
</name>
<contact><email>Joe.Huang@hotmail.com</email></contact>
<contact><email>Joe.Huang@yahoo.com</email></contact>
<contact>
<mailAddress>
<streetAddress>No.2000, Huangxing Road,
Shanghai</streetAddress>
<postCode>200433</postCode>
</mailAddress>
</contact>
</person>
上面的代碼給出了一個(gè)person的實(shí)例文檔,其中這個(gè)個(gè)人信息包含了三個(gè)聯(lián)絡(luò)方式,兩個(gè)是email地址,一個(gè)是寄信地址,此人沒有留下聯(lián)系電話。
最后,我們給出Application模式的一個(gè)完整的實(shí)例文檔。
<?xml version="1.0"
encoding="UTF-8"?>
<Application>
<person>
<personID>20302290</personID>
<name>
<surname>Joe</surname>
<givenName>Huang</givenName>
</name>
<contact><email>Joe.Huang@hotmail.com</email></contact>
<contact><email>Joe.Huang@yahoo.com</email></contact>
<contact>
<mailAddress>
<streetAddress>No.2000, Huangxing Road,
Shanghai</streetAddress>
<postCode>200433</postCode>
</mailAddress>
</contact>
</person>
<company>Innoteck
Company</company>
<experience>System Architect of
Innoteck</experience>
<certificationID>X00910</certificationID>
<applicationDate>2002-2-18</applicationDate>
</Application>
CourseSession
同樣,我們先給出CourseSession的XML模式文檔,CourseSession用于描述一門課程的某一個(gè)學(xué)期的安排。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element
name="CourseSession" type="CourseSessionType">
<xs:annotation>
<xs:documentation>CourseSession Schema
Definition</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="CourseSessionType">
<xs:sequence>
<xs:element
name="Course" type="CourseType"/>
<xs:element name="Session" type="SessionType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SessionType">
<xs:sequence>
<xs:element
name="CourseSessionID" type="xs:long"/>
<xs:element name="CourseLocation"
type="xs:string"/>
<xs:element
name="CourseDate"
type="CourseDateListType"/>
<xs:element
name="Teacher" type="EmployeeType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CourseType">
<xs:sequence>
<xs:element
name="courseID" type="xs:long"/>
<xs:element name="certificationID" type="xs:long"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="CourseDateListType">
<xs:list itemType="xs:date"/>
</xs:simpleType>
<xs:complexType name="EmployeeType">
<xs:complexContent>
<xs:extension
base="personType">
<xs:sequence>
<xs:element
name="jobTitle"/>
<xs:element
name="department"/>
<xs:element
name="roomNumber"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType
name="personType">
<xs:sequence>
<xs:element
name="personID" type="xs:long"/>
<xs:element name="name">
<xs:complexType>
<xs:sequence>
<xs:element name="surname"
type="xs:string"/>
<xs:element name="givenName"
type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element
name="contact" type="contactType"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType
name="contactType">
<xs:choice>
<xs:element
name="email"/>
<xs:element
name="phone"/>
<xs:group
ref="mailAddress"/>
</xs:choice>
</xs:complexType>
<xs:group
name="mailAddress">
<xs:sequence>
<xs:element
name="streetAddress" type="xs:string"/>
<xs:element name="postCode" type="xs:string"/>
</xs:sequence>
</xs:group>
</xs:schema>
其中復(fù)合類型personType、contactType以及元素組mailAddress的定義與前面代碼中的Application模式文檔中的定義是一樣的,在這個(gè)文檔中,我們給出這部分定義是為了EmployeeType的定義需要,在這里,EmployeeType類型定義擴(kuò)展繼承了personType的類型定義。
其次,CourseSession模式文檔的其他部分分別定義了CourseSessionType、CourseType和SessionType三個(gè)復(fù)合類型以及一個(gè)列表類型CourseDateListType。在詳細(xì)介紹這些類型定義之前,我們先給出CourseSession的模式圖示,以加深形象認(rèn)識(shí)。
Figure 3. CourseSession模式圖示
下面我們結(jié)合圖3的模式圖示來(lái)講解一下CourseSession模式定義。
課程學(xué)期安排描述CourseSession由兩部分組成(定義在CourseSessionType中):Course課程和Session學(xué)期安排。其中Course子元素應(yīng)用了CourseType復(fù)合類型,該復(fù)合類型包含了兩個(gè)子元素CourseID和certificationID,分別表示這個(gè)課程的ID標(biāo)識(shí)以及這個(gè)課程對(duì)應(yīng)的認(rèn)證考試ID標(biāo)識(shí)。而Session子元素則是應(yīng)用了SessionType復(fù)合類型,該復(fù)合類型包含四個(gè)子元素:CourseSessionID、CourseLocation、CourseDate和Teacher。CourseSessionID、CourseLocation是兩個(gè)簡(jiǎn)單類型的子元素,分別表示課程學(xué)期安排的標(biāo)識(shí)ID以及課程的授課地點(diǎn)。CourseDate是一個(gè)列表類型的元素,它的值是日期列表,表示課程的授課時(shí)間。而Teacher子元素應(yīng)用了EmployeeType復(fù)合類型,表示該課程這個(gè)學(xué)期的授課老師。
其中EmployeeType復(fù)合類型定義擴(kuò)展繼承了personType的類型定義。關(guān)于擴(kuò)展繼承的特性,在這里暫時(shí)先不詳細(xì)介紹,我將在后面的章節(jié)中給出描述的細(xì)節(jié)。
最后,按照前面的慣例,我們給出CourseSession模式的一個(gè)實(shí)例文檔作為本節(jié)的結(jié)尾。
<?xml version="1.0"
encoding="UTF-8"?>
<CourseSession>
<Course>
<CourseID>X0091001</CourseID>
<certificationID>X00910</certificationID>
</Course>
<Session>
<CourseSessionID>X009100120020220</CourseSessionID>
<CourseLocation>Shanghai Education
Center</CourseLocation>
<CourseDate>2002-2-20
2002-2-22 2002-2-26</CourseDate>
<Teacher>
<personID>10307827</personID>
<name>
<surname>Mike</surname>
<givenName>Liu</givenName>
</name>
<contact><email>Mike.Liu@uddi-china.org</email></contact>
<contact><phone>13717652090</phone></contact>
<contact>
<mailAddress>
<streetAddress>No.1 UDDI-China Way,
Shanghai</streetAddress>
<postCode>200400</postCode>
</mailAddress>
</contact>
</Teacher>
</Session>
</CourseSession>
ExamSession
同樣,我們先給出ExamSession的XML模式文檔,ExamSession用于描述某一門認(rèn)證考試的某一場(chǎng)考試的安排。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element
name="ExamSession" type="ExamSessionType">
<xs:annotation>
<xs:documentation>ExamSession Schema
Definition</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="ExamSessionType">
<xs:sequence>
<xs:element name="Exam"
type="ExamType"/>
<xs:element
name="Session" type="eSessionType"/>
<xs:element name="finished"
type="xs:boolean"/>
<xs:element
name="ScoreReport" type="ScoreReportType"
minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType
name="ExamType">
<xs:sequence>
<xs:element
name="examID" type="xs:long"/>
<xs:element name="certificationID" type="xs:long"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="eSessionType">
<xs:sequence>
<xs:element
name="examSessionID" type="xs:long"/>
<xs:element name="examLocation"
type="xs:string"/>
<xs:element
name="examDate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ScoreReportType">
<xs:sequence>
<xs:element
name="personID" type="xs:long"/>
<xs:element name="score" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
這個(gè)模式文檔相對(duì)于Application模式文檔和CourseSession模式文檔來(lái)說比較簡(jiǎn)單。在這個(gè)模式文檔中,主要為定義一個(gè)XML文檔元素ExamSession,ExamSession元素應(yīng)用了ExamSessionType復(fù)合類型。ExamSessionType復(fù)合類型定義包含了三個(gè)四元素Exam、Session、finished和ScoreReport,分別表示認(rèn)證考試、認(rèn)證考試的某一場(chǎng)考試的安排、考試是否完成以及成績(jī)單。這個(gè)XML文檔用于在客戶端和服務(wù)器端互相交換ExamSession,比如用戶期望申請(qǐng)某一項(xiàng)認(rèn)證考試,當(dāng)然會(huì)希望獲得所有的相關(guān)ExamSession信息。當(dāng)某一個(gè)ExamSession結(jié)束后,這個(gè)XML文檔也用于傳輸用戶的成績(jī)。
圖4給出了這個(gè)XML模式的模式圖示,通過這個(gè)模式圖示,大家應(yīng)該能夠更好地理解這個(gè)模式的結(jié)構(gòu)。
Figure 4. ExamSession模式圖示
最后我們按照這個(gè)模式文檔,給出它的一個(gè)實(shí)例文檔,作為本節(jié)的結(jié)束。
<?xml version="1.0"
encoding="UTF-8"?>
<ExamSession>
<Exam>
<examID>EX00910</examID>
<certificationID>X00910</certificationID>
</Exam>
<Session>
<examSessionID>EX0091020020309</examSessionID>
<examLocation>Shanghai Education
Center</examLocation>
<examDate>2002-3-9</examDate>
</Session>
<finished>true</finished>
<ScoreReport>
<personID>20302290</personID>
<score>92</score>
</ScoreReport>
</ExamSession>
應(yīng)用模式演示
在這里,我們將外部的應(yīng)用假設(shè)也加入到整個(gè)應(yīng)用模式中來(lái),參照下圖,其中National Education Information Portal是一個(gè)國(guó)家范圍的教育信息門戶網(wǎng)站,而Global IT Education Web Service則是一個(gè)全球IT教育機(jī)構(gòu)提供的一個(gè)在線Web服務(wù)。它們都以這個(gè)認(rèn)證考試申請(qǐng)系統(tǒng)的Web服務(wù)客戶端應(yīng)用的角色出現(xiàn)在應(yīng)用模式中。(以下的應(yīng)用模式發(fā)展流程完全屬于應(yīng)用假設(shè),其中的所有實(shí)體和細(xì)節(jié)純屬虛構(gòu))
Figure 5. 應(yīng)用模式演示
如圖所示,Web服務(wù)認(rèn)證機(jī)構(gòu)WSTA開始向公眾提供Web服務(wù)技術(shù)認(rèn)證服務(wù),一開始這個(gè)服務(wù)僅在機(jī)構(gòu)內(nèi)部工作,工作人員通過手工或Email收取報(bào)名表格,然后在自己的桌面應(yīng)用中為客戶完成相關(guān)的注冊(cè),上課和考試等申請(qǐng)流程,按照這種方式,整個(gè)機(jī)構(gòu)的運(yùn)行效率不高,所有的流程瓶頸集中在機(jī)構(gòu)內(nèi)部的桌面應(yīng)用上。隨著申請(qǐng)認(rèn)證考試的學(xué)員不斷增多,WSTA不得不使用其提供認(rèn)證的技術(shù):Web服務(wù)技術(shù)來(lái)改造他的應(yīng)用。完成認(rèn)證考試各項(xiàng)申請(qǐng)的邏輯被包裝成EJB Web Service,并部署在機(jī)構(gòu)內(nèi)部的BEA Weblogic Application Server上,而桌面應(yīng)用也被升級(jí)以支持對(duì)Web服務(wù)調(diào)用(也就是成為了一個(gè)Web Service Client),為了使得這個(gè)認(rèn)證申請(qǐng)Web服務(wù)(WSTK Web Service)能夠被更多的人通過各種平臺(tái)進(jìn)入并使用,這個(gè)Web服務(wù)被注冊(cè)進(jìn)了Public UDDI Registry,并發(fā)布了它的WSDL描述文檔。同時(shí),WSTA也積極與公共教育平臺(tái)進(jìn)行接觸并嘗試合作可能。經(jīng)過一番接觸,國(guó)家教育信息門戶(National Educastion Information Portal, NEIP)同意與WSTA進(jìn)行系統(tǒng)對(duì)接,以實(shí)現(xiàn)在NEIP平臺(tái)上直接對(duì)WSTA提供的Web服務(wù)技術(shù)認(rèn)證考試處理申請(qǐng)流程。NEIP采用的是Microsoft .NET的平臺(tái),因此在這里實(shí)施了J2EE和.NET平臺(tái)的連接集成。同時(shí)由于將自身注冊(cè)入了Public UDDI Registry,WSTA的認(rèn)證考試申請(qǐng)服務(wù)有機(jī)會(huì)被更多的外部平臺(tái)集成使用。如圖中的Global IT Education Web Service就是一例,Global IT Education通過對(duì)Public UDDI Registry的搜索,搜索全球提供IT認(rèn)證的機(jī)構(gòu),WSTK的Web服務(wù)是處于搜索結(jié)果集中的,Global IT Education通過處理搜索到的WSDL文檔,完成了對(duì)WSTK的Web服務(wù)的綁定,實(shí)現(xiàn)了Global IT Education Web Service與WSTK Web Service的連接。
下面,我們按照?qǐng)D中的序號(hào)標(biāo)明的順序,逐一講解在這個(gè)Web服務(wù)的應(yīng)用場(chǎng)景下,各個(gè)組件是如何協(xié)同實(shí)施和運(yùn)作的:
用戶可以通過NEIP的Web界面申請(qǐng)Web服務(wù)技術(shù)認(rèn)證的注冊(cè)、課程和考試;
NEIP的Web站點(diǎn)把請(qǐng)求通過Internet發(fā)送給WSTK的認(rèn)證管理Web服務(wù);
WSTK的認(rèn)證申請(qǐng)管理Web服務(wù)通過與機(jī)構(gòu)數(shù)據(jù)庫(kù)的交互,完成申請(qǐng)事務(wù),并響應(yīng)NEIP的Web站點(diǎn),并最終將響應(yīng)返回終端用戶;
WSTK認(rèn)證服務(wù)的技術(shù)信息(比如WSDL文檔)被注冊(cè)入了Public UDDI Registry供公共查詢;
Global IT
Education的在線服務(wù)通過搜索Public UDDI Registry,尋找到了WSTK認(rèn)證申請(qǐng)服務(wù);
Global IT
Education獲得WSTK認(rèn)證申請(qǐng)服務(wù)的技術(shù)信息,實(shí)現(xiàn)動(dòng)態(tài)綁定;
Global IT
Education建立與WSTK認(rèn)證申請(qǐng)服務(wù)的應(yīng)用集成;
任何使用Global IT
Education的應(yīng)用(包括各種應(yīng)用、Web站點(diǎn)、Web服務(wù))都可以通過Global IT Education的Web服務(wù)來(lái)使用WSTK認(rèn)證申請(qǐng)服務(wù);
WSTK內(nèi)部的桌面應(yīng)用同樣是使用Web服務(wù)界面綁定的技術(shù)來(lái)調(diào)用WSTK認(rèn)證申請(qǐng)服務(wù)的。
服務(wù)的可用性和連接的持久性
既然這個(gè)認(rèn)證考試申請(qǐng)服務(wù)是面向廣大的個(gè)人用戶的,用戶不但可以通過WSTK機(jī)構(gòu)進(jìn)行申請(qǐng),同時(shí)也可以通過任何的集成了WSTK認(rèn)證考試申請(qǐng)服務(wù)的應(yīng)用、平臺(tái)、網(wǎng)站等使用這個(gè)認(rèn)證考試申請(qǐng)服務(wù)。對(duì)于WSTK而言,使用的用戶越多,就越證明WSTK認(rèn)證考試申請(qǐng)服務(wù)的成功,而使用的用戶越多,一般而言,也意味著與WSTK認(rèn)證考試申請(qǐng)服務(wù)建立Web服務(wù)連接的應(yīng)用程序、平臺(tái)或網(wǎng)站也越多。然后,任何事情都有其正反兩方面的影響,如果使用的用戶非常多,接入的平臺(tái)、應(yīng)用的數(shù)量也非常多的話,WSTK認(rèn)證考試申請(qǐng)服務(wù)的可用性,以及連接的持久性就成為了一個(gè)非常非常關(guān)鍵的問題。
關(guān)于傳統(tǒng)軟件領(lǐng)域,甚至是硬件領(lǐng)域中涉及的穩(wěn)定性、可用性和持久性方面,我就不再在這里探討了,這不屬于我們正面對(duì)的基于Internet的分布式應(yīng)用環(huán)境的這個(gè)分布式應(yīng)用集成。那么我們需要面對(duì)的是什么呢?
如果WSTK認(rèn)證考試申請(qǐng)服務(wù)這個(gè)Web Service所在的系統(tǒng)發(fā)生崩潰或者因?yàn)橄到y(tǒng)維護(hù)的原因,WSTK不得不把這個(gè)服務(wù)臨時(shí)遷移到備份服務(wù)器上,服務(wù)所在服務(wù)器的IP地址發(fā)生了變化,甚至,服務(wù)入口的URL也可能發(fā)生了變化。此時(shí),現(xiàn)存的所有連接將不再有效(地址和入口都變了,自然不會(huì)持續(xù)有效),那么快速地恢復(fù)連接是我們需要處理的問題。
回顧一下,以前我們?cè)谧鯡AI時(shí)候的方法,對(duì)每個(gè)相關(guān)模塊/系統(tǒng)的開發(fā)人員、維護(hù)人員發(fā)出通知,要求他們更改相應(yīng)的代碼,這在企業(yè)內(nèi)部情況尚好,我們還是能夠在一定時(shí)間內(nèi)通知到每個(gè)人,然后各個(gè)模塊依照人員的技術(shù)能力和工作時(shí)間的多少,一一完成了連接的恢復(fù),不過萬(wàn)一負(fù)責(zé)某個(gè)模塊的技術(shù)人員出差或其他一些原因無(wú)法更新相應(yīng)的代碼,那么這個(gè)模塊將有一段時(shí)間無(wú)法使用。現(xiàn)在將這一情況從企業(yè)內(nèi)拓展到了企業(yè)間、機(jī)構(gòu)與個(gè)人之間后,情況似乎變得更為復(fù)雜,相同的意外情況往往導(dǎo)致非常惡劣的后果。
首先,我們是否還能通知到每個(gè)與WSTK服務(wù)相連接的企業(yè)或機(jī)構(gòu),其中部分按照合約方式建立連接的也許可以,然而由于是位于不同企業(yè),之間的協(xié)同存在問題。同時(shí)還有一大部分是通過查詢Public UDDI Registry找到WSTK的服務(wù)從而和WSTK服務(wù)建立連接的應(yīng)用,這些應(yīng)用的維護(hù)者,我們根本無(wú)法通過一般的途徑找到他們,如果仍然只能使用人與人的交流方式,那么這些連接將在一段時(shí)間內(nèi)中斷,如果服務(wù)被永久性地遷移了,那么這些好不容易發(fā)展起來(lái)的連接將從此中止。
其次,WSTK服務(wù)是一個(gè)最終服務(wù),中間會(huì)有很多門戶網(wǎng)站、機(jī)構(gòu)網(wǎng)站以WSTK服務(wù)的代理的形式直接向最終用戶提供服務(wù)。如果WSTK服務(wù)的質(zhì)量出現(xiàn)問題,這些門戶網(wǎng)站、機(jī)構(gòu)網(wǎng)站可能因他們自身網(wǎng)站、服務(wù)的聲譽(yù)問題,而考慮是否以后還要在他們的網(wǎng)站、服務(wù)中提供對(duì)WSTK認(rèn)證考試申請(qǐng)的服務(wù)。因?yàn)閷?duì)于最終用戶而言,他們使用的就是這些網(wǎng)站、機(jī)構(gòu)所提供的服務(wù),他們并不知道最終WSTK認(rèn)證考試申請(qǐng)服務(wù)才是最終的服務(wù)提供者,因此如果WSTK認(rèn)證考試申請(qǐng)服務(wù)不工作,他們就是認(rèn)為是這些網(wǎng)站、機(jī)構(gòu)的服務(wù)不工作了。
再次,還有相當(dāng)一部分是直接被集成到終端用戶的桌面應(yīng)用的,對(duì)于這種情況,WSTK更是沒有辦法通過傳統(tǒng)的方式重建連接了……
我們面臨的問題是很嚴(yán)峻,不過由于我們采用的是Web服務(wù)架構(gòu),利用的是UDDI作為我們的服務(wù)發(fā)現(xiàn)機(jī)制,因此這種服務(wù)連接恢復(fù)的問題,我們可以通過UDDI所提供的機(jī)制來(lái)嘗試解決。
我們知道,WSTK一開始就把WSTK認(rèn)證申請(qǐng)服務(wù)注冊(cè)到了UDDI注冊(cè)中心,具體的說,是在UDDI注冊(cè)中心中注冊(cè)了一個(gè)businessService(對(duì)應(yīng)于這個(gè)服務(wù)),這個(gè)businessService中包含了一個(gè)bindingTemplate用于描述這個(gè)服務(wù)的技術(shù)調(diào)用規(guī)范,其中包含了這個(gè)Web服務(wù)的訪問入口以及如何訪問這個(gè)Web服務(wù)的WSDL文檔等等。對(duì)于搜索UDDI Registry的企業(yè)/機(jī)構(gòu)而言,他們需要得到的就是bindingTemplate信息,從UDDI注冊(cè)中心中獲得的bindingTemplate信息集中的數(shù)據(jù)表示了一個(gè)指定的遠(yuǎn)端Web服務(wù)的調(diào)用規(guī)范實(shí)例。這些企業(yè)/機(jī)構(gòu)的應(yīng)用程序應(yīng)當(dāng)緩存該信息并且使用這個(gè)調(diào)用規(guī)范通過該WSTK服務(wù)注冊(cè)的地址來(lái)訪問這個(gè)WSTK Web Service。
當(dāng)使用從UDDI注冊(cè)中心中獲得并緩存下來(lái)的信息(調(diào)用入口等)進(jìn)行調(diào)用發(fā)生失敗時(shí),正確的做法是去查詢當(dāng)初獲得該數(shù)據(jù)的UDDI注冊(cè)中心并獲取與其對(duì)應(yīng)的更新了的bindingTemplate信息。也就是說,當(dāng)一個(gè)服務(wù)因?yàn)榫S護(hù)或?yàn)?zāi)難恢復(fù)發(fā)生遷移時(shí),一旦遷移完成這個(gè)服務(wù)應(yīng)當(dāng)主動(dòng)去更新在UDDI Registry中相應(yīng)的bindingTemplate記錄。對(duì)應(yīng)于前面的WSTK服務(wù)的情形,WSTK服務(wù)應(yīng)當(dāng)去更新其對(duì)應(yīng)的bindingTemplate中的訪問入口地址URL等。
在使用Web服務(wù)中,使用這樣的調(diào)用模式,那么使用UDDI操作入口站點(diǎn)(Operator Site)的商業(yè)實(shí)體就得以在不加重通信與協(xié)調(diào)開銷的情況下自動(dòng)完成與大量合作伙伴的服務(wù)恢復(fù)。這一過程的詳細(xì)程序式描述如下:
服務(wù)提供者使用save_xx在UDDI注冊(cè)中心中注冊(cè)了Web服務(wù)S;
調(diào)用者使用find_xx查詢UDDI注冊(cè)中心,獲得所需的服務(wù)S的概要信息;
調(diào)用者使用get_xx再一次查詢UDDI注冊(cè)中心,獲得所需服務(wù)S的詳細(xì)信息;
調(diào)用者緩存服務(wù)S的bindingTemplate信息,通過服務(wù)綁定,實(shí)施對(duì)服務(wù)S的調(diào)用;
服務(wù)S由于某種原因出現(xiàn)問題,無(wú)法繼續(xù)提供服務(wù);
服務(wù)提供者在新的位置重新部署了服務(wù)S,同時(shí)更新了UDDI注冊(cè)中心的關(guān)于Web服務(wù)S的技術(shù)描述;
調(diào)用者使用緩存的服務(wù)S的bindingTemplate信息再一次進(jìn)行調(diào)用,調(diào)用失??;(服務(wù)S的部署位置已經(jīng)更改)
調(diào)用者使用緩存的bindingTemplate的bindingKey鍵值查詢UDDI注冊(cè)中心,獲得服務(wù)S的更新后的bindingTemplate信息。
調(diào)用者緩存服務(wù)S的新的bindingTemplate信息,通過服務(wù)綁定,重新實(shí)施對(duì)服務(wù)S的調(diào)用。
服務(wù)的延伸
由于WSTK認(rèn)證考試申請(qǐng)服務(wù)已經(jīng)以Web服務(wù)的方式架構(gòu)起來(lái)了,在成功應(yīng)用一定時(shí)間之后,這個(gè)服務(wù)架構(gòu)將成為一個(gè)解決方案在一定范圍內(nèi)實(shí)施推廣,一個(gè)快速有效的辦法是將這個(gè)認(rèn)證考試申請(qǐng)服務(wù)升級(jí)為一個(gè)ASP服務(wù),供各種提供認(rèn)證考試的機(jī)構(gòu)通過Internet租用。這是一個(gè)有效利用資源和盈利的渠道。不過此時(shí)我們面臨的情況將更加復(fù)雜。由于是ASP服務(wù),一般來(lái)說,在ASP服務(wù)中,租用者并不是ASP服務(wù)的所有者,他們各自的服務(wù)入口可能是彼此不同的,但不排除彼此相同的實(shí)現(xiàn)可能(比如通過提供不同的用戶名/密碼,但入口是一個(gè)),同時(shí)這些入口調(diào)用信息并不是由租用者來(lái)管理的,事實(shí)上,當(dāng)ASP服務(wù)的提供者更改入口地址也是可能發(fā)生的異常情況。此時(shí)仍然要求由服務(wù)提供者去更新bindingTemplate信息以滿足服務(wù)遷移的平滑性變得不再實(shí)際了。
那么,馬上可以想到的,就是所有與這個(gè)ASP服務(wù)相關(guān)的bindingTemplate都由ASP服務(wù)的提供者來(lái)管理。不過,這仍然不切實(shí)際,因?yàn)槿绱艘粊?lái),就違背UDDI Registry搜索的初衷了,首先搜索者是要搜索商業(yè)實(shí)體businessEntity,如果不同的機(jī)構(gòu)的businessService都被保存在ASP服務(wù)提供者的businessEntity下,顯然與用戶的搜索方式相悖,同時(shí)對(duì)于businessService的描述信息,那些提供認(rèn)證考試的機(jī)構(gòu)都期望自己來(lái)維護(hù),顯然這不是一個(gè)正確的合適的解決方案。UDDI在bindingTemplate機(jī)制里面提供了一個(gè)重定向的方法來(lái)試圖解決這個(gè)問題,關(guān)于這個(gè)方法我將在本系列的下一篇文章中結(jié)合下一個(gè)實(shí)例給出。
大家對(duì)于這兩個(gè)問題的任何建議以及大家想到的其他可能的問題,都?xì)g迎到論壇來(lái)提出意見或給出評(píng)論。
參考資料
- Web Service 技術(shù)/評(píng)論網(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ù)評(píng)論文章
- 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
- Web Service Case Study 系列
- 軟件反饋跟蹤平臺(tái)
作者簡(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信息化
- 1泛普軟件石家莊OA信息化系統(tǒng)技術(shù)架構(gòu)
- 2BEA和Palm合作掌上電腦Web服務(wù)
- 3包裝你知道的一切
- 4對(duì)某集團(tuán)公司協(xié)同辦公系統(tǒng)未來(lái)3-5年的IT規(guī)劃建設(shè)藍(lán)圖
- 5石家莊OA信息化與企業(yè)發(fā)展
- 6石家莊OA信息化的基本XML和RDF 技術(shù)(五):定義RDF和DAML+OIL圖示
- 7初探石家莊OA信息化
- 8看APQC如何實(shí)施和考評(píng)石家莊OA信息化?(by AMT 石家莊OA信息化研究小組)
- 9Building a Distributed Web Service Using a Strongly-Typed Da
- 10Web服務(wù):構(gòu)建融合的價(jià)值網(wǎng)
- 11絕對(duì)妙語(yǔ):重塑企業(yè)流程、組織和文化
- 12微軟等籌備Web服務(wù)盛會(huì) Sun再遭冷遇
- 13從知識(shí)的角度回顧企業(yè)能力理論-摘錄
- 14Web服務(wù)內(nèi)幕,第3部分:Apache和Microsoft -- 良好的合作
- 15利用FrontPage來(lái)使用XML Web Service
- 16Licensee Requirements from Dev, Test, and Ops
- 17管理結(jié)構(gòu)式Web服務(wù)元數(shù)據(jù)
- 18Web服務(wù)面臨的課題:安全和標(biāo)準(zhǔn)化
- 19“低價(jià)狂人”欒潤(rùn)峰:有理想的冒險(xiǎn)才值得
- 20構(gòu)建石家莊OA信息化系統(tǒng)的探討
- 21知識(shí)的過程管理
- 22Web服務(wù)內(nèi)幕,第9部分:研究問題--安全性與保密性
- 23Web服務(wù):WS-Inspection 1.0
- 24如何認(rèn)識(shí)和實(shí)施石家莊OA信息化系統(tǒng)的集成(BY AMT 夏敬華)
- 25關(guān)于石家莊OA信息化的基本概念
- 26拐點(diǎn)之年:中國(guó)管理軟件行業(yè)2008大盤點(diǎn)
- 27源天榮獲“2008中國(guó)信息產(chǎn)業(yè)年度高成長(zhǎng)性企業(yè)”稱號(hào)
- 28石家莊OA信息化與知識(shí)價(jià)值鏈(BY AMT 夏敬華)
- 29認(rèn)識(shí)石家莊OA信息化系統(tǒng)模型,把握石家莊OA信息化系統(tǒng)實(shí)質(zhì)(BY AMT 夏敬華)
- 30Web服務(wù)的(革)創(chuàng)新,第1部分
成都公司:成都市成華區(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