1.一種WCF框架net.tcp協(xié)議跨平臺(tái)通信的系統(tǒng),其特征在于,該系統(tǒng)包括客戶端和WCF服務(wù)端之間的一個(gè)用于轉(zhuǎn)發(fā)數(shù)據(jù)的適配器中間件系統(tǒng),該中間件系統(tǒng)包括WCF服務(wù)的客戶端引用模塊、消息緩存模塊、自定義消息模塊、服務(wù)端數(shù)據(jù)適配器模塊和客戶端數(shù)據(jù)適配器模塊;
所述WCF服務(wù)的客戶端引用模塊由VS(Microsoft Visual Studio)的代碼生成器自動(dòng)生成,根據(jù)服務(wù)的個(gè)數(shù)設(shè)有多個(gè)引用,每個(gè)引用對(duì)應(yīng)一個(gè)WCF服務(wù),用于與WCF服務(wù)端通信;
所述消息緩存模塊用于將接收的消息存儲(chǔ),以便適配器逐條處理消息;所述消息緩存模塊的類圖如下,消息緩存類包括兩個(gè)屬性變量:發(fā)往WCF服務(wù)消息的緩存和發(fā)往客戶端消息的緩存,兩個(gè)屬性變量均為先入先出的隊(duì)列類型;
所述自定義消息模塊用于定義客戶端和客戶端數(shù)據(jù)適配器模塊之間的數(shù)據(jù)傳輸格式,自定義消息包括父類消息和子類消息,所述子類消息包括錯(cuò)誤消息、方法調(diào)用消息、方法返回值消息和命令消息,子類消息共有的父類消息為抽象類;錯(cuò)誤消息用于發(fā)送異常,屬性值為錯(cuò)誤消息;方法調(diào)用消息用于發(fā)送方法的定義,以便遠(yuǎn)程調(diào)用方法,屬性值包括方法名稱、參數(shù)類型、參數(shù)值和用戶狀態(tài);方法返回值消息用于存儲(chǔ)方法調(diào)用的結(jié)果,屬性值包括方法名稱、返回值類型、返回值和用戶狀態(tài);命令消息用于存放遠(yuǎn)程控制中間件的命令,屬性值包括命令類型和命令參數(shù);
所述服務(wù)端數(shù)據(jù)適配器模塊用于與WCF服務(wù)端通信,包括從消息緩存模塊中讀取消息并根據(jù)消息調(diào)用WCF接口,將WCF接口調(diào)用的返回值或需要調(diào)用的客戶端方法放入消息緩存模塊,通信方式采用net.tcp協(xié)議;
所述服務(wù)端數(shù)據(jù)適配器模塊類圖如下,父類為一個(gè)抽象的代理類,定義了具體實(shí)現(xiàn)類公用的方法和必須實(shí)現(xiàn)的抽象方法,定義的屬性包括具體實(shí)現(xiàn)類要實(shí)現(xiàn)的數(shù)據(jù)鏈路對(duì)象(即具體的WCF服務(wù)引用對(duì)象)、具體實(shí)現(xiàn)類類型、WCF方法調(diào)用的緩存字典和處理發(fā)送到WCF服務(wù)的消息的線程集合,定義的方法包括啟動(dòng)WCF服務(wù)的消息的線程的方法、將消息發(fā)送到客戶端緩存的方法,調(diào)用WCF服務(wù)引用的方法;具體實(shí)現(xiàn)類根據(jù)不同的WCF服務(wù)有不同的實(shí)現(xiàn)方法,實(shí)現(xiàn)方法與WCF服務(wù)端定義的接口方法對(duì)應(yīng);
所述客戶端數(shù)據(jù)適配器模塊用于與客戶端通信,包括從消息緩存模塊中讀取消息并根據(jù)消息調(diào)用客戶端方法,將客戶端方法的返回值或需要調(diào)用的服務(wù)端方法放入消息緩存模塊,通訊方式采用socket通信;
所述客戶端數(shù)據(jù)適配器模塊包括兩個(gè)類,適配器管理類和適配器類;所述適配器管理類用于為每個(gè)WCF服務(wù)分配一個(gè)監(jiān)聽端口,監(jiān)聽是否有客戶端希望連接WCF服務(wù),當(dāng)有客戶端希望連接WCF服務(wù)時(shí),創(chuàng)建一個(gè)適配器類,由適配器類的實(shí)例對(duì)象負(fù)責(zé)與客戶端通信;所述適配器管理類包括一個(gè)監(jiān)聽器集合和一個(gè)適配器集合;所述監(jiān)聽器集合用于存放所有正在監(jiān)聽是否有客戶端連接的監(jiān)聽器;所述適配器集合用于存放所有正在與客戶端通信的適配器類的對(duì)象,同時(shí)還監(jiān)聽是否有客戶端連接;所述適配器類用于將WCF傳來的消息發(fā)送給客戶端,并將客服端發(fā)送來的消息放入WCF的消息緩存。
2.一種WCF框架net.tcp協(xié)議跨平臺(tái)通信的方法,其特征在于,通過權(quán)利要求1所述的WCF框架net.tcp協(xié)議跨平臺(tái)通信的系統(tǒng)實(shí)現(xiàn),該方法包括如下步驟:
步驟1、中間件進(jìn)行初始化,具體方法如下:
步驟1.1、創(chuàng)建適配器管理類對(duì)象;
步驟1.2、適配器管理類對(duì)象根據(jù)引用的WCF服務(wù)個(gè)數(shù),創(chuàng)建相應(yīng)個(gè)數(shù)的線程,每個(gè)線程調(diào)用適配器管理類的監(jiān)聽方法監(jiān)聽是否有客戶端請(qǐng)求連接中間件;
步驟1.3、若客戶端程序請(qǐng)求與中間件建立鏈接,中間件適配器管理類對(duì)象監(jiān)聽到請(qǐng)求,則初始化一個(gè)與客戶端程序?qū)?yīng)的適配器類對(duì)象,并再次進(jìn)入監(jiān)聽狀態(tài),等待下一個(gè)客戶端連接;
步驟1.4、適配器類的對(duì)象與客戶端建立socket鏈接,并創(chuàng)建對(duì)應(yīng)的消息緩存對(duì)象;
步驟2、客戶端調(diào)用服務(wù)端的操作,具體方法如下:
步驟2.1、客戶端程序調(diào)用負(fù)責(zé)通信的函數(shù),將需要調(diào)用的函數(shù)方法封裝為方法調(diào)用消息類對(duì)象;
步驟2.2、通信函數(shù)向中間件系統(tǒng)的客戶端數(shù)據(jù)適配器模塊發(fā)送函數(shù)調(diào)用的請(qǐng)求消息;
步驟2.3、客戶端數(shù)據(jù)適配器模塊接收請(qǐng)求消息,將消息放入消息緩存模塊中,并通知服務(wù)端數(shù)據(jù)適配器模塊處理;
步驟2.4、服務(wù)端數(shù)據(jù)適配器模塊接收到通知,啟動(dòng)新線程從消息緩存模塊中讀取出命令消息,判斷為函數(shù)調(diào)用請(qǐng)求消息,則使用反射技術(shù)調(diào)用具體實(shí)現(xiàn)類要實(shí)現(xiàn)的數(shù)據(jù)鏈路對(duì)象中對(duì)應(yīng)的WCF操作;
步驟2.5、如果有返回值,服務(wù)端數(shù)據(jù)適配器模塊將返回值封裝為返回值消息對(duì)象,放入消息緩存模塊中,并通知客戶端數(shù)據(jù)適配器模塊調(diào)用,執(zhí)行步驟2.6;如果沒有返回值,調(diào)用處理流程結(jié)束;
步驟2.6、客戶端數(shù)據(jù)適配器模塊取出返回值消息,將該返回值消息序列化后,通過socket發(fā)送到客戶端;
步驟2.7、客戶端將接收到的返回值消息反序列化,獲得返回值;
步驟3、服務(wù)端調(diào)用客戶端的操作,具體方法如下:
步驟3.1、服務(wù)端程序通過中間件的WCF服務(wù)的客戶端引用模塊調(diào)用服務(wù)端數(shù)據(jù)適配器模塊;
步驟3.2、服務(wù)端數(shù)據(jù)適配器模塊將函數(shù)調(diào)用請(qǐng)求消息封裝,并放入消息緩存模塊中,通知客戶端數(shù)據(jù)適配器模塊;
步驟3.3、客戶端數(shù)據(jù)適配器模塊從消息緩存模塊中取出函數(shù)調(diào)用請(qǐng)求消息,序列化后將該函數(shù)調(diào)用請(qǐng)求消息發(fā)送給對(duì)應(yīng)的客戶端通信接口;
步驟3.4、客戶端通信接口判斷消息為函數(shù)調(diào)用請(qǐng)求消息,將該函數(shù)調(diào)用請(qǐng)求消息反序列化后,調(diào)用對(duì)應(yīng)的函數(shù)。