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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quá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)反應(yīng)要求比較低。在目前應(yīng)用中,Socket、消息隊列(MessageQueue、WebService等都有相應(yīng)的應(yīng)用,但是應(yīng)用中發(fā)現(xiàn)各通訊方式有 自己固有的特征,“適合的才是最好的”,這是真理。在接口和系統(tǒng)信息交互的過程中,兩種模式使用得很普遍:同步調(diào)用和異步調(diào)用, 同步調(diào)用要求接口發(fā)出請求消息后必須等待服務(wù)端系統(tǒng)的應(yīng)答消息,接口阻塞直至超 時;異步調(diào)用則發(fā)出請求消息后,接口可以從

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

3、)AfxMessageBox(接收應(yīng)答消息超時!",MB_OK|MBCONERROR); closesocket(Socket);return FALSE;CurReceLen = recv(Socket, oBuf+ReceLe n, le n, NO _FLAG_SET);if(CurReceLe n>0) && (CurReceLen != SOCKET_ERROR)oBufReceLe n+CurReceLe n='0'memcpy(char *)&MsgLe n, oBuf,sizeof(WORD32);MsgLe n=n to

4、hl(MsgLe n);if(ReceLe n+CurReceLe n=MsgLe n)ReceLe n+=CurReceLe n;break;ReceLe n+=CurReceLe n;在異步方式下,采用非阻塞方式實現(xiàn)比較方便,在非阻塞方式下可使用WSAAsyncSele(模型和 WSAEventSelect模型:WSAAsyncSelec模型基于消息,WSAEventSelec模型基于事件,下面的示例代碼設(shè)置了 Socket進行讀寫和關(guān)閉操作 的消息:status = WSAAsy ncSelect(TempSockehWnd,WSA_READD_READ FD_CLOS|EFD_WRIT

5、E);if (status = SOCKET_ERROR)WriteLogFile("Set stream socket module fail!IP(%s),Port(%d) and error(%d)",GetlPAddr(PeerM ap+node)->IPAddr),(PeerM ap+n ode)->PeerPortNo,WS AGetLastError();CloseSocket(TempSocket,_LINE_,_FILE_;return FALSE;無論使用阻塞方式或非阻塞方式編程,需要重點考慮的一個問題:粘包現(xiàn)象,即 應(yīng)用發(fā)送兩個或以上的數(shù)據(jù)

6、包,在Socket通訊層將數(shù)據(jù)包合并成一個發(fā)送出去,因 此接收端收到數(shù)據(jù)包以后需要對數(shù)據(jù)包根據(jù)應(yīng)用定義的長度進行拆分,否則導(dǎo)致應(yīng)用 層丟包。應(yīng)用方式可以由用戶封轉(zhuǎn)成DLL供使用方使用.?消息隊列(Message Queue)利用MSMQMicrosoft MessageOueu©,應(yīng)用程序開發(fā)人員可以通過發(fā)送和接收 消息方便地與應(yīng)用程序進行快速可靠的通信。消息處理為您提供了有保障的消息傳遞 和執(zhí)行許多業(yè)務(wù)處理的可靠的防故障方法。MSM與XML Web Services和.Net Remoting樣,是一種分布式開發(fā)技術(shù)。但是在使用XML Web Service或.Net Remoti

7、ng組件時,Client端需要和Server端實時交換信息,Server需要保持聯(lián)機。 MSM則可以在Server離線的情況下工作,將Message臨時保存在Client端的消息隊 列中,以后聯(lián)機時再發(fā)送到Server端處理。顯然,MSM不適合于Client需要Server 端及時響應(yīng)的這種情況,MSM以異步的方式和Server端交互,不用擔心等待Server 端的長時間處理過程。雖然XML Web Services和.Net Remoting都提供了OneWay 屬性來處理異步調(diào)用,用來解決Server端長方法調(diào)用長時間阻礙Client端。但是不 能解決大量Client負載的問題,此時Ser

8、ver接受的請求快于處理請求。一般情況下, On eWay屬性不用于專門的消息服務(wù)中。1. 基本術(shù)語和概念(Basic terms and concepts )“消息”是在兩臺計算機間傳送的數(shù)據(jù)單位。消息可以非常簡單,例如只包含文本字 符串;也可以更復(fù)雜,可能包含嵌入對象。消息被發(fā)送到隊列中。“消息隊列”是在 消息的傳輸過程中保存消息的容器。消息隊列管理器在將消息從它的源中繼到它的目 標時充當中間人。隊列的主要目的是提供路由并保證消息的傳遞;如果發(fā)送消息時接 收者不可用,消息隊列會保留消息,直到可以成功地傳遞它?!跋㈥犃小笔荕icrosoft 的消息處理技術(shù),它在任何安裝了 Microsof

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

10、率“消息隊列”管理員還在網(wǎng)絡(luò)中設(shè)置一臺或多臺作為“路由服務(wù)器”的計算機。路由 服務(wù)器查看各站點鏈接的開銷,確定經(jīng)過多個站點傳遞消息的最快和最有效的方法, 以此決定如何傳遞消息。2. 隊列類型(Queue Type)有兩種主要的隊列類型:由您或網(wǎng)絡(luò)中的其他用戶創(chuàng)建的隊列和系統(tǒng)隊列。用戶創(chuàng)建 的隊列可能是以下任何一種隊列:“公共隊列”在整個“消息隊列”網(wǎng)絡(luò)中復(fù)制,并 且有可能由網(wǎng)絡(luò)連接的所有站點訪問。“專用隊列”不在整個網(wǎng)絡(luò)中發(fā)布。相反,它 們僅在所駐留的本地計算機上可用。專用隊列只能由知道隊列的完整路徑名或標簽的 應(yīng)用程序訪問?!肮芾黻犃小卑_認在給定“消息隊列”網(wǎng)絡(luò)中發(fā)送的消息回執(zhí)的 消息。

11、指定希望MessageQueu組件使用的管理隊列(如果有的話)?!绊憫?yīng)隊列” 包含目標應(yīng)用程序接收到消息時返回給發(fā)送應(yīng)用程序的響應(yīng)消息。指定希望 MessageQueu組件使用的響應(yīng)隊列(如果有的話)。系統(tǒng)生成的隊列一般分為以下 幾類:“日記隊列”可選地存儲發(fā)送消息的副本和從隊列中移除的消息副本。每個“消 息隊列”客戶端上的單個日記隊列存儲從該計算機發(fā)送的消息副本。在服務(wù)器上為每 個隊列創(chuàng)建了一個單獨的日記隊列。此日記跟蹤從該隊列中移除的消息?!八佬抨犃小?存儲無法傳遞或已過期的消息的副本。如果過期或無法傳遞的消息是事務(wù)性消息,則 被存儲在一種特殊的死信隊列中,稱為“事務(wù)性死信隊列”。死信存儲

12、在過期消息所 在的計算機上。有關(guān)超時期限和過期消息的更多信息,請參見默認消息屬性?!皥蟾?隊列”包含指示消息到達目標所經(jīng)過的路由的消息,還可以包含測試消息。每臺計算 機上只能有一個報告隊列?!皩S孟到y(tǒng)隊列”是一系列存儲系統(tǒng)執(zhí)行消息處理操作所 需的管理和通知消息的專用隊列。在應(yīng)用程序中進行的大多數(shù)工作都涉及訪問公共隊 列及其消息。但是,根據(jù)應(yīng)用程序的日記記錄、確認和其他特殊處理需要,在日常操 作中很可能要使用幾種不同的系統(tǒng)隊列。3. 同步和異步通信(Synchronous VS. Asynchronous Communication )隊列通信天生就是異步的,因為將消息發(fā)送到隊列和從隊列中接收消

13、息是在不同的進 程中完成的。另外,可以異步執(zhí)行接收操作,因為要接收消息的人可以對任何給定的 隊列調(diào)用Beg in Receive方法,然后立即繼續(xù)其他任務(wù)而不用等待答復(fù)。這與人們所 了解的“同步通信”截然不同。在同步通信中,請求的發(fā)送方在執(zhí)行其他任務(wù)前,必 須等待來自預(yù)定接收方的響應(yīng)。發(fā)送方等待的時間完全取決于接收方處理請求和發(fā)送 響應(yīng)所用的時間。4. 同消息隊列交互(In teract ing with Message Queues )消息處理和消息為基于服務(wù)器的應(yīng)用程序組件之間的進程間通信提供了強大靈活的機 制。同組件間的直接調(diào)用相比,它們具有若干優(yōu)點,其中包括:?穩(wěn)定性 一組件失敗對消息

14、的影響程度遠遠小于組件間的直接調(diào)用,因為消息存儲 在隊列中并一直留在那里,直到被適當?shù)靥幚怼O⑻幚硗聞?wù)處理相似,因為消息 處理是有保證的。?消息優(yōu)先級一更緊急或更重要的消息可在相對不重要的消息之 前接收,因此可以為關(guān)鍵的應(yīng)用程序保證足夠的響應(yīng)時間。?脫機能力一發(fā)送消息 時,它們可被發(fā)送到臨時隊列中并一直留在那里,直到被成功地傳遞。當因任何原因 對所需隊列的訪問不可用時,用戶可以繼續(xù)執(zhí)行操作。同時,其他操作可以繼續(xù)進行, 如同消息已經(jīng)得到了處理一樣,這是因為網(wǎng)絡(luò)連接恢復(fù)時消息傳遞是有保證的。?事 務(wù)性消息處理一將多個相關(guān)消息耦合為單個事務(wù),確保消息按順序傳遞、只傳遞一 次并且可以從它們的目標

15、隊列中被成功地檢索。如果出現(xiàn)任何錯誤,將取消整個事務(wù)。?安全性一MessageQueu組件基于的消息隊列技術(shù)使用Win dows安全來保護訪問 控制,提供審核,并對組件發(fā)送和接收的消息進行加密和驗證。5. 在.Net環(huán)境下編寫簡單的Message Queue程序(1) 先安裝 Message Queuing Services通過 Con trol Pan el, “Add/RemovProgram§ “Add/Remo vWin dowsComp onen”步驟安裝MSMQ MSM可以安裝為工作組模式或域模式。如果安裝程序沒有找到一臺 運行提供目錄服務(wù)的消息隊列的服務(wù)器,貝U只可以安

16、裝為工作組模式,此計算機上的“消息隊列”只支持創(chuàng)建專用隊列和創(chuàng)建與其他運行“消息隊列”的計算機的直接連 接。(2) 配置 MSMQ打開 ComputerManagemen MessageQueuing,在 Private Queues下創(chuàng)建 MSMQDemo隊列(3) 編寫代碼簡單演示MSM對象MessageQueu類是“消息隊列”周圍的包裝。MessageQueu類提供對“消息隊列” 隊列的引用。可以在MessageQueu構(gòu)造函數(shù)中指定一個連接到現(xiàn)有資源的路徑,或 者可在服務(wù)器上創(chuàng)建新隊列。在調(diào)用Send、Peek或Receive之前,必須將MessageQueu類的新實例與某個現(xiàn)有隊列關(guān)

17、聯(lián)。MessageQueue支持兩種類型的消息 檢索:同步和異步。同步的Peek和Receive方法使進程線程用指定的間隔時間等待 新消息到達隊列。異步的Beg in Peek和Begi nReceive方法允許主應(yīng)用程序任務(wù)在消 息到達隊列之前,在單獨的線程中繼續(xù)執(zhí)行。這些方法通過使用回調(diào)對象和狀態(tài)對象 進行工作,以便在線程之間進行信息通訊。/ Send Messageprivate void btnSen dMessage_Click(object sen der, System.Eve ntArgs e)/ Open queueSystem.Messag in g.MessageQueu

18、e queue = newSystem.Messagi ng.MessageQueue(".Private$MSMQDemo");/ Create messageSystem.Messagi ng.Message message = new System.Messagi ng.Message();message.Body = txtMessage.Text.Trim();message.Formatter = new System.Messagi ng.XmlMessageFormatter( new Type typeof(stri ng);/ Put message i

19、nto queuequeue.Se nd(message);/ Receive Messageprivate void btn ReceiveMessage_Click(object sen der, System.Eve ntArgs e)/ Open queueSystem.Messag in g.MessageQueue queue = newSystem.Messagi ng.MessageQueue(".Private$MSMQDemo");/ Receive message,同步的Receive方法阻塞當前執(zhí)行線程,直到一個messages以得到System.M

20、essagi ng.Message message = queue.Receive();message.Formatter = new System.Messagi ng.XmlMessageFormatter( new Type typeof(stri ng);txtReceiveMessage.Text = message.Body.ToStri ng();Dem界面:? WebServiceSOAP乍為一種協(xié)議,同服務(wù)端WebService進行通訊。微軟提供了 SOAP協(xié)議的SDK,我使用的是微軟的SOAFToolkit3.0 ,這是基于COM的一套組件,因此具有COM 的特征,在調(diào)用參數(shù)的處理,windows和unix順序恰好相反,下面的代碼實現(xiàn)了調(diào) 用一個 Web Service :if(!m_bFlatTy

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論