專利名稱:服務(wù)端與客戶端之間的交互方法和交互系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及基于WCF服務(wù)的交互技術(shù),具體而言,涉及服務(wù)端與客戶端之間的交互方法和交互系統(tǒng)。
背景技術(shù):
Silverlight逐漸成為開發(fā)客戶端的主流技術(shù)之一,作為Silverlight客戶端與.net服務(wù)端交互的基礎(chǔ),WCF (Windows Communication Foundation)服務(wù)的應(yīng)用也越來越廣泛。圖1示出了 WCF服務(wù)的示意圖。如圖1所示,要想通過WCF服務(wù)實現(xiàn)Silverlight 客戶端與.net服務(wù)端之間的交互,就必須創(chuàng)建WCF服務(wù)端與WCF客戶端。為方便理解,可以將客戶端與服務(wù)端之間的交互比作打電話,此時,WCF服務(wù)相當(dāng)于電話線,WCF服務(wù)端與WCF客戶端相當(dāng)于兩部電話,Silverlight客戶端相當(dāng)于發(fā)出指令的人,而.net服務(wù)端相當(dāng)于接收指令、執(zhí)行動作并報告執(zhí)行結(jié)果的人。具體的交互過程為WCF客戶端接收Silverlight客戶端發(fā)出的指令,通過WCF服務(wù)將該指令信息傳遞給WCF服務(wù)端,WCF服務(wù)端有將該指令信息傳遞給.net服務(wù)端;.net 服務(wù)端收到指令信息后執(zhí)行相應(yīng)的動作,然后將執(zhí)行的結(jié)果傳遞給WCF服務(wù)端,WCF服務(wù)端通過WCF服務(wù)將執(zhí)行結(jié)果傳遞給WCF客戶端,最終傳遞給Silverlight客戶端。對Silverlight客戶端而言,.net服務(wù)端有兩種對象最重要數(shù)據(jù)類、業(yè)務(wù)類。數(shù)據(jù)類用于保存業(yè)務(wù)涉及的信息,例如可以定義一個數(shù)據(jù)類“加班單”,該數(shù)據(jù)類的對象(實例)記錄了加班的人員、加班日期、加班小時數(shù)等信息。而業(yè)務(wù)類定義了實現(xiàn)某種業(yè)務(wù)(或操作)的方法,例如可以定義“加班單管理類”,調(diào)用該類(或該類的對象)的某些方法,可以實現(xiàn)對數(shù)據(jù)庫中加班單記錄的增加、刪除、修改、查詢操作。業(yè)務(wù)類與數(shù)據(jù)類應(yīng)用舉例=Silverlight客戶端通過WCF服務(wù)調(diào)用.net服務(wù)端的 “加班單管理類”(或該類的對象)的方法,從數(shù)據(jù)庫中查詢加班單信息,并組織成“加班單” 數(shù)據(jù)類對象,通過WCF服務(wù)返回給Silverlight客戶端。Silverlight客戶端將加班單展示給用戶,用戶修改加班單的內(nèi)容,點擊“保存”按鈕進行保存操作。保存時Silverlight客戶端將修改后的“加班單”數(shù)據(jù)類對象通過WCF服務(wù)傳遞給.net服務(wù)端的“加班單管理類” 的方法(或該類的對象),“加班單管理類”的方法將“加班單”數(shù)據(jù)類對象所代表的加班單信息存入數(shù)據(jù)庫中。圖2是WCF服務(wù)中服務(wù)契約與數(shù)據(jù)契約聲明的示意圖,如圖2所示,實現(xiàn)WCF服務(wù), 有兩個必要條件1. WCF服務(wù)只能調(diào)用聲明為服務(wù)契約的業(yè)務(wù)類,也就是說如果Silverlight客戶端希望訪問.net服務(wù)端的某個業(yè)務(wù)類的方法,則必須將該業(yè)務(wù)類聲明為服務(wù)契約,并寫入 WCF服務(wù)端和WCF客戶端的代碼中。2. WCF服務(wù)只能傳遞標準數(shù)據(jù)類型(例如整型、字符串等)或聲明為數(shù)據(jù)契約的數(shù)據(jù)類,也就是說如果希望通過WCF服務(wù)傳遞某種數(shù)據(jù)類,則必須將該數(shù)據(jù)類聲明為數(shù)據(jù)契
4約,并寫入WCF服務(wù)端和客戶端的代碼中。而這兩個必要條件給開發(fā)工作帶來很大的不便系統(tǒng)穩(wěn)定性差當(dāng)增加、修改業(yè)務(wù)類或數(shù)據(jù)類時,需要相應(yīng)的修改WCF服務(wù)端和 WCF客戶端的服務(wù)契約或數(shù)據(jù)契約,反復(fù)修改導(dǎo)致WCF服務(wù)的穩(wěn)定性變差。系統(tǒng)可擴展性差如果某產(chǎn)品從C/S架構(gòu)轉(zhuǎn)換為B/S架構(gòu),此時系統(tǒng)的服務(wù)端有大量的業(yè)務(wù)類、數(shù)據(jù)類,不可能為所有的業(yè)務(wù)類、數(shù)據(jù)類定義服務(wù)契約、數(shù)據(jù)契約。因此,開發(fā) WCF服務(wù)時要確定一個范圍,Silverlight客戶端只能訪問/傳遞該范圍內(nèi)的業(yè)務(wù)類、數(shù)據(jù)類。當(dāng)要訪問/傳遞的業(yè)務(wù)類、數(shù)據(jù)類在該范圍之外時,則必須修改WCF服務(wù)端、WCF客戶端以增加相應(yīng)的服務(wù)契約、數(shù)據(jù)契約,導(dǎo)致系統(tǒng)的可擴展性差。為了增加系統(tǒng)的穩(wěn)定性和可擴展性,需要一種基于WCF服務(wù)的交互技術(shù)。
發(fā)明內(nèi)容
本發(fā)明關(guān)于基于WCF服務(wù)的交互技術(shù),可以適用于以WCF服務(wù)為交互基礎(chǔ)的各種系統(tǒng)。在此描述的一個方面提供一種基于WCF服務(wù)的服務(wù)端與客戶端之間的交互方法, 包括步驟302,客戶端代理接收來自客戶端的調(diào)用信息和參數(shù)集合,調(diào)用客戶端序列化器將參數(shù)集合序列化為標準數(shù)據(jù)類型格式的數(shù)據(jù),并將經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息發(fā)送至WCF客戶端,WCF客戶端通過WCF服務(wù)將經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息發(fā)送至WCF服務(wù)端,其中,調(diào)用信息為標準數(shù)據(jù)類型格式的數(shù)據(jù);步驟304,當(dāng)服務(wù)端代理接收到來自WCF服務(wù)端的經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息時,服務(wù)端代理通過反射技術(shù)獲取被調(diào)用的業(yè)務(wù)類方法的參數(shù)類型列表,并根據(jù)參數(shù)類型列表調(diào)用服務(wù)端序列化器將經(jīng)過序列化處理的參數(shù)集合進行反序列化處理為參數(shù)集合,以及根據(jù)調(diào)用信息通過反射技術(shù)調(diào)用服務(wù)端的業(yè)務(wù)類方法,將參數(shù)集合傳遞至業(yè)務(wù)類方法,獲取執(zhí)行業(yè)務(wù)類方法的返回值并將返回值發(fā)送至WCF服務(wù)端;以及步驟306,WCF服務(wù)端將返回值通過WCF服務(wù)發(fā)送至 WCF客戶端,WCF客戶端將返回值發(fā)送至客戶端代理,客戶端代理將返回值傳送至客戶端。通過此方法,可以將原本不可以直接通過WCF服務(wù)傳輸?shù)臄?shù)據(jù)類序列化為可以直接傳輸?shù)臄?shù)據(jù)格式,利用反射技術(shù)來調(diào)用業(yè)務(wù)類方法,這樣就不用預(yù)先在WCF服務(wù)中為數(shù)據(jù)類定義數(shù)據(jù)契約,為業(yè)務(wù)類定義服務(wù)契約,服務(wù)端業(yè)務(wù)類的任何變化都無需修改WCF服務(wù)的代碼,數(shù)據(jù)類的任何變化都不需修改WCF服務(wù)的代碼。在上述技術(shù)方案中,優(yōu)選地,步驟302還可以包括客戶端代理保存來自客戶端的返回值類型定義;步驟304還可以包括當(dāng)判斷返回值是數(shù)據(jù)類時,所述服務(wù)端代理調(diào)用服務(wù)端序列化器序列化返回值,并將經(jīng)過序列化處理的返回值發(fā)送至WCF服務(wù)端;步驟306還可以包括客戶端代理將返回值類型定義和經(jīng)過序列化的返回值發(fā)送至客戶端序列化器進行反序列化處理,客戶端代理將經(jīng)過反序列化處理的返回值傳遞至客戶端。執(zhí)行業(yè)務(wù)類方法的執(zhí)行結(jié)果如果是數(shù)據(jù)類對象,那么也可以通過序列化的方法來將其序列化為WCF服務(wù)可以直接傳輸?shù)男问?,實現(xiàn)了 WCF與數(shù)據(jù)類的分離。在上述技術(shù)方案中,優(yōu)選地,客戶端可以包括Silverlight客戶端。在上述技術(shù)方案中,優(yōu)選地,服務(wù)端可以包括.net服務(wù)端。 在上述技術(shù)方案中,優(yōu)選地,標準數(shù)據(jù)類型格式可以包括字符串和整型。
在此描述的另一方面提供一種基于WCF服務(wù)的服務(wù)端與客戶端之間的交互系統(tǒng), 包括服務(wù)端和客戶端,還包括客戶端代理,連接至客戶端,接收來自客戶端的調(diào)用信息和參數(shù)集合并將參數(shù)信息傳遞至客戶端序列化器,將來自客戶端序列化器的經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息發(fā)送至WCF客戶端以及將來自WCF客戶端的返回值發(fā)送至客戶端, 其中,調(diào)用信息為標準數(shù)據(jù)類型格式的數(shù)據(jù);客戶端序列化器,連接至客戶端代理,用于將來自客戶端代理的參數(shù)集合序列化為標準數(shù)據(jù)類型格式的數(shù)據(jù),并將經(jīng)過序列化處理的參數(shù)集合傳遞至客戶端代理;WCF客戶端,連接至客戶端代理,通過WCF服務(wù)將經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息發(fā)送至WCF服務(wù)端以及將來自WCF服務(wù)端的返回值發(fā)送至客戶端代理;WCF服務(wù)端,連接至服務(wù)端代理,用于將經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息傳遞至服務(wù)端代理以及將來服務(wù)端代理的返回值發(fā)送至WCF客戶端;服務(wù)端代理,連接至服務(wù)端,當(dāng)接收到來自WCF服務(wù)端的經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息時,根據(jù)調(diào)用信息通過反射技術(shù)獲取被調(diào)用的業(yè)務(wù)類方法的參數(shù)類型列表,將參數(shù)類型列表和經(jīng)過序列化處理的參數(shù)集合傳遞至服務(wù)端序列化器,以及根據(jù)調(diào)用信息通過反射技術(shù)調(diào)用服務(wù)端的業(yè)務(wù)類方法,將來自服務(wù)端序列化器的經(jīng)過反序列化處理的參數(shù)集合傳遞至業(yè)務(wù)類方法,獲取執(zhí)行業(yè)務(wù)類方法的返回值并將返回值發(fā)送至WCF服務(wù)端;以及服務(wù)端序列化器,連接至服務(wù)端代理,用于根據(jù)參數(shù)類型列表將經(jīng)過序列化處理的參數(shù)集合進行反序列化為參數(shù)集合,并將參數(shù)集合傳遞至服務(wù)端代理。通過此系統(tǒng),可以將原本不可以直接通過WCF服務(wù)傳輸?shù)臄?shù)據(jù)類序列化為可以直接傳輸?shù)臄?shù)據(jù)格式,利用反射技術(shù)來調(diào)用業(yè)務(wù)類方法,這樣就不用預(yù)先在WCF服務(wù)中為數(shù)據(jù)類定義數(shù)據(jù)契約,為業(yè)務(wù)類定義服務(wù)契約,服務(wù)端業(yè)務(wù)類的任何變化都無需修改WCF服務(wù)的代碼,數(shù)據(jù)類的任何變化都不需修改WCF服務(wù)的代碼。在上述技術(shù)方案中,優(yōu)選地,客戶端代理還保存來自客戶端的返回值類型定義;當(dāng)判斷返回值是數(shù)據(jù)類時,服務(wù)端代理調(diào)用服務(wù)端序列化器序列化返回值,并將經(jīng)過序列化處理的返回值發(fā)送至WCF服務(wù)端;客戶端代理將返回值類型定義和經(jīng)過序列化的返回值發(fā)送至客戶端序列化器進行反序列化處理,客戶端代理將經(jīng)過反序列化處理的返回值傳遞至客戶端。執(zhí)行業(yè)務(wù)類方法的執(zhí)行結(jié)果如果是數(shù)據(jù)類對象,那么也可以通過序列化的方法來將其序列化為WCF服務(wù)可以直接傳輸?shù)男问?,實現(xiàn)了 WCF與數(shù)據(jù)類的分離。在上述技術(shù)方案中,優(yōu)選地,客戶端可以包括Silverlight客戶端。在上述技術(shù)方案中,優(yōu)選地,服務(wù)端可以包括.net服務(wù)端。在上述技術(shù)方案中,優(yōu)選地,標準數(shù)據(jù)類型格式可以包括字符串和整型。
圖1示出了相關(guān)技術(shù)中的WCF服務(wù)的示意圖;圖2示出了相關(guān)技術(shù)中的WCF服務(wù)中的服務(wù)契約和數(shù)據(jù)契約聲明的示意圖;圖3示出了根據(jù)本發(fā)明的實施例的基于WCF服務(wù)的服務(wù)端與客戶端之間的交互方法的流程圖;圖4示出了根據(jù)本發(fā)明的實施例的基于WCF服務(wù)的服務(wù)端與客戶端之間的交互系統(tǒng)的框圖;以及圖5示出了根據(jù)本發(fā)明的實施例的WCF服務(wù)與業(yè)務(wù)類、數(shù)據(jù)類分離的示意圖。
具體實施例方式為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點,下面結(jié)合附圖和具體實施方式
對本發(fā)明進行進一步的詳細描述。在下面的描述中闡述了很多具體細節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來實施,因此,本發(fā)明并不限于下面公開的具體實施例的限制。為了增加系統(tǒng)的穩(wěn)定性、可擴展性,需要解決兩個問題1、如何實現(xiàn)WCF服務(wù)與業(yè)務(wù)類的分離——Silverlight客戶端通過WCF服務(wù)調(diào)用.net服務(wù)端的業(yè)務(wù)類時,不需要事先為該業(yè)務(wù)類定義服務(wù)契約;.net服務(wù)端業(yè)務(wù)類的任何變化都不必修改WCF服務(wù)的代碼。2、如何實現(xiàn)WCF服務(wù)與數(shù)據(jù)類的分離——不需要事先為數(shù)據(jù)類定義數(shù)據(jù)契約,就能夠通過WCF服務(wù)傳輸該數(shù)據(jù)類的對象;數(shù)據(jù)類的任何變化都不必修改WCF服務(wù)的代碼。因此,本發(fā)明提出了一種基于WCF服務(wù)的服務(wù)端與客戶端之間的交互方法和系統(tǒng),可以實現(xiàn)WCF服務(wù)與業(yè)務(wù)類、數(shù)據(jù)類分離。在詳細說明本發(fā)明的實施例之前對一些名詞進行解釋。各實施例中出現(xiàn)的序列化、反序列化以及反射的解釋為如下序列化將對象轉(zhuǎn)換為可保存或傳輸?shù)母袷降倪^程。舉例來說,將對象的信息(例如字段值、類名等)抽取出來,將抽取出例如類名的對象按照某種格式統(tǒng)一存儲在一個字符串中(也可以存儲在二進制數(shù)組或其他格式中),以便于存入數(shù)據(jù)庫或在網(wǎng)絡(luò)間傳輸。標準數(shù)據(jù)類型也可以被序列化,例如一個整型變量可以被序列化為一個字符串。反序列化反序列化是與序列化相對的過程,是指將序列化的結(jié)果(例如一個字符串)還原為對象的過程。在反序列化過程之前必須給其提供如下兩部分內(nèi)容序列化的結(jié)果、反序列化的類型定義(也就是序列化之前對象的類型定義)。反射簡單來說,通過反射可以實現(xiàn)如下內(nèi)容指定程序集名稱及路徑、命名空間、類名,(1)可以獲得類型的定義(如該類的方法、屬性等信息),(2)可以創(chuàng)建該類型的實例(即創(chuàng)建該類型的對象);指定程序集名稱及路徑、命名空間、類名、方法名,(1)可以調(diào)用方法名對應(yīng)的方法,( 可以獲得該方法的參數(shù)列表、每一個參數(shù)的類型定義、方法返回值的類型定義等信肩、ο需要注意的是反射不能在服務(wù)端與客戶端之間執(zhí)行,也就是說,客戶端代碼不能直接反射調(diào)用服務(wù)端方法,服務(wù)端代碼也不能直接反射調(diào)用客戶端代碼。圖3示出了根據(jù)本發(fā)明的實施例的基于WCF服務(wù)的服務(wù)端與客戶端之間的交互方法的流程圖。如圖3所示,根據(jù)本發(fā)明的實施例的基于WCF服務(wù)的服務(wù)端與客戶端之間的交互方法,包括步驟302,客戶端代理接收來自客戶端的調(diào)用信息和參數(shù)集合,調(diào)用客戶端序列化器將參數(shù)集合序列化為標準數(shù)據(jù)類型格式的數(shù)據(jù),并將經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息發(fā)送至WCF客戶端,WCF客戶端通過WCF服務(wù)將經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息發(fā)送至WCF服務(wù)端,其中,調(diào)用信息為標準數(shù)據(jù)類型格式的數(shù)據(jù);步驟304,當(dāng)服務(wù)端代理接收到來自WCF服務(wù)端的經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息時,服務(wù)端代理通過反射技術(shù)獲取被調(diào)用的業(yè)務(wù)類方法的參數(shù)類型列表,并根據(jù)參數(shù)類型列表調(diào)用服務(wù)端序列化器將經(jīng)過序列化處理的參數(shù)集合進行反序列化處理為參數(shù)集合,以及根據(jù)調(diào)用信息通過反射技術(shù)調(diào)用服務(wù)端的業(yè)務(wù)類方法,將參數(shù)集合傳遞至業(yè)務(wù)類方法,獲取執(zhí)行業(yè)務(wù)類方法的返回值并將返回值發(fā)送至WCF服務(wù)端;以及步驟306,WCF服務(wù)端將返回值通過WCF服務(wù)發(fā)送至WCF客戶端,WCF客戶端將返回值發(fā)送至客戶端代理,客戶端代理將返回值傳送至客戶端。通過此方法,可以將原本不可以直接通過WCF服務(wù)傳輸?shù)臄?shù)據(jù)類序列化為可以直接傳輸?shù)臄?shù)據(jù)格式,利用反射技術(shù)來調(diào)用業(yè)務(wù)類方法,這樣就不用預(yù)先在WCF服務(wù)中為數(shù)據(jù)類定義數(shù)據(jù)契約,為業(yè)務(wù)類定義服務(wù)契約,服務(wù)端業(yè)務(wù)類的任何變化都無需修改WCF服務(wù)的代碼,數(shù)據(jù)類的任何變化都不需修改WCF服務(wù)的代碼。在上述技術(shù)方案中,優(yōu)選地,步驟302還可以包括客戶端代理保存來自客戶端的返回值類型定義;步驟304還可以包括當(dāng)判斷返回值是數(shù)據(jù)類時,所述服務(wù)端代理調(diào)用服務(wù)端序列化器序列化返回值,并將經(jīng)過序列化處理的返回值發(fā)送至WCF服務(wù)端;步驟306還可以包括客戶端代理將返回值類型定義和經(jīng)過序列化的返回值發(fā)送至客戶端序列化器進行反序列化處理,客戶端代理將經(jīng)過反序列化處理的返回值傳遞至客戶端。執(zhí)行業(yè)務(wù)類方法的執(zhí)行結(jié)果如果是數(shù)據(jù)類對象,那么也可以通過序列化的方法來將其序列化為WCF服務(wù)可以直接傳輸?shù)男问?,實現(xiàn)了 WCF與數(shù)據(jù)類的分離。在上述技術(shù)方案中,優(yōu)選地,客戶端可以包括Silverlight客戶端。在上述技術(shù)方案中,優(yōu)選地,服務(wù)端可以包括.net服務(wù)端。在上述技術(shù)方案中,優(yōu)選地,標準數(shù)據(jù)類型格式可以包括字符串和整型。為了實現(xiàn)WCF服務(wù)于業(yè)務(wù)類、數(shù)據(jù)類的分離,增加了服務(wù)端代理、客戶端代理、服務(wù)端序列化器以及客戶端序列化器四個部分。創(chuàng)建一個WCF服務(wù)(以及WCF客戶端、WCF 服務(wù)端),用于實現(xiàn)客戶端與服務(wù)端之間最基本的通信。服務(wù)端的業(yè)務(wù)類、數(shù)據(jù)類不需要在 WCF服務(wù)端、WCF客戶端中聲明為服務(wù)契約和數(shù)據(jù)契約。圖4示出了根據(jù)本發(fā)明的實施例的基于WCF服務(wù)的服務(wù)端與客戶端之間的交互系統(tǒng)的框圖。如圖4所示,根據(jù)本發(fā)明的實施例的基于WCF服務(wù)的服務(wù)端與客戶端之間的交互系統(tǒng)400,包括服務(wù)端416和客戶端402,還包括客戶端代理404,連接至客戶端402,接收來自客戶端402的調(diào)用信息和參數(shù)集合并將參數(shù)信息傳遞至客戶端序列化器406,將來自客戶端序列化器406的經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息發(fā)送至WCF客戶端408以及將來自WCF客戶端408的返回值發(fā)送至客戶端,其中,調(diào)用信息為標準數(shù)據(jù)類型格式的數(shù)據(jù);客戶端序列化器406,連接至客戶端代理404,用于將來自客戶端代理404的參數(shù)集合序列化為標準數(shù)據(jù)類型格式的數(shù)據(jù),并將經(jīng)過序列化處理的參數(shù)集合傳遞至客戶端代理404 ; WCF客戶端408,連接至客戶端代理404,通過WCF服務(wù)將經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息發(fā)送至WCF服務(wù)端410以及將來自WCF服務(wù)端410的返回值發(fā)送至客戶端代理404 ; WCF服務(wù)端410,連接至服務(wù)端代理412,用于將經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息傳遞至服務(wù)端代理412以及將來服務(wù)端代理412的返回值發(fā)送至WCF客戶端408 ;服務(wù)端代理412,連接至服務(wù)端416,當(dāng)接收到來自WCF服務(wù)端410的經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息時,根據(jù)調(diào)用信息通過反射技術(shù)獲取被調(diào)用的業(yè)務(wù)類方法的參數(shù)類型列表,將參數(shù)類型列表和經(jīng)過序列化處理的參數(shù)集合傳遞至服務(wù)端序列化器414,以及根據(jù)調(diào)用信息通過反射技術(shù)調(diào)用服務(wù)端的業(yè)務(wù)類方法,將來自服務(wù)端序列化器414的經(jīng)過反序列化處理的參數(shù)集合傳遞至業(yè)務(wù)類方法,獲取執(zhí)行業(yè)務(wù)類方法的返回值并將返回值發(fā)送至WCF服務(wù)端410 ;以及服務(wù)端序列化器414,連接至服務(wù)端代理412,用于根據(jù)參數(shù)類型列表將經(jīng)過序列化處理的參數(shù)集合進行反序列化為參數(shù)集合,并將參數(shù)集合傳遞至服務(wù)端代理412。通過此系統(tǒng),可以將原本不可以直接通過WCF服務(wù)傳輸?shù)臄?shù)據(jù)類序列化為可以直接傳輸?shù)臄?shù)據(jù)格式,利用反射技術(shù)來調(diào)用業(yè)務(wù)類方法,這樣就不用預(yù)先在WCF服務(wù)中為數(shù)據(jù)類定義數(shù)據(jù)契約,為業(yè)務(wù)類定義服務(wù)契約,服務(wù)端業(yè)務(wù)類的任何變化都無需修改WCF服務(wù)的代碼,數(shù)據(jù)類的任何變化都不需修改WCF服務(wù)的代碼。在上述技術(shù)方案中,優(yōu)選地,客戶端代理404還保存來自客戶端402的返回值類型定義;當(dāng)判斷返回值是數(shù)據(jù)類時,服務(wù)端代理412調(diào)用服務(wù)端序列化器414序列化返回值, 并將經(jīng)過序列化處理的返回值發(fā)送至WCF服務(wù)端410 ;客戶端代理404將返回值類型定義和經(jīng)過序列化的返回值發(fā)送至客戶端序列化器406進行反序列化處理,客戶端代理404將經(jīng)過反序列化處理的返回值傳遞至客戶端402。執(zhí)行業(yè)務(wù)類方法的執(zhí)行結(jié)果如果是數(shù)據(jù)類對象,那么也可以通過序列化的方法來將其序列化為WCF服務(wù)可以直接傳輸?shù)男问?,實現(xiàn)了 WCF與數(shù)據(jù)類的分離。在上述技術(shù)方案中,優(yōu)選地,客戶端402可以包括Silverlight客戶端。在上述技術(shù)方案中,優(yōu)選地,服務(wù)端416可以包括.net服務(wù)端。在上述技術(shù)方案中,優(yōu)選地,標準數(shù)據(jù)類型格式可以包括字符串和整型。接下來繼續(xù)結(jié)合圖5來說明本發(fā)明的又一實施例,在實施例中,將本發(fā)明的基于WCF服務(wù)的客戶端與服務(wù)端之間的交互系統(tǒng)中的服務(wù)端作為.net服務(wù)端,客戶端作為 Silverligh客戶端,在此,本領(lǐng)域技術(shù)人員應(yīng)該理解,本發(fā)明的技術(shù)方案可以應(yīng)用于以WCF 服務(wù)為基礎(chǔ)的各種系統(tǒng)中,不僅限于實施例中的實施方式。圖5示出了根據(jù)本發(fā)明的實施例的WCF服務(wù)與業(yè)務(wù)類、數(shù)據(jù)類分離的示意圖。增加的兩個序列化器506和514的作用是(1)將數(shù)據(jù)類對象序列化為可以通過 WCF服務(wù)傳輸?shù)母袷?例如字符串);(2)將序列化的結(jié)果(例如字符串)反序列化為數(shù)據(jù)類對象。增加的客戶端代理504的作用是(1)調(diào)用開始時,接收Silverlight客戶端502 傳遞的參數(shù)集合,并調(diào)用客戶端序列化器506將參數(shù)集合中的數(shù)據(jù)類對象進行序列化,然后將處理過的參數(shù)集合傳遞給WCF客戶端508 ; (2)調(diào)用結(jié)束時,從WCF客戶端508接收返回值,并傳送至Silverlight客戶端502 ;如果返回值是被序列化的數(shù)據(jù)類對象,則首先調(diào)用客戶端序列化器506,對其進行反序列化,得到數(shù)據(jù)類對象,然后將數(shù)據(jù)類對象傳送至 Silverlight 客戶端 502。增加的服務(wù)端代理512的作用是(1)調(diào)用過程中,接收WCF服務(wù)端510傳遞過來的參數(shù)集合,如果參數(shù)集合中有被序列化的數(shù)據(jù)類對象,則調(diào)用服務(wù)端序列化器514將其反序列化;(2)反射調(diào)用服務(wù)端516業(yè)務(wù)類的方法,將參數(shù)集合傳遞給該方法;(3)獲取業(yè)務(wù)類方法的執(zhí)行結(jié)果,并返回給WCF服務(wù)端510 ;如果返回結(jié)果是數(shù)據(jù)類對象,則先調(diào)用服務(wù)端序列化器514將其序列化,然后再返回給WCF服務(wù)端510。
9
由于.net與Silverlight之間不能相互引用程序集(數(shù)據(jù)類定義在程序集中), 因此,將定義數(shù)據(jù)類的代碼編譯為.net與Silverlight兩個程序集,分別部署在服務(wù)端與客戶端。也就是說,不同類型的兩個程序集使用同一套代碼文件(數(shù)據(jù)類定義代碼)。系統(tǒng)中各模塊之間的工作原理如下Silverlight客戶端502將下列信息傳遞給客戶端代理504 方法的調(diào)用信息(程序集名稱及路徑、命名空間、類名、方法名等)、參數(shù)集合、返回值的類型定義,其中,返回值的類型定義保存在客戶端代理504中,而方法的調(diào)用信息的數(shù)據(jù)本身是字符串形式的數(shù)據(jù),因此不需將其進行序列化;客戶端代理504調(diào)用客戶端序列化器506,將參數(shù)集合中的數(shù)據(jù)類對象序列化為標準數(shù)據(jù)類型(簡化實現(xiàn)將所有的參數(shù)全部序列化為標準數(shù)據(jù)類型)。然后將處理過的參數(shù)集合與調(diào)用信息一起傳遞給WCF客戶端508 ;WCF客戶端508將調(diào)用信息、參數(shù)集合傳遞給WCF服務(wù)端510 ;WCF服務(wù)端510又將調(diào)用信息、參數(shù)集合傳遞給服務(wù)端代理512 ;服務(wù)端代理512根據(jù)調(diào)用信息,利用反射技術(shù)得到被調(diào)用方法的參數(shù)類型列表, 根據(jù)參數(shù)類型列表服務(wù)端代理512能夠判斷出參數(shù)集合中哪些參數(shù)需要進行反序列化操作,并調(diào)用服務(wù)端序列化器514對其進行反序列化操作(簡化實現(xiàn)反序列化參數(shù)集合中的所有參數(shù)),使參數(shù)集合中的參數(shù)與相應(yīng)的參數(shù)類型對應(yīng);根據(jù)調(diào)用信息通過反射技術(shù)調(diào)用.net服務(wù)端516的業(yè)務(wù)類方法,將反序列化處理后的參數(shù)集合傳遞給該方法,獲取執(zhí)行業(yè)務(wù)類方法的返回值;如果返回值是數(shù)據(jù)類對象,服務(wù)端代理512會調(diào)用服務(wù)端序列化器514對其進行序列化操作(簡化實現(xiàn)不論返回值為何種類型,都對其進行序列化操作);服務(wù)端代理512將返回值傳送給WCF服務(wù)端510,WCF服務(wù)端510又將返回值傳遞給WCF客戶端508,WCF客戶端508最后將返回值傳遞給客戶端代理504 ;客戶端代理504根據(jù)保存的返回值的類型定義,判斷返回值是否是序列化的結(jié)果。如果返回值是序列化的結(jié)果,則將返回值及其類型定義一起傳遞給客戶端序列化器 506,對返回值進行反序列化操作(簡化實現(xiàn)不論返回值為何種類型,都對其進行反序列化操作);客戶端代理504接收來自客戶端序列化器506的反序列化后的返回值,并將該返回值返回給Silverlight客戶端502,這樣就完成Silverlight客戶端502與.net服務(wù)端 516之間的一次交互。通過上述技術(shù)方案,Silverlight客戶端將方法的調(diào)用信息與參數(shù)集合一起,通過 WCF服務(wù)傳遞到WCF服務(wù)端,再傳遞給服務(wù)端代理。服務(wù)端代理獲得方法的調(diào)用信息(程序集名稱及路徑、命名空間、類名、方法名等)后,利用反射技術(shù)可以調(diào)用.net服務(wù)端內(nèi)任意程序集的任意業(yè)務(wù)類的任意方法,實現(xiàn)了 WCF服務(wù)與業(yè)務(wù)類分離。這種方式不需要為業(yè)務(wù)類聲明服務(wù)契約。當(dāng)業(yè)務(wù)類或其方法發(fā)生變化時,只需修改方法的調(diào)用信息或參數(shù)集合,而不需要修改WCF服務(wù)。因此,WCF服務(wù)是穩(wěn)定的,是與業(yè)務(wù)類無關(guān)的,從而實現(xiàn)了 WCF服務(wù)與業(yè)務(wù)類的分離。本發(fā)明還實現(xiàn)了 WCF服務(wù)與數(shù)據(jù)類分離一方面,字符串等標準數(shù)據(jù)類型無需注冊為數(shù)據(jù)契約,可直接通過WCF服務(wù)傳遞;另一方面,序列化技術(shù)能夠?qū)?shù)據(jù)類對象轉(zhuǎn)換為標準數(shù)據(jù)類型。因此,本發(fā)明通過序列化技術(shù)實現(xiàn)WCF服務(wù)與數(shù)據(jù)類的分離。具體方法如下(1)數(shù)據(jù)類對象作為參數(shù)通過WCF服務(wù)進行傳遞??蛻舳舜硎盏絊ilverlight客戶端傳遞的參數(shù)集合后,調(diào)用客戶端序列化器將其中的數(shù)據(jù)類對象序列化為標準數(shù)據(jù)類型(簡化實現(xiàn)將所有的參數(shù)全部序列化),然后通過WCF服務(wù)傳輸給服務(wù)端代理。服務(wù)端代理調(diào)用服務(wù)端序列化器,將被序列化的參數(shù)集合反序列化為數(shù)據(jù)類對象(簡化實現(xiàn)將所有參數(shù)全部反序列化),再將經(jīng)過反序列化處理后的參數(shù)集合傳遞給業(yè)務(wù)類的方法。(2)數(shù)據(jù)類對象作為返回值通過WCF服務(wù)進行傳遞。業(yè)務(wù)類方法執(zhí)行完畢,將返回值傳遞給服務(wù)端代理。如果返回值是數(shù)據(jù)類對象,服務(wù)端代理將調(diào)用服務(wù)端序列化器,對其進行序列化操作(簡化實現(xiàn)不判斷返回值類型,直接序列化),這樣返回值就可以通過WCF服務(wù)傳遞給客戶端代理。如果客戶端代理收到的是序列化的返回值,則調(diào)用客戶端序列化器將其反序列化為數(shù)據(jù)類對象(簡化實現(xiàn)不判斷返回值類型,直接反序列化)。如前所述,反序列化過程不但要提供序列化的結(jié)果,還要提供對象被序列化前的類型定義。這樣,服務(wù)端方向與客戶端方向的反序列化方法如下服務(wù)端方向的反序列化方法服務(wù)端代理使用反射技術(shù)可以得到方法的每一個參數(shù)的類型定義(得到參數(shù)類型列表)。也就是說,可以知道每個參數(shù)是標準數(shù)據(jù)類型還是數(shù)據(jù)類對象。由于標準數(shù)據(jù)類型不必序列化,而數(shù)據(jù)類對象必須序列化,據(jù)此可以判斷出參數(shù)集合中哪個參數(shù)是序列化的結(jié)果。將序列化的參數(shù)與其對應(yīng)的類型定義一起提供給服務(wù)端序列化器,對其進行反序列化操作(簡化實現(xiàn)將每個參數(shù)及其對應(yīng)的類型定義一起提供給服務(wù)端序列化器,反序列化參數(shù)集合中的所有參數(shù))??蛻舳朔较虻姆葱蛄谢椒?Silverlight客戶端將方法返回值(執(zhí)行方法的執(zhí)行結(jié)果)的類型定義傳遞給客戶端代理。客戶端代理判斷其類型,如果返回值的類型是數(shù)據(jù)類,則將接收到來自WCF客戶端的返回值與類型定義一起提供給客戶端序列化器,進行反序列化操作(簡化實現(xiàn)無論方法的返回值為何種類型,都對其進行反序列化操作)。以上結(jié)合附圖詳細說明了本發(fā)明的實施例的技術(shù)方案,實施本發(fā)明的技術(shù)方案可以達到以下技術(shù)效果1、實現(xiàn)了 WCF服務(wù)與業(yè)務(wù)類的分離。不需要將業(yè)務(wù)類聲明為服務(wù)契約,即可通過WCF服務(wù)對其進行調(diào)用,業(yè)務(wù)類的任何變化都不需要修改WCF服務(wù)。2、實現(xiàn)了 WCF服務(wù)與數(shù)據(jù)類的分離。不需要將數(shù)據(jù)類聲明為數(shù)據(jù)契約,即可通過WCF服務(wù)對其進行傳輸,數(shù)據(jù)類的任何變化都不需要修改WCF服務(wù)。3、有效的提高系統(tǒng)的穩(wěn)定性。由于業(yè)務(wù)類、數(shù)據(jù)類的任何變化都不需要修改WCF服務(wù),因此作為系統(tǒng)交互基礎(chǔ)的WCF服務(wù)具有很高的穩(wěn)定性,從而提高了整個系統(tǒng)的穩(wěn)定性。4、有效的提高系統(tǒng)的可擴展性。只需調(diào)整調(diào)用信息,客戶端例如Silverlight客戶端就可以調(diào)用服務(wù)端例如.net
11服務(wù)端的任意業(yè)務(wù)類的任意方法,而無需修改WCF服務(wù),有效的提高了系統(tǒng)的可擴展性。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種服務(wù)端與客戶端之間的交互方法,其特征在于,包括步驟302,客戶端代理接收來自客戶端的調(diào)用信息和參數(shù)集合,調(diào)用客戶端序列化器將所述參數(shù)集合序列化為標準數(shù)據(jù)類型格式的數(shù)據(jù),并將經(jīng)過序列化處理的所述參數(shù)集合和所述調(diào)用信息發(fā)送至WCF客戶端,所述WCF客戶端通過WCF服務(wù)將經(jīng)過序列化處理的所述參數(shù)集合和所述調(diào)用信息發(fā)送至WCF服務(wù)端,其中,所述調(diào)用信息為標準數(shù)據(jù)類型格式的數(shù)據(jù);步驟304,當(dāng)服務(wù)端代理接收到來自所述WCF服務(wù)端的經(jīng)過序列化處理的所述參數(shù)集合和所述調(diào)用信息時,所述服務(wù)端代理通過反射技術(shù)獲取被調(diào)用的業(yè)務(wù)類方法的參數(shù)類型列表,并根據(jù)所述參數(shù)類型列表調(diào)用服務(wù)端序列化器將經(jīng)過序列化處理的所述參數(shù)集合進行反序列化處理為所述參數(shù)集合,以及根據(jù)所述調(diào)用信息通過所述反射技術(shù)調(diào)用服務(wù)端的所述業(yè)務(wù)類方法,將所述參數(shù)集合傳遞至所述業(yè)務(wù)類方法,獲取執(zhí)行所述業(yè)務(wù)類方法的返回值并將所述返回值發(fā)送至所述WCF服務(wù)端;以及步驟306,所述WCF服務(wù)端將所述返回值通過WCF服務(wù)發(fā)送至所述WCF客戶端,所述WCF 客戶端將所述返回值發(fā)送至所述客戶端代理,所述客戶端代理將所述返回值傳送至所述客戶端。
2.根據(jù)權(quán)利要求1所述的服務(wù)端與客戶端之間的交互方法,其特征在于,所述步驟302 還包括所述客戶端代理保存來自所述客戶端的返回值類型定義;所述步驟304還包括當(dāng)判斷所述返回值是數(shù)據(jù)類時,所述服務(wù)端代理調(diào)用所述服務(wù)端序列化器序列化所述返回值,并將經(jīng)過序列化處理的所述返回值發(fā)送至所述WCF服務(wù)端;所述步驟306還包括所述客戶端代理將所述返回值類型定義和經(jīng)過序列化的所述返回值發(fā)送至所述客戶端序列化器進行反序列化處理,所述客戶端代理將經(jīng)過反序列化處理的所述返回值傳遞至所述客戶端。
3.根據(jù)權(quán)利要求1所述的服務(wù)端與客戶端之間的交互方法,其特征在于,所述客戶端包括Silverlight客戶端。
4.根據(jù)權(quán)利要求1所述的服務(wù)端與客戶端之間的交互方法,其特征在于,所述服務(wù)端包括.net服務(wù)端。
5.根據(jù)權(quán)利要求1至4中任一項所述的服務(wù)端與客戶端之間的交互方法,其特征在于, 所述標準數(shù)據(jù)類型格式包括字符串和整型。
6.一種服務(wù)端與客戶端之間的交互系統(tǒng),包括服務(wù)端和客戶端,其特征在于,還包括客戶端代理,連接至所述客戶端,接收來自所述客戶端的調(diào)用信息和參數(shù)集合并將所述參數(shù)信息傳遞至客戶端序列化器,將來自客戶端序列化器的經(jīng)過序列化處理的所述參數(shù)集合和所述調(diào)用信息發(fā)送至WCF客戶端以及將來自WCF客戶端的返回值發(fā)送至所述客戶端,其中,所述調(diào)用信息為標準數(shù)據(jù)類型格式的數(shù)據(jù);所述客戶端序列化器,連接至所述客戶端代理,用于將來自所述客戶端代理的所述參數(shù)集合序列化為標準數(shù)據(jù)類型格式的數(shù)據(jù),并將經(jīng)過序列化處理的所述參數(shù)集合傳遞至所述客戶端代理;所述WCF客戶端,連接至所述客戶端代理,通過WCF服務(wù)將經(jīng)過序列化處理的所述參數(shù)集合和所述調(diào)用信息發(fā)送至WCF服務(wù)端以及將來自所述WCF服務(wù)端的返回值發(fā)送至所述客戶端代理;所述WCF服務(wù)端,連接至服務(wù)端代理,用于將經(jīng)過序列化處理的所述參數(shù)集合和所述調(diào)用信息傳遞至所述服務(wù)端代理以及將來所述服務(wù)端代理的所述返回值發(fā)送至所述WCF 客戶端;所述服務(wù)端代理,連接至所述服務(wù)端,當(dāng)接收到來自所述WCF服務(wù)端的經(jīng)過序列化處理的所述參數(shù)集合和所述調(diào)用信息時,根據(jù)所述調(diào)用信息通過反射技術(shù)獲取被調(diào)用的業(yè)務(wù)類方法的參數(shù)類型列表,將所述參數(shù)類型列表和經(jīng)過序列化處理的所述參數(shù)集合傳遞至服務(wù)端序列化器,以及根據(jù)所述調(diào)用信息通過反射技術(shù)調(diào)用所述服務(wù)端的所述業(yè)務(wù)類方法, 將來自服務(wù)端序列化器的經(jīng)過反序列化處理的所述參數(shù)集合傳遞至所述業(yè)務(wù)類方法,獲取執(zhí)行所述業(yè)務(wù)類方法的所述返回值并將所述返回值發(fā)送至所述WCF服務(wù)端;以及所述服務(wù)端序列化器,連接至所述服務(wù)端代理,用于根據(jù)所述參數(shù)類型列表將經(jīng)過序列化處理的所述參數(shù)集合進行反序列化為所述參數(shù)集合,并將所述參數(shù)集合傳遞至所述服務(wù)端代理。
7.根據(jù)權(quán)利要求6所述的服務(wù)端與客戶端之間的交互系統(tǒng),其特征在于,所述客戶端代理還保存來自所述客戶端的返回值類型定義;當(dāng)判斷所述返回值是數(shù)據(jù)類時,所述服務(wù)端代理調(diào)用所述服務(wù)端序列化器序列化所述返回值,并將經(jīng)過序列化處理的所述返回值發(fā)送至所述WCF服務(wù)端;所述客戶端代理將所述返回值類型定義和經(jīng)過序列化的所述返回值發(fā)送至所述客戶端序列化器進行反序列化處理,所述客戶端代理將經(jīng)過反序列化處理的所述返回值傳遞至所述客戶端。
8.根據(jù)權(quán)利要求6所述的服務(wù)端與客戶端之間的交互系統(tǒng),其特征在于,所述客戶端包括Silverlight客戶端。
9.根據(jù)權(quán)利要求6所述的服務(wù)端與客戶端之間的交互系統(tǒng),其特征在于,所述服務(wù)端包括.net服務(wù)端。
10.根據(jù)權(quán)利要求6至9中任一項所述的服務(wù)端與客戶端之間的交互系統(tǒng),其特征在于,所述標準數(shù)據(jù)類型格式包括字符串和整型。
全文摘要
本發(fā)明提供了一種交互方法和系統(tǒng),方法包括客戶端代理接收調(diào)用信息和參數(shù)集合,客戶端序列化器將參數(shù)集合序列化為標準數(shù)據(jù)類型格式的數(shù)據(jù),并將經(jīng)過序列化處理的參數(shù)集合和調(diào)用信息發(fā)送至WCF客戶端,其將參數(shù)集合和調(diào)用信息發(fā)送至WCF服務(wù)端;當(dāng)服務(wù)端代理接收到參數(shù)集合和調(diào)用信息時,其獲取業(yè)務(wù)類方法的參數(shù)類型列表,并調(diào)用服務(wù)端序列化器將經(jīng)過序列化處理的參數(shù)集合進行反序列化處理為參數(shù)集合,通過反射技術(shù)調(diào)用業(yè)務(wù)類方法,將參數(shù)集合傳遞至業(yè)務(wù)類方法,獲取執(zhí)行業(yè)務(wù)類方法的返回值并將返回值發(fā)送至WCF服務(wù)端;WCF服務(wù)端將返回值發(fā)送至WCF客戶端,其將返回值發(fā)送至客戶端代理,最后將返回值傳送至客戶端。實現(xiàn)了WCF服務(wù)與數(shù)據(jù)類、業(yè)務(wù)類的分離。
文檔編號H04L29/06GK102209076SQ20111014967
公開日2011年10月5日 申請日期2011年6月3日 優(yōu)先權(quán)日2011年6月3日
發(fā)明者滕石松 申請人:用友軟件股份有限公司