一種基于wcf的物聯(lián)網(wǎng)通信方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于通信技術(shù)領(lǐng)域,尤其適用于面向服務(wù)應(yīng)用技術(shù)通信領(lǐng)域。
[0002]
【背景技術(shù)】
[0003]通過某種通信機制將既有程序從設(shè)備獲取的數(shù)據(jù)應(yīng)用于互聯(lián)網(wǎng)是一種趨勢,實現(xiàn)物聯(lián)網(wǎng)應(yīng)用通信的方法很多,但基于Windows平臺開發(fā)的通信采集程序直接轉(zhuǎn)互聯(lián)網(wǎng)通信的方法并不多,其中大多數(shù)的方法是將MFC(Microsoft Foundat1n Classes是微軟公司提供的一個類庫)采集程序得到的數(shù)據(jù)先保存在數(shù)據(jù)庫,再由互聯(lián)網(wǎng)應(yīng)用網(wǎng)站通過用戶向數(shù)據(jù)庫請求數(shù)據(jù)。本發(fā)明中終端設(shè)備的數(shù)據(jù)采集模塊基于MFC開發(fā),通過面向服務(wù)的通信機制,不通過數(shù)據(jù)庫直接將采集到的數(shù)據(jù)推送到網(wǎng)頁客戶端前臺,達到實時通信的效果。
[0004]
【發(fā)明內(nèi)容】
[0005]本發(fā)明提出一套基于WCF(Windows Communicat1n Foundat1n)的物聯(lián)網(wǎng)通信方法,該方法實現(xiàn)MFC數(shù)據(jù)采集模塊與網(wǎng)站服務(wù)器模塊(C#或其他語言開發(fā)的網(wǎng)站)通信。本方案MFC數(shù)據(jù)采集模塊基于完成端口模型(簡稱:10CP),與終端設(shè)備建立遠程通信來獲取數(shù)據(jù),并將數(shù)據(jù)推送給網(wǎng)站服務(wù)器模塊實時顯示,也可以用單機版與終端設(shè)備建立本地通信獲取數(shù)據(jù),然后將數(shù)據(jù)推送給網(wǎng)站服務(wù)器模塊實時顯示。
[0006]本發(fā)明由MFC數(shù)據(jù)采集模塊、面向服務(wù)應(yīng)用模塊(WCF)和網(wǎng)站服務(wù)器模塊三大部分組成,MFC數(shù)據(jù)采集模塊和網(wǎng)站服務(wù)器模塊之間通過面向服務(wù)應(yīng)用模塊(WCF)創(chuàng)建的函數(shù)建立通信。
[0007]1、MFC數(shù)據(jù)采集模塊
MFC數(shù)據(jù)采集模塊包括三個子模塊:互聯(lián)網(wǎng)通信模塊、本地通信模塊和進程間通信模塊。
[0008]MFC數(shù)據(jù)采集模塊的三個子模塊不能同時運行,如啟用其中一個子模塊,則另外兩個子模塊不工作?;ヂ?lián)網(wǎng)通信模塊應(yīng)用于與終端設(shè)備遠程通信,本地通信模塊應(yīng)用于與終端設(shè)備串口或CAN通信,進程間通信模塊應(yīng)用于MFC數(shù)據(jù)采集模塊與其他基于Windows平臺應(yīng)用程序通信。
[0009]遠程(互聯(lián)網(wǎng))通信要求MFC數(shù)據(jù)采集程序安裝在一臺WINDOWS平臺的計算機(簡稱:PC)內(nèi),PC需要具有公網(wǎng)IP地址和通信端口供遠程終端連接并接收發(fā)送遠程終端的數(shù)據(jù),本地通信以及進程間通信只需MFC數(shù)據(jù)采集程序安裝在聯(lián)網(wǎng)(Internet/Intratnet)的PC上。PC與面向服務(wù)應(yīng)用模塊以及網(wǎng)站服務(wù)器模塊協(xié)同工作將數(shù)據(jù)提供給更多用戶使用。
[0010]為解決TCP/IP通信的虛連接問題以及保證遠程通信的有效性和規(guī)范性,互聯(lián)網(wǎng)通信模塊采用的應(yīng)用層協(xié)議是JT/T 794標(biāo)準(zhǔn)協(xié)議,其通信模型采用1CP模型,1CP基于Socket編程,適用于控制并發(fā)執(zhí)行的高負載服務(wù)器。
[0011]本地通信模塊主要分串口通信和CAN(Controller Area NetWork)通信,串口通信基于windows32位系統(tǒng),使用兩種編程方式,一是使用ActiveX控件,二是調(diào)用Windows的API函數(shù)。Can通信的應(yīng)用層協(xié)議是CAN Calibrat1n Protocol(簡稱:CCP)協(xié)議,基于CAN轉(zhuǎn)Usb協(xié)議轉(zhuǎn)換器提供的驅(qū)動程序?qū)AN通信進行開發(fā),該驅(qū)動程序是一種動態(tài)鏈接庫。
[0012]進程間通信模塊主要是將MFC數(shù)據(jù)采集模塊作為一個中轉(zhuǎn)模塊,處理其他基于Windows平臺的應(yīng)用程序的數(shù)據(jù),并將采集的數(shù)據(jù)通過面向服務(wù)應(yīng)用模塊和網(wǎng)絡(luò)服務(wù)器模塊實時反饋給多個用戶。MFC數(shù)據(jù)采集模塊作為中轉(zhuǎn)模塊,用戶只需要關(guān)注進程間通信方式和接口,以及面向服務(wù)WCF模塊的業(yè)務(wù)模型的設(shè)計。
[0013]2、面向服務(wù)應(yīng)用模塊(WCF)
面向服務(wù)應(yīng)用模塊(WCH主要含通信模塊和業(yè)務(wù)邏輯數(shù)據(jù)接口。通信模塊包含兩個WCF程序,這里定義為WCFl和WCF2 JCFl處理解析MFC數(shù)據(jù)采集模塊傳遞的數(shù)據(jù),WCF2用于實現(xiàn)雙工通信(雙工通信:指在同一時刻信息可以進行雙向傳輸)推送數(shù)據(jù)到網(wǎng)站服務(wù)器模塊。業(yè)務(wù)邏輯數(shù)據(jù)接口是面向服務(wù)應(yīng)用模塊(WCF)中功能函數(shù),其中WCFl包含4個功能函數(shù):普通數(shù)據(jù)處理函數(shù)(G e t D a t a )用于接收普通數(shù)據(jù),結(jié)構(gòu)體鏈表數(shù)據(jù)處理函數(shù)(GetDataUsingDataContract)用于接收結(jié)構(gòu)體數(shù)據(jù)。打開數(shù)據(jù)庫函數(shù)(openSql)和關(guān)閉數(shù)據(jù)庫函數(shù)(CloseSql) JCF2包含3個功能函數(shù)一個接口函數(shù):普通數(shù)據(jù)處理函數(shù)(GetData)用于接收普通的數(shù)據(jù),注冊監(jiān)聽函數(shù)(ResgiterListenter)和反注冊監(jiān)聽函數(shù)(UnResgisterLister)用于Web客戶端向WCF2注冊,注冊后的Web客戶端可以接收WCF2發(fā)布的數(shù)據(jù)?;卣{(diào)接口函數(shù)(ITesCallback)用于創(chuàng)建虛函數(shù)(Refresh),Web客戶端通過實例化Refresh函數(shù)實現(xiàn)客戶端刷新效果。
[0014]WCFl與MFC數(shù)據(jù)采集模塊建立的結(jié)構(gòu)體鏈表接口一致,其通過gSoap編譯工具中WSDL(預(yù)處理程序)生成C/C++風(fēng)格的頭文件,再根據(jù)頭文件自動生成調(diào)用遠程SOAP服務(wù)客戶端代碼(稱為存根:Stub)和提供SOAP服務(wù)的框架代碼(稱為框架:Skeleton),結(jié)構(gòu)體鏈表存放的數(shù)據(jù)通過調(diào)用WCFl函數(shù)傳遞,這個函數(shù)就是MFC數(shù)據(jù)采集程序與WCFl的接口。通信中采用的綁定協(xié)議為basicHttpbinding,basicHttpbinding采用Http/Https協(xié)議,主要用于與舊的Web服務(wù)協(xié)作。其采用的通信模型為InstanceContextMode.Single模式。InstanceContextMode.Single實例行為類似于單件設(shè)計模式,所有客戶端共享一個服務(wù)實例,這個服務(wù)實例是一個全局變量,使各模塊調(diào)用WCFl函數(shù)變量成為最新數(shù)據(jù)。
[0015]但basicHttpbinding綁定協(xié)議不支持雙工通信,為了支持雙工通信,本發(fā)明又設(shè)計了WCF2程序,用于處理需要推送到網(wǎng)站服務(wù)器的數(shù)據(jù),WCF2作為服務(wù)分別與WCFl和網(wǎng)站服務(wù)器模塊建立通信,WCFl是WCF2的宿主,通過調(diào)用WCF2的函數(shù)傳遞實時數(shù)據(jù)。WCFl和WCF2可以分布式架構(gòu),來緩解計算機壓力。WCF2主要處理回調(diào)機制,接收數(shù)據(jù)后將數(shù)據(jù)推送給向它訂閱的網(wǎng)站服務(wù)器模塊。WCF2的回調(diào)操作即由WCF2調(diào)用網(wǎng)站服務(wù)模塊的方法?;卣{(diào)操作只有具有雙向通信能力的綁定協(xié)議才可以使用回調(diào),本方法中使用netTcpbinding綁定協(xié)議,通過設(shè)定ServiceContract特性中的Cal IBackContract屬性并創(chuàng)建回調(diào)契約I TestCal Iback實例化回調(diào)對象再通過它創(chuàng)建一個上下文對象InstanceContext,然后用代理把這個回調(diào)引用傳回WCF2。
[0016]3、網(wǎng)站服務(wù)器模塊
網(wǎng)站服務(wù)器模塊包含Web服務(wù)器端和Web客戶端,采用MVC(Model-View-Control)架構(gòu),其中Mode I和Contro I主要用于Web服務(wù)器端,View主要用于Web客戶端。網(wǎng)站服務(wù)器模塊有兩種通信模式:將WCF2信息推送到Web客戶端顯示和將Web客戶端數(shù)據(jù)回傳到MFC數(shù)據(jù)采集模塊。
[0017]網(wǎng)站服務(wù)器模塊讓W(xué)eb客戶端和Web服務(wù)器端可以實時互相通知消息及調(diào)用方法,還負責(zé)將數(shù)據(jù)推送到Web客戶端頁面中,同時瀏覽器也有很好的兼容性。
[0018]網(wǎng)站服務(wù)器模塊中安裝ASP.NET Signalr類庫包并注冊了一個HUB(HUB是Signalr類庫通信的一種模式),它能與所有Web客戶端共享發(fā)送到Web服務(wù)器上的信息,同時Web月艮務(wù)端可以調(diào)用客戶端腳本??蛻舳撕头?wù)器端使用JOSN格式(JavaScript ObjectNotat1n,是一種輕量級的數(shù)據(jù)交換格式)來交換數(shù)據(jù),在服務(wù)器端聲明的HUB,.Net依賴Proxy生成代理類,Proxy內(nèi)部則是將JSON轉(zhuǎn)換成對象,客戶端可以看到對象。
[0019]Web客戶端調(diào)用網(wǎng)站服務(wù)器模塊函數(shù)與WCFl端通信,網(wǎng)站服務(wù)器模塊作為WCFl的宿主,可以直接調(diào)用WCFl的函數(shù),其通過功能函數(shù)形成的指令和優(yōu)化的數(shù)據(jù)反饋給WCFl,由WCFl通知應(yīng)用程序?qū)?shù)據(jù)回傳到終端設(shè)備內(nèi)。
[0020]WCFl不能反向調(diào)用MFC采集數(shù)據(jù)模塊處理事務(wù),WCFl向MFC采集數(shù)據(jù)模塊發(fā)送數(shù)據(jù)需采用消息隊列(MSMQ)來解決這個問題,WCFl將網(wǎng)站服務(wù)器的業(yè)務(wù)請求轉(zhuǎn)換為指定的消息格式存放在消息隊列中,MFC采集程序模塊采用線程架構(gòu)將消息隊列信息取走,通過Socket、串口或CAN回寫到終端設(shè)備中。
[0021]本發(fā)明的有益效果如下:
1、跨平臺性好:WCF是Microsoft為構(gòu)建面向服務(wù)的應(yīng)用提供的分布式通信編程框架,是.NET Framework的重要組成部分。使用該框架,開發(fā)人員可以構(gòu)建跨平臺、安全、可靠和支持事務(wù)處理的企業(yè)級互聯(lián)應(yīng)用解決方案。
[0022]2、性能好:基于完成端口模型的MFC應(yīng)用程序通信。完成端口設(shè)計模型只適用于Windows NT和Windows 2000操作系統(tǒng),其設(shè)計的復(fù)雜性,在應(yīng)用程序需要同時管理數(shù)百乃至上千個套接字的時候,并希望隨著系統(tǒng)內(nèi)安裝的CPU數(shù)量的增多,應(yīng)用程序的性能也可以線性提升。但其接口通信和跨平臺性差,通過本方案可以將其與Web客戶端連接。
[0023]3、模塊化好:本方案提供了一整套MFC程序采集的數(shù)據(jù)到Web
客戶端顯示的解決方案。整套方案由三大模塊組成,每個模塊都可以拆解,與其他方案通過通用接口通信。
[0024]4、顯示效果好:基于5丨8肪]^+¥0?+加¥35。1^口1:通信技術(shù)及開發(fā)思路可以將10:^采集的實時數(shù)據(jù)及時顯示到網(wǎng)頁端,彌補網(wǎng)頁端數(shù)據(jù)即時顯示交互性差的問題。
[0025]5、分布式架構(gòu)好:本方案的各模塊均可以架構(gòu)在不同的計算機,由面向服務(wù)應(yīng)用模塊(wen負責(zé)通信。
【附圖說明】
[0026]圖1基于WCF的物聯(lián)網(wǎng)通信系統(tǒng)
圖1表示本解決方案各模塊的組成方式及連接示意。終端設(shè)備或其他基于WINDOWS平臺的應(yīng)用程序通過一定方式與MFC數(shù)據(jù)采集模塊建立通信,MFC數(shù)據(jù)采集模塊再通過通信接口與面向服務(wù)應(yīng)用模塊(WCF)建立通信。最后面向服務(wù)應(yīng)用模塊(WCF)程序再根據(jù)通用接口函數(shù)以及相關(guān)回調(diào)機制與網(wǎng)站服務(wù)模塊建立通信。
[0027]圖2基于WCF編程模型的通信機制
圖2表示了各模塊的具體通信協(xié)議和通信方式。本解決方案中提出了遠程終端與MFC數(shù)據(jù)采集模塊基于TCP/IP以及通用協(xié)議進行通信。本地終端也可以通過采用CCP協(xié)議或自定義協(xié)議通信。為實現(xiàn)雙工通信,本方案面向服務(wù)應(yīng)用模塊(WCF)設(shè)計兩個WCF程序來分布通信。MFC采集數(shù)據(jù)模塊作為宿主調(diào)用WCFl方法傳遞數(shù)據(jù),WC