網(wǎng)絡(luò)在線網(wǎng)頁發(fā)短信通知平臺在CMPP3.0協(xié)議中非托管模塊的調(diào)用方法
來源:原創(chuàng) 時間:2018-03-02 瀏覽:0 次隨著移動通信的飛速發(fā)展,市場競爭日益集中于商業(yè)和服務(wù)競爭中,移動增值業(yè)務(wù)已成為國際移動通信領(lǐng)域最受關(guān)注的話題。中國移動增值服務(wù)市場將以每年超過30%的速度增長.?;贑MPP協(xié)議的短信增值業(yè)務(wù)是目前最重要的移動增值業(yè)務(wù).。本文提出了一種基于CMP P3.0協(xié)議的Internet網(wǎng)絡(luò)在線網(wǎng)頁發(fā)短信通知平臺。非托管模塊的調(diào)用方法。CMPP中國移動對等(中國移動點對點到對等)協(xié)議。中國移動互聯(lián)網(wǎng)短消息網(wǎng)關(guān)接口協(xié)議。它是與中國移動通信公司的“夢想網(wǎng)絡(luò)項目”共同創(chuàng)建的。
一套基于短信的移動互聯(lián)網(wǎng)應(yīng)用解決方案?;ヂ?lián)網(wǎng)短信服務(wù)平臺接收信息流的方式如下:移動客戶可以使用手機終端向服務(wù)提供商SP發(fā)送短信請求,在收到短信短信服務(wù)中心的請求后,根據(jù)SMPPU的短消息對等(短消息對等)標(biāo)準(zhǔn),ISMGN因特網(wǎng)短消息網(wǎng)關(guān)(ISMGN)將請求轉(zhuǎn)發(fā)給ISMGN Internet快捷方式。ISMG通過CMP P#en0#中國移動對等協(xié)議向客戶端發(fā)送請求。SP實際上是指客戶端請求的SPN。我們想要建立的短消息平臺。短消息發(fā)送的流程與接收流相反。通過CMP P協(xié)議,構(gòu)建以Internet為媒介的短消息網(wǎng)關(guān)(ISMG)通信信道,完成短消息的收發(fā)操作。
因特網(wǎng)短消息網(wǎng)關(guān)網(wǎng)絡(luò)結(jié)構(gòu)2。NET框架。NET框架作為一種新的開發(fā)平臺,軟件開發(fā)技術(shù).NET已經(jīng)成為主流的軟件開發(fā)技術(shù),是一個支持各種用戶終端的面向網(wǎng)絡(luò)的開發(fā)平臺。它提供了一個統(tǒng)一的命令集來支持各種編程語言,使應(yīng)用程序開發(fā)獨立于語言。您可以選擇多種編程語言,包括C#C、VisualBasicVisualJ#等。
可以使用.NET開發(fā)在手持設(shè)備上運行的小型組件,如跨Web場的ASP.NET應(yīng)用程序那樣大。最重要的概念是,公共語言運行時CLR可以被視為.NET Framework的核心。其任務(wù)是管理和執(zhí)行為.NET Framework編寫的代碼。使用.NET編譯器編譯的代碼總是在運行時的幫助下運行。這樣的代碼稱為托管代碼。運行時為托管代碼提供了多種服務(wù),例如跨語言集成、代碼訪問安全性、對象生存期管理、調(diào)試和分析支持3的代碼。
由公共語言運行時環(huán)境而不是由操作系統(tǒng)執(zhí)行的非托管模塊稱為托管代碼。相比之下,在公共語言運行環(huán)境之外直接執(zhí)行的代碼稱為非托管代碼,用非托管代碼構(gòu)建的程序模塊(稱為非托管模塊4)是實現(xiàn)Internet SMS平臺的關(guān)鍵問題,它是基于CMP P3.0協(xié)議實現(xiàn)短消息平臺與短消息網(wǎng)關(guān)之間通信的關(guān)鍵問題。中國移動通信集團采取動態(tài)鏈接庫的形式。提供面向服務(wù)提供商的開發(fā)接口api.dll,只有正確使用DLL才能保證與SMS網(wǎng)關(guān)的通信。這個DLL是一個不使用COM技術(shù)的API,也就是說,它是一個非托管模塊。
通過托管代碼調(diào)用DLL(非托管模塊)中的函數(shù)需要解決以下兩個問題:如何在DLL(非托管模塊)中引入函數(shù);參數(shù)封送方法。4.1在托管代碼中引入了DLL(非托管模塊)中的函數(shù),為了使托管代碼調(diào)用DLL中的函數(shù),Microsoft.NET框架提供了一種稱為minvokeservices的P/Invoke平臺的技術(shù)。通過對非托管模塊中調(diào)用代碼的P/Invoke CLR支持,它允許使用傳統(tǒng)的CDLL文件和API函數(shù)。P/Invoke提供了豐富的類型轉(zhuǎn)換工具。用于處理傳統(tǒng)的CDLL和CLR的內(nèi)在區(qū)別。
P/P調(diào)用對安全權(quán)限的要求,以確保系統(tǒng)的安全性不受損害。與執(zhí)行未經(jīng)身份驗證的代碼類似,調(diào)用傳統(tǒng)的CDLL也被認(rèn)為是一種高度特權(quán)的操作。因此,P/Invoke引擎將請求UnManagedCode權(quán)限。必須顯式授予使用P/Invoke的組件此權(quán)限。
使用P/Invoke非常簡單,P/Invoke需要從非托管模塊中導(dǎo)出C函數(shù),然后在托管模塊中使用特別的元數(shù)據(jù)指令進行重新聲明。這些指令標(biāo)明DLL的文件名和DLL中入口項的符號名??梢酝ㄟ^使用語言無關(guān)的S y s t e m.R u n t i m e.InteropServices.DllImport偽定制屬性制定使用P/Invoke的方法。必須用DllImport屬性標(biāo)記方法為exter(n外部的),并且使用與外部DLL中的目標(biāo)函數(shù)匹配的方法簽名聲明它們。最后,每一個P/Invoke方法有兩個簽名:顯式簽名是托管代碼調(diào)用時可見的;隱式簽名則是外部DLL函數(shù)預(yù)期的。P/Invoke將根據(jù)默認(rèn)的映射規(guī)則和定制特性,推斷出非托管簽名。DllImport屬性采用多種參數(shù)定制外部方法和簽名如何被導(dǎo)入和解析。如表一所示,DllImport屬性至少需要一個value參數(shù)。表一DllImport屬性參數(shù)下面的代碼顯示用DllImport屬性調(diào)用api.dll中的cmpp30_connect_to_ismg函數(shù)。usingSystem;usingSystem.Runtime.InteropServices;classTest{[DllImport("D:SMSpi.dll",CharSet=CharSet.Ansi,EntryPoint="cmpp30_connect_to_ismg")]publicstaticexternintConnectToISMG(stringhost,System.UInt16port,conn_descconn);publicstaticvoidMain(){intstatus=ConnectToISMG“(211.139.17.75”,7892,conn);}}上面這段代碼顯示了聲明非托管DLL中方法的一些要求。ConnectToISMG()方法被聲明為static,這是P/Invoke方法所要求的,因為在該API中沒有一致的實例概念。接下來,還要注意該方法被標(biāo)記為extern,這是提示編譯器該方法是通過一個從DLL導(dǎo)出的函數(shù)實現(xiàn)的,因此不需要提供方法體。
llImport屬性值的參數(shù)表示方法:SMSAPI.DLL;D的托管代碼的入口參數(shù)可以調(diào)用C O N N E C T O M G我的方法,cmpp30_connect_to_ismg P I D的方法映射到L L前者是明確的簽名在P/Invoke方法,后者是隱式簽名;字符集參數(shù)設(shè)置的字符或字符串?dāng)?shù)據(jù)的編碼,如果DLL功能不以任何方式處理文本,你可以忽略字符DllImport屬性。如果沒有顯式地設(shè)置CharSet屬性,默認(rèn)值是CharSet.Ansi。在api.dll所有的函數(shù)調(diào)用,字符將被設(shè)置為CharSet. ANSI 4.2指定參數(shù)封送處理模式的框架下構(gòu)建.NET編程語言不同的代碼,可以順利地一起工作,這是很重要的原因是,.NET框架有一個統(tǒng)一的類型系統(tǒng),稱為通用類型系統(tǒng)(commontypesystem,簡稱作為CTS)。但是,.NET框架與非托管代碼不一致的問題,某些類型的。
一致的類型可以直接操作;類型不一致,某些技術(shù)將是類型轉(zhuǎn)換,因此托管和非托管模塊可以協(xié)調(diào)工作。你可以指定一個自定義封送處理的財產(chǎn)轉(zhuǎn)移給非托管函數(shù)或結(jié)構(gòu)領(lǐng)域從非托管函數(shù)和類。通過添加M的場結(jié)構(gòu)或類R S H A1A的財產(chǎn)也必須物理布局?jǐn)?shù)據(jù)字段使用structlayout屬性可以讓用戶控制類或結(jié)構(gòu)也可以控制字符串的成員的默認(rèn)封送處理,并設(shè)置默認(rèn)的封裝尺寸。
下面是一個結(jié)構(gòu)的MFC:structcmpp30icp_submit { dpl_int64_t msg_id;dpl_uint8_t pk_total;dpl_uint8_t pk_number;dpl_uint8_t registered_delivery;dpl_uint8_t msg_level;] publicstringsvc_type;publicsystem.bytefee_utype;SizeConst = 11)[ MarshalAs(unmanagedtype.byvaltstr,SizeConst = 33)] publicstringfee_user;structlayout…}屬性布局參數(shù)LayoutKind。順序,表明在一個cmpp30icp_submit結(jié)構(gòu)創(chuàng)作,現(xiàn)場布置規(guī)則秩序。在dpl_int64_t型非托管模塊,system.int64類型對應(yīng)的CLR,他們代表8字節(jié)有符號整數(shù)的長度;同樣,系統(tǒng)。
字節(jié)型dpl_uint8_t非托管模塊對應(yīng)的CLR,無符號整數(shù)表示一個字節(jié)的長度。兩者都是CLR類型和C類型默認(rèn)值之間的映射。當(dāng)默認(rèn)的映射不能滿足需要,你可以使用S Y S T E M R u n T我e.interopservices基于the.marshalas屬性參數(shù)的參數(shù)(或領(lǐng)域)的方式來覆蓋這些默認(rèn)的映射。
在.NET字符串?dāng)?shù)據(jù)類型是未指定的長度M,R S H L S屬性和unmanagedtype.byvaltstr SizeConst參數(shù),指定字符串類型CLR成指定長度的結(jié)論Microsoft .NET框架已經(jīng)成為軟件工程發(fā)展的一種平臺A.5字符數(shù)組。本文提出了一種基于.net的CMPP3.0協(xié)議的互聯(lián)網(wǎng)短信服務(wù)平臺,并闡述了該平臺的關(guān)鍵技術(shù)與實例。在這個服務(wù)平臺的基礎(chǔ)上,添加特定的業(yè)務(wù)邏輯,可以實現(xiàn)如移動支付等。