基于 CMPP3.0 协议 SP 端的实现(C#)

来源:互联网 发布:arm linux 串口调试 编辑:程序博客网 时间:2024/05/19 16:34

 

 

    最近一段是时间项目可能需要提供短信功能,客户作为一个 SP 端提供短信业务;网上搜索了一番,找到了比较不错的 CMPP30 类的代码,该代码基本实现了 CMPP3.0 协议中的短信收发、网络重连等功能。本人将其重新改造,提供了同步发送、异步发送的支持(原先版本的异步发送并非标准的 .NET 异步发送模式,这部分代码是一个异步操作实现的“范本”,可供大家参考),增加了对 PROVISION 接口的支持。

    本人已将这些代码打包为一个 RAR 文件,稍后会上传到 Internet 供大家交流、学习;下面将对这版 CMPP30 类的 API 进行简要介绍:

          1)用于收发短信 CMPP30 类的 API:

 


  1/// <summary>
  2/// CMPP30 短信网关通讯组件(供 SP 使用)。
  3/// </summary>

  4public class CMPP30
  5{
  6
  7    属性
 13
 14    构造函数
 20
 21    公有方法
158
159}
CMPP30 类 API
 

                      这个类是核心类,我的代码注释很清楚,所以就不再赘述;需要注意一下的就是 Send、BeginSend、EndSend 是符合 .NET 框架标准的异步操

                  作模式;与网上的 CMPP30 类不用的是 Send 函数要求传入 CMPP_SUBMIT 数据包并返回一个 CMPP_SUBMIT_RESP 包,这有利于调用者得到

                  由 ISMG 服务器返回的 MsgID 字段,否则调用者只能通过 SMS 事件得到 CMPP_SUBMIT_RESP 包,但是仅仅有这个包是不能与其相对应的

                  CMPP_SUBMIT 进行匹配的。

                      另外说一下,所有与 ISMG 的交互都会导致 SMS 事件的引发,该事件参数中会提供一个 SMS_EVENT 枚举供事件处理程序使用,详细信息请参

                  考 SMS_EVENT 的代码。

                      最后对使用我代码的朋友说一下,Start 与 Stop 这两个函数只能调用一次。如果你的程序中调用 Stop 停止了 CMPP30 服务,则必须重新实例

                  化一个新的 CMPP30 对象来启动该服务。

          2)对 PROVISION 正向订购/取消接口的支持:

                      根据 MISC1.6 的描述,对 PROVISION 接口的实现应该采用基于 SOAP 协议的 WEB 服务技术,我这里提供了一个 Provision 抽象类,该类继

               承自 System.Web.Services.WebService。呵呵,看出来了吧,我的想法就是让 asmx 页的后台类继承 Provision 类。该类封装了 PROVISION 接

               口中的 SyncOrderRelationReqSyncOrderRelationResp 包的实现,将这对“发送/响应”包的收发变为“一次对 WEB 服务函数的调用”,当接

               收到 SyncOrderRelationReq 时就调用 Provision 类中的 SyncOrderRelationReq 函数(WebMethod),并将该函数返回值转变为一个

               SyncOrderRelationResp 包返回给移动的服务器。API 代码如下:

 

 

Code
Provision 类的 API
 

                       注意:asmx 页还是需要使用者自己建的,只需要将 asmx 的后台代码类继承 Provision 类,并实现抽象函数 OnSyncOrderRelationReq

                   可,在该抽象函数内,记录手机用户订购(或取消)业务的信息。

          3)对 PROVISION 反向订购/取消接口的支持:

                   最后再简要地说一下关于对反向订购/取消的支持,我的实现就是对 dsmp.wsdl 这个 WEB 服务的一个简单封装。该 WEB 在移动的服务器上发

              布。需要说明的是:根据反向订购/取消的业务流程,在这个过程中会执行正向订购/取消的那个 WEB 服务函数,因为反向订购/取消业务也会要求SP

              接收一个 SyncOrderRelationReq 包并返回与其相应的 SyncOrderRelationResp 包。所以 PROVISION 实现的关键还是在 Provision 类。

 

 

 

 

 

 

原创粉丝点击