您的位置:首页 >  新闻中心 > 短彩信知识
  短彩信知识
 

网络在线网页发短信通知平台在CMPP3.0协议中非托管模块的调用方法

来源:原创    时间:2018-03-02    浏览:0 次

    随着移动通信的飞速发展,市场竞争日益集中于商业和服务竞争中,移动增值业务已成为国际移动通信领域最受关注的话题。中国移动增值服务市场将以每年超过30%的速度增长.。基于CMPP协议的短信增值业务是目前最重要的移动增值业务.。本文提出了一种基于CMP P3.0协议的Internet网络在线网页发短信通知平台。非托管模块的调用方法。CMPP中国移动对等(中国移动点对点到对等)协议。中国移动互联网短消息网关接口协议。它是与中国移动通信公司的“梦想网络项目”共同创建的。

blob.png

     一套基于短信的移动互联网应用解决方案。互联网短信服务平台接收信息流的方式如下:移动客户可以使用手机终端向服务提供商SP发送短信请求,在收到短信短信服务中心的请求后,根据SMPPU的短消息对等(短消息对等)标准,ISMGN因特网短消息网关(ISMGN)将请求转发给ISMGN Internet快捷方式。ISMG通过CMP P#en0#中国移动对等协议向客户端发送请求。SP实际上是指客户端请求的SPN。我们想要建立的短消息平台。短消息发送的流程与接收流相反。通过CMP P协议,构建以Internet为媒介的短消息网关(ISMG)通信信道,完成短消息的收发操作。

     因特网短消息网关网络结构2。NET框架。NET框架作为一种新的开发平台,软件开发技术.NET已经成为主流的软件开发技术,是一个支持各种用户终端的面向网络的开发平台。它提供了一个统一的命令集来支持各种编程语言,使应用程序开发独立于语言。您可以选择多种编程语言,包括C#C、VisualBasicVisualJ#等。

可以使用.NET开发在手持设备上运行的小型组件,如跨Web场的ASP.NET应用程序那样大。最重要的概念是,公共语言运行时CLR可以被视为.NET Framework的核心。其任务是管理和执行为.NET Framework编写的代码。使用.NET编译器编译的代码总是在运行时的帮助下运行。这样的代码称为托管代码。运行时为托管代码提供了多种服务,例如跨语言集成、代码访问安全性、对象生存期管理、调试和分析支持3的代码。

     由公共语言运行时环境而不是由操作系统执行的非托管模块称为托管代码。相比之下,在公共语言运行环境之外直接执行的代码称为非托管代码,用非托管代码构建的程序模块(称为非托管模块4)是实现Internet SMS平台的关键问题,它是基于CMP P3.0协议实现短消息平台与短消息网关之间通信的关键问题。中国移动通信集团采取动态链接库的形式。提供面向服务提供商的开发接口api.dll,只有正确使用DLL才能保证与SMS网关的通信。这个DLL是一个不使用COM技术的API,也就是说,它是一个非托管模块。

     通过托管代码调用DLL(非托管模块)中的函数需要解决以下两个问题:如何在DLL(非托管模块)中引入函数;参数封送方法。4.1在托管代码中引入了DLL(非托管模块)中的函数,为了使托管代码调用DLL中的函数,Microsoft.NET框架提供了一种称为minvokeservices的P/Invoke平台的技术。通过对非托管模块中调用代码的P/Invoke CLR支持,它允许使用传统的CDLL文件和API函数。P/Invoke提供了丰富的类型转换工具。用于处理传统的CDLL和CLR的内在区别。

     P/P调用对安全权限的要求,以确保系统的安全性不受损害。与执行未经身份验证的代码类似,调用传统的CDLL也被认为是一种高度特权的操作。因此,P/Invoke引擎将请求UnManagedCode权限。必须显式授予使用P/Invoke的组件此权限。

     使用P/Invoke非常简单,P/Invoke需要从非托管模块中导出C函数,然后在托管模块中使用特别的元数据指令进行重新声明。这些指令标明DLL的文件名和DLL中入口项的符号名。可以通过使用语言无关的S y s t e m.R u n t i m e.InteropServices.DllImport伪定制属性制定使用P/Invoke的方法。必须用DllImport属性标记方法为exter(n外部的),并且使用与外部DLL中的目标函数匹配的方法签名声明它们。最后,每一个P/Invoke方法有两个签名:显式签名是托管代码调用时可见的;隐式签名则是外部DLL函数预期的。P/Invoke将根据默认的映射规则和定制特性,推断出非托管签名。DllImport属性采用多种参数定制外部方法和签名如何被导入和解析。如表一所示,DllImport属性至少需要一个value参数。表一DllImport属性参数下面的代码显示用DllImport属性调用api.dll中的cmpp30_connect_to_ismg函数。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中没有一致的实例概念。接下来,还要注意该方法被标记为extern,这是提示编译器该方法是通过一个从DLL导出的函数实现的,因此不需要提供方法体。

llImport属性值的参数表示方法:SMSAPI.DLL;D的托管代码的入口参数可以调用C O N N E C T O M G我的方法,cmpp30_connect_to_ismg P I D的方法映射到L L前者是明确的签名在P/Invoke方法,后者是隐式签名;字符集参数设置的字符或字符串数据的编码,如果DLL功能不以任何方式处理文本,你可以忽略字符DllImport属性。如果没有显式地设置CharSet属性,默认值是CharSet.Ansi。在api.dll所有的函数调用,字符将被设置为CharSet. ANSI 4.2指定参数封送处理模式的框架下构建.NET编程语言不同的代码,可以顺利地一起工作,这是很重要的原因是,.NET框架有一个统一的类型系统,称为通用类型系统(commontypesystem,简称作为CTS)。但是,.NET框架与非托管代码不一致的问题,某些类型的。

     一致的类型可以直接操作;类型不一致,某些技术将是类型转换,因此托管和非托管模块可以协调工作。你可以指定一个自定义封送处理的财产转移给非托管函数或结构领域从非托管函数和类。通过添加M的场结构或类R S H A1A的财产也必须物理布局数据字段使用structlayout属性可以让用户控制类或结构也可以控制字符串的成员的默认封送处理,并设置默认的封装尺寸。

    下面是一个结构的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…}属性布局参数LayoutKind。顺序,表明在一个cmpp30icp_submit结构创作,现场布置规则秩序。在dpl_int64_t型非托管模块,system.int64类型对应的CLR,他们代表8字节有符号整数的长度;同样,系统。

     字节型dpl_uint8_t非托管模块对应的CLR,无符号整数表示一个字节的长度。两者都是CLR类型和C类型默认值之间的映射。当默认的映射不能满足需要,你可以使用S Y S T E M R u n T我e.interopservices基于the.marshalas属性参数的参数(或领域)的方式来覆盖这些默认的映射。

     在.NET字符串数据类型是未指定的长度M,R S H L S属性和unmanagedtype.byvaltstr SizeConst参数,指定字符串类型CLR成指定长度的结论Microsoft .NET框架已经成为软件工程发展的一种平台A.5字符数组。本文提出了一种基于.net的CMPP3.0协议的互联网短信服务平台,并阐述了该平台的关键技术与实例。在这个服务平台的基础上,添加特定的业务逻辑,可以实现如移动支付等。