欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

.NET中如何為點對點消息隊列設計托管接口

這篇文章主要介紹.NET中如何為點對點消息隊列設計托管接口,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯-專業(yè)網站定制、快速模板網站建設、高性價比沁縣網站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式沁縣網站制作公司更省心,省錢,快速模板網站建設找我們,業(yè)務覆蓋沁縣地區(qū)。費用合理售后完善,十載實體公司更值得信賴。

為點對點消息隊列設計托管接口

在為任何本機 API 集設計托管接口之前,首先需要查看它是否已經實現了。對于點對點消息隊列,沒有現成的庫且搜索結果只提供有關 API 描述的少量信息。由于之前很少涉足該領域,因此描述針對點對點消息 API 的托管包裝的設計和實現看起來是值得的。

當開發(fā)人員將一組相關 Win32 API 包裝到一個或多個托管類中時,會使用一個通用模式;大多數 Windows API 都操作一個句柄(并將其視為它們的***個參數)。從面向對象的角度看,可將該句柄看作對象標識。您可以將與句柄相關的所有方法分組到公開相同方法的類中。除不需要該句柄之外,這些方法擁有與原始方法相同的簽名。該句柄在對象創(chuàng)建時獲取,在對象處置/析構時關閉。在 .NET Compact Framework 中,句柄由 IntPtr 類型表示。因此,根據前面的信息,您可以按以下方式創(chuàng)建包裝特定本機 API 的類。
+ constructor(String name, MsgQueueOptions opt)
+ ReadMsgQueue(byte[] buf, Int32 bufSize, Int32 numRead, Int32 timeout, Int32 flags)
+ WriteMsgQueue(byte[] buf, Int32 bufSize, Int32 timeout, Int32 flags)
+ GetMsgQueueInfo(MsgQueueInfo info)
+ Close()

上述代碼示例中的五個方法可以形成主接口,但是還要用托管代碼定義 MsgQueueOptions 和任何其他結構(如同在平臺調用中使用的非托管結構所做的那樣)。該接口是一個不錯的開端并為您提供了一個包裝,但它并不是完全面向對象的并且不適用于 .NET Compact Framework 的其他部分,而且它給客戶端帶來了較大的額外負擔(就要編寫的代碼而言)。該接口仍然可以改進。

無論在何處引入方法的重載都應該這樣做,以便簡化客戶端代碼必須處理的方法。例如,如果需要創(chuàng)建一個無名隊列,則客戶端不一定要傳入 NULL — 進一步說,name 參數不應該在構造函數中。如果需要以阻塞方式讀取或寫入對列,而不是將 INFINITE (-1) 作為 timeout 參數進行傳遞,則不一定要傳遞任何內容。應用這些更改將增加類中的方法數量,而且將使它更易于在較簡單的方案中使用,同時不會限制更復雜的情況。

該接口可以進一步改進。注意,需要傳遞字節(jié)數組以及該數祖的大小的方式;傳遞數組大小不是必要的,因為可在任何時間確定給定數組的大小。除非在簽名中顯式需要數組長度(例如,出于性能原因的考慮,因為緩存該大小比每次重新計算它要快),否則可以刪除 bufSize 參數。實際上,可將字節(jié)數組參數 (buf) 與 flags 參數(它指明該信息是否為一個警告信息)一起封裝到它自己的類型/類之中。

另一個使 API 更加面向對象的方法是消除結構 — 這很有意義。例如,您不必設置結構并將其傳遞給構造函數,而是可以將結構元素作為參數與適當的重載內聯(換言之,可以使結構成員變?yōu)橐幌盗袇担Ec返回帶有隊列信息的結構相比,更好的解決方案是將結構字段內聯到類本身上的只讀屬性。

您應該能回想起本文***部分中的兩個事實:與其他許多方法一樣,點對點消息隊列 API 方法返回 BOOL 來指示成功或失敗,而且擴展的錯誤信息需要一個單獨的調用。可以使用兩個非獨占方法來映射該行為(即,返回布爾值以及需要單獨檢索擴展的錯誤信息)。***個方法是使應用程序在發(fā)生錯誤時引發(fā)一個異常,并使該異常帶有擴展的錯誤信息。第二個方法是使應用程序返回包含該方法調用的可能結果(包括成功)的枚舉。作為一個通用原則,開發(fā)的應用程序應該僅在狀況無法恢復時才引發(fā)異常。

在該階段,在 .NET Framework 中查找相似類是很有用的,并且您肯定能在 System.Messaging(在 .NET Compact Framework 版本 2.0 中也可用)中找到 MSMQ 類。您可以采用該類的成員所使用的相同命名約定(例如,將 Read 更改為 Receive,并將 Write 更改為 Send)。注意,MSMQ 類如何提供一個用于清空隊列中消息的 Purge 方法。您可以通過該方法增強自己的類;換言之,雖然本機 API 不提供方法,但這并不意味著您無法通過添加一個方法來向包裝添加值。

由于 OpenMsgQueue 方法返回一個句柄,并且您已將該句柄映射到一個類,因此包裝方法返回包裝類的實例是很有意義的。此外,該方法在執(zhí)行時不需要現有狀態(tài),因此您應該使它成為靜態(tài)的。***,需要將該結構轉化為所需的單個參數:它是只讀隊列還是只寫隊列。

以上是“.NET中如何為點對點消息隊列設計托管接口”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道!

分享標題:.NET中如何為點對點消息隊列設計托管接口
文章轉載:http://www.chinadenli.net/article40/goocho.html

成都網站建設公司_創(chuàng)新互聯,為您提供商城網站網站設計App設計企業(yè)網站制作定制網站網站維護

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

營銷型網站建設