zoukankan      html  css  js  c++  java
  • 实时调用短信接口

    我们的短信接口肩负着批量发送各种短信的任务,主流用法是将要发送的各种信息插进数据库,然后短信接口定期读取发送。
    如果是有些短信需要马上发出去,比如短信验证码,怎么办?
    我采用了远程调用来实现。需要马上发送短信的应用程序,可以使用这个远程调用。
    问题是,我们这个短信接口是HTTP的,短信发送的前提是要跟短信站点建立连接,也就是登录验证之类。并且同一时间只能有一个连接。这个地方登录了,别的地方想再登录是不行的。
    所以只能共用一个连接。大批量定期发送这里是必须时时保持连接的(短信站点还要求我们用心跳方式每2分钟就连一次以保持连接呢),那么怎么照顾远程调用这里呢?或者说,远程调用过来了之后,发送模块怎么知道呢?
    很自然想到了事件。
    方法:
    1、    新建一个短信调用类,编译成独立的DLL。这是为了方便应用程序和短信接口两方调用;

        


    2、    短信接口:
    Program.cs:
    //注册远程调用信道及短信调用对象
                int port = 168;
                string sWellKnown = "SmsRemote";
                TcpServerChannel channel = new TcpServerChannel("tcpSmsRemote",port);
                ChannelServices.RegisterChannel(channel, false);            RemotingConfiguration.RegisterWellKnownServiceType(typeof(SmsRemote ), sWellKnown, WellKnownObjectMode.SingleCall);

    Form1.cs:
    //注册EventSend事件
    private void Form1_Load(object sender, EventArgs e)
    {
    SmsRemote.EventSend += new SmsRemote.DglSend(SmsRemote_EventSend);
    }

    //激发EventSend事件后调用的函数
            void SmsRemote_EventSend(string phone, string content)
            {
    //我们在这里将短信发送出去。
        }

    应用程序:
            sms.SmsRemote mLittleQiang;//小强!你怎么啦小强!
            private void Form1_Load(object sender, EventArgs e)
            {
                ChannelServices.RegisterChannel(new TcpClientChannel("tcpSmsRemote",null), false);
                string address = "192.168.0.252";
                int port = 168;
                string sWellKnown = "SmsRemote";
                string sUrl = String.Format("tcp://{0}:{1}/{2}", address, port, sWellKnown);
                mLittleQiang = (sms.SmsRemote)Activator.GetObject(typeof(sms.SmsRemote), sUrl);
            }
            private void button3_Click(object sender, EventArgs e)
            {
                mLittleQiang.Send("139********", "执仔猪手,与猪偕老");
            }
    只要mLittleQiang.Send(),就会激发函数SmsRemote_EventSend(string phone, string content)

  • 相关阅读:
    C#前端画表
    JavaScript中遍历获取Json中属性值
    【数据库】Redis(5)--Redis发布订阅
    【java框架】SpringBoot(9) -- Springboot中如何优雅的进行字段校验
    【开发工具】-- IDEA集成Git在实际项目中的运用
    【Java代码之美】 -- Java必会的工具库,减少代码量的利器
    【java框架】SpringMVC(4) -- JSON相关的数据返回
    聊聊基于jdk实现的spi如何与spring整合实现依赖注入
    聊聊springcloud项目同时存在多个注册中心客户端采坑记
    feign请求返回值反序列LocalDateTime异常记录
  • 原文地址:https://www.cnblogs.com/leftfist/p/4258185.html
Copyright © 2011-2022 走看看