軟件系統(tǒng)之間的接口方式_第1頁
軟件系統(tǒng)之間的接口方式_第2頁
軟件系統(tǒng)之間的接口方式_第3頁
軟件系統(tǒng)之間的接口方式_第4頁
軟件系統(tǒng)之間的接口方式_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、軟件系統(tǒng)之間的接口方式 概述 軟件接口是實現(xiàn)一個系統(tǒng)跟另外系統(tǒng)進行信息交互的橋梁,在不同的系統(tǒng)之間,根據(jù)系統(tǒng)的關(guān)聯(lián)程度的不同存在緊耦合和松耦合兩種:緊耦合要求接口響應(yīng)反響快,消息不能阻塞;松耦合對響應(yīng)反響要求比擬低。在目前應(yīng)用中, Socket 、消息隊列Message Queue、 WebService等都有相應(yīng)的應(yīng)用,但是應(yīng)用中發(fā)現(xiàn)各通訊方式有自己固有的特征,“適合的才是最好的,這是真理。 在接口和系統(tǒng)信息交互的過程中,兩種模式使用得很普遍:同步調(diào)用和異步調(diào)用,同步調(diào)用要求接口發(fā)出請求消息后必須等待效勞端系統(tǒng)的應(yīng)答消息,接口阻塞直至超時;異步調(diào)用那么發(fā)出請求消息后,接口可以從事其它處理,定

2、時輪詢效勞端應(yīng)答消息和消息或事件通知。同步方式簡單,但是很容易造成接口阻塞,造成消息積壓超時。 技術(shù)實現(xiàn) Socket 通訊 Socket 通訊相對來說是很古老的通訊方式,也是最常用的通訊方式。 Socket 通訊有阻塞和非阻塞兩種方式。在同步方式,采用阻塞編程比擬簡單,但是為了防止接口阻塞,我們需要設(shè)置 Socket 超時,因此可以使用 Socket 的 SELECT 模型參考如下例如代碼: ReceLen=0; CurReceLen=0; for(;) iResult=select(0,&fdread,NULL,NULL,&timeout); if(iResult=0) AfxMessag

3、eBox(接收應(yīng)答消息超時!,MB_OK|MB_ICONERROR); closesocket(Socket); return FALSE; CurReceLen = recv(Socket, oBuf+ReceLen, len, NO_FLAG_SET); if(CurReceLen0) & (CurReceLen != SOCKET_ERROR) oBufReceLen+CurReceLen=0; memcpy(char *)&MsgLen,oBuf,sizeof(WORD32); MsgLen=ntohl(MsgLen); if(ReceLen+CurReceLen=MsgLen) Re

4、ceLen+=CurReceLen; break; ReceLen+=CurReceLen; 在異步方式下,采用非阻塞方式實現(xiàn)比擬方便,在非阻塞方式下可使用WSAAsyncSelect模型和 WSAEventSelect 模型: WSAAsyncSelect模型基于消息, WSAEventSelect 模型基于事件,下面的例如代碼設(shè)置了 Socket 進行讀寫和關(guān)閉操作的消息: status = WSAAsyncSelect(TempSocket, hWnd, WSA_READ, FD_READ | FD_CLOSE | FD_WRITE); if (status = SOCKET_ERROR

5、) WriteLogFile(Set stream socket module fail!IP(%s),Port(%d) and error(%d),GetIPAddr(PeerMap+node)-IPAddr),(PeerMap+node)-PeerPortNo,WSAGetLastError(); CloseSocket(TempSocket,_LINE_,_FILE_); return FALSE; 無論使用阻塞方式或非阻塞方式編程,需要重點考慮的一個問題:粘包現(xiàn)象,即應(yīng)用發(fā)送兩個或以上的數(shù)據(jù)包,在 Socket 通訊層將數(shù)據(jù)包合并成一個發(fā)送出去,因此接收端收到數(shù)據(jù)包以后需要對數(shù)據(jù)包根據(jù)

6、應(yīng)用定義的長度進行拆分,否那么導(dǎo)致應(yīng)用層丟包。應(yīng)用方式可以由用戶封轉(zhuǎn)成DLL供使用方使用. 消息隊列(Message Queue)利用 MSMQMicrosoft Message Queue,應(yīng)用程序開發(fā)人員可以通過發(fā)送和接收消息方便地與應(yīng)用程序進行快速可靠的通信。消息處理為您提供了有保障的消息傳遞和執(zhí)行許多業(yè)務(wù)處理的可靠的防故障方法。 MSMQ與XML Web Services和.Net Remoting一樣,是一種分布式開發(fā)技術(shù)。但是在使用XML Web Services或.Net Remoting組件時,Client端需要和Server端實時交換信息,Server需要保持聯(lián)機。MSMQ那

7、么可以在Server離線的情況下工作,將Message臨時保存在Client端的消息隊列中,以后聯(lián)機時再發(fā)送到Server端處理。 顯然,MSMQ不適合于Client需要Server端及時響應(yīng)的這種情況,MSMQ以異步的方式和Server端交互,不用擔(dān)憂等待Server端的長時間處理過程。 雖然XML Web Services和.Net Remoting都提供了OneWay屬性來處理異步調(diào)用,用來解決Server端長方法調(diào)用長時間阻礙Client端。但是不能解決大量Client負(fù)載的問題,此時Server接受的請求快于處理請求。 一般情況下,OneWay屬性不用于專門的消息效勞中。 1. 根本

8、術(shù)語和概念 Basic terms and concepts “消息是在兩臺計算機間傳送的數(shù)據(jù)單位。消息可以非常簡單,例如只包含文本字符串;也可以更復(fù)雜,可能包含嵌入對象。 消息被發(fā)送到隊列中?!跋㈥犃惺窃谙⒌膫鬏斶^程中保存消息的容器。消息隊列管理器在將消息從它的源中繼到它的目標(biāo)時充當(dāng)中間人。隊列的主要目的是提供路由并保證消息的傳遞;如果發(fā)送消息時接收者不可用,消息隊列會保存消息,直到可以成功地傳遞它。 “消息隊列是 Microsoft 的消息處理技術(shù),它在任何安裝了 Microsoft Windows 的計算機組合中,為任何應(yīng)用程序提供消息處理和消息隊列功能,無論這些計算機是否在同一個網(wǎng)

9、絡(luò)上或者是否同時聯(lián)機。 “消息隊列網(wǎng)絡(luò)是能夠相互間來回發(fā)送消息的任何一組計算機。網(wǎng)絡(luò)中的不同計算機在確保消息順利處理的過程中扮演不同的角色。它們中有些提供路由信息以確定如何發(fā)送消息,有些保存整個網(wǎng)絡(luò)的重要信息,而有些只是發(fā)送和接收消息。 “消息隊列安裝期間,管理員確定哪些效勞器可以互相通信,并設(shè)置特定效勞器的特殊角色。構(gòu)成此“消息隊列網(wǎng)絡(luò)的計算機稱為“站點,它們之間通過“站點鏈接相互連接。每個站點鏈接都有一個關(guān)聯(lián)的“開銷,它由管理員確定,指示了經(jīng)過此站點鏈接傳遞消息的頻率。 “消息隊列管理員還在網(wǎng)絡(luò)中設(shè)置一臺或多臺作為“路由效勞器的計算機。路由效勞器查看各站點鏈接的開銷,確定經(jīng)過多個站點傳遞消

10、息的最快和最有效的方法,以此決定如何傳遞消息。 2. 隊列類型 Queue Type 有兩種主要的隊列類型:由您或網(wǎng)絡(luò)中的其他用戶創(chuàng)立的隊列和系統(tǒng)隊列。 用戶創(chuàng)立的隊列可能是以下任何一種隊列: “公共隊列在整個“消息隊列網(wǎng)絡(luò)中復(fù)制,并且有可能由網(wǎng)絡(luò)連接的所有站點訪問。 “專用隊列不在整個網(wǎng)絡(luò)中發(fā)布。相反,它們僅在所駐留的本地計算機上可用。專用隊列只能由知道隊列的完整路徑名或標(biāo)簽的應(yīng)用程序訪問。 “管理隊列包含確認(rèn)在給定“消息隊列網(wǎng)絡(luò)中發(fā)送的消息回執(zhí)的消息。指定希望MessageQueue 組件使用的管理隊列如果有的話。 “響應(yīng)隊列包含目標(biāo)應(yīng)用程序接收到消息時返回給發(fā)送應(yīng)用程序的響應(yīng)消息。指定希

11、望 MessageQueue 組件使用的響應(yīng)隊列如果有的話。 系統(tǒng)生成的隊列一般分為以下幾類: “日記隊列可選地存儲發(fā)送消息的副本和從隊列中移除的消息副本。每個“消息隊列客戶端上的單個日記隊列存儲從該計算機發(fā)送的消息副本。在效勞器上為每個隊列創(chuàng)立了一個單獨的日記隊列。此日記跟蹤從該隊列中移除的消息。 “死信隊列存儲無法傳遞或已過期的消息的副本。如果過期或無法傳遞的消息是事務(wù)性消息,那么被存儲在一種特殊的死信隊列中,稱為“事務(wù)性死信隊列。死信存儲在過期消息所在的計算機上。有關(guān)超時期限和過期消息的更多信息,請參見默認(rèn)消息屬性。 “報告隊列包含指示消息到達(dá)目標(biāo)所經(jīng)過的路由的消息,還可以包含測試消息。

12、每臺計算機上只能有一個報告隊列。 “專用系統(tǒng)隊列是一系列存儲系統(tǒng)執(zhí)行消息處理操作所需的管理和通知消息的專用隊列。 在應(yīng)用程序中進行的大多數(shù)工作都涉及訪問公共隊列及其消息。但是,根據(jù)應(yīng)用程序的日記記錄、確認(rèn)和其他特殊處理需要,在日常操作中很可能要使用幾種不同的系統(tǒng)隊列。 3. 同步和異步通信 Synchronous VS. Asynchronous Communication 隊列通信天生就是異步的,因為將消息發(fā)送到隊列和從隊列中接收消息是在不同的進程中完成的。另外,可以異步執(zhí)行接收操作,因為要接收消息的人可以對任何給定的隊列調(diào)用 BeginReceive 方法,然后立即繼續(xù)其他任務(wù)而不用等待答

13、復(fù)。這與人們所了解的“同步通信截然不同。 在同步通信中,請求的發(fā)送方在執(zhí)行其他任務(wù)前,必須等待來自預(yù)定接收方的響應(yīng)。發(fā)送方等待的時間完全取決于接收方處理請求和發(fā)送響應(yīng)所用的時間。 4. 同消息隊列交互 Interacting with Message Queues 消息處理和消息為基于效勞器的應(yīng)用程序組件之間的進程間通信提供了強大靈活的機制。同組件間的直接調(diào)用相比,它們具有假設(shè)干優(yōu)點,其中包括: 穩(wěn)定性 組件失敗對消息的影響程度遠(yuǎn)遠(yuǎn)小于組件間的直接調(diào)用,因為消息存儲在隊列中并一直留在那里,直到被適當(dāng)?shù)靥幚怼O⑻幚硗聞?wù)處理相似,因為消息處理是有保證的。 消息優(yōu)先級 更緊急或更重要的消息可在相

14、對不重要的消息之前接收,因此可以為關(guān)鍵的應(yīng)用程序保證足夠的響應(yīng)時間。 脫機能力 發(fā)送消息時,它們可被發(fā)送到臨時隊列中并一直留在那里,直到被成功地傳遞。當(dāng)因任何原因?qū)λ桕犃械脑L問不可用時,用戶可以繼續(xù)執(zhí)行操作。同時,其他操作可以繼續(xù)進行,如同消息已經(jīng)得到了處理一樣,這是因為網(wǎng)絡(luò)連接恢復(fù)時消息傳遞是有保證的。 事務(wù)性消息處理 將多個相關(guān)消息耦合為單個事務(wù),確保消息按順序傳遞、只傳遞一次并且可以從它們的目標(biāo)隊列中被成功地檢索。如果出現(xiàn)任何錯誤,將取消整個事務(wù)。 平安性 MessageQueue 組件基于的消息隊列技術(shù)使用 Windows 平安來保護訪問控制,提供審核,并對組件發(fā)送和接收的消息進行加

15、密和驗證。 5. 在 .Net 環(huán)境下編寫簡單的 Message Queue 程序 1先安裝Message Queuing Services 通過Control Panel,“Add/Remove Programs “Add/Remove Windows Components步驟安裝MSMQ。 MSMQ可以安裝為工作組模式或域模式。如果安裝程序沒有找到一臺運行提供目錄效勞的消息隊列的效勞器,那么只可以安裝為工作組模式,此計算機上的“消息隊列只支持創(chuàng)立專用隊列和創(chuàng)立與其他運行“消息隊列的計算機的直接連接。 2配置MSMQ 翻開Computer Management Message Queuing

16、,在Private Queues下創(chuàng)立MSMQDemo隊列 3編寫代碼簡單演示MSMQ對象 MessageQueue 類是“消息隊列周圍的包裝。MessageQueue 類提供對“消息隊列隊列的引用??梢栽?MessageQueue 構(gòu)造函數(shù)中指定一個連接到現(xiàn)有資源的路徑,或者可在效勞器上創(chuàng)立新隊列。在調(diào)用 Send、Peek 或 Receive 之前,必須將 MessageQueue 類的新實例與某個現(xiàn)有隊列關(guān)聯(lián)。 MessageQueue 支持兩種類型的消息檢索:同步和異步。同步的 Peek 和 Receive 方法使進程線程用指定的間隔時間等待新消息到達(dá)隊列。異步的 BeginPeek

17、和 BeginReceive 方法允許主應(yīng)用程序任務(wù)在消息到達(dá)隊列之前,在單獨的線程中繼續(xù)執(zhí)行。這些方法通過使用回調(diào)對象和狀態(tài)對象進行工作,以便在線程之間進行信息通訊。 / Send Message private void btnSendMessage_Click(object sender, System.EventArgs e) / Open queue queue = new (.Private$MSMQDemo); / Create message message = new (); message.Body = (); message.Formatter = new (new Ty

18、pe typeof(string); / Put message into queue queue.Send(message); / Receive Message private void btnReceiveMessage_Click(object sender, System.EventArgs e) / Open queue queue = new (.Private$MSMQDemo); / Receive message, 同步的Receive方法阻塞當(dāng)前執(zhí)行線程,直到一個message可以得到 message = queue.Receive(); message.Formatter = new (new Type typeof(string); txtReceiveMessage.Text = (); Demo界面: WebService SOAP 作為一種協(xié)議,同效勞端 WebService 進行通訊。微軟提供了 SOAP 協(xié)議的 SDK ,我使用的是微軟的 SOAP Toolkit3.0 ,這是基于 COM 的一套組件,因此具有 COM 的特征,在調(diào)用參數(shù)的處理, windows 和 unix 順序恰好相反,下面的代碼實現(xiàn)了調(diào)用一個 Web Servi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論