首页 新闻 会员 周边 捐助

wavecom 短信猫 部署服务出错

0
悬赏园豆:50 [待解决问题]

短信猫二次开发,window服务部署后无法发送和接收短信

 public void Start()
        {
            IsConnection = SmsConnection();
            //处理发送短信线程
            sendThread = new Thread(SendMessageThread);
            sendThread.Start();
            //处理接收短信的线程
            receiveThread = new Thread(ReceiveSmsTextThread);
            receiveThread.Start();

        }
 /// <summary>
        /// 发送短信
        /// </summary>
        /// <param name="state"></param>
        public void SendMessageThread()
        {
            while (true)
            {
                try
                {
                    //获取数据
                    List<EnMessage> msgList = opt.GetAllMessage();
                    if (msgList.Count != 0)
                    {
                        lock (thisLock)
                        {
                            HandleSendMessage(msgList);
                        }
                    }
                }
                catch (Exception e)
                {
                    LogManager.WriteLog(e.Message);
                }
                Thread.Sleep(SEND_PERIOD);
            }
        }
private void HandleSendMessage(List<EnMessage> msgList)
        {
            msgList.ForEach(msg =>
            {
                //验证手机号
                if (ValidPhoneNumber(msg.PhoneNumber))
                {
                    try
                    {
                        if (SmsSend(msg.PhoneNumber, msg.MessageContent))
                        {
                            //发送短信成功
                            opt.DeleteAndInsertMessage(msg);
                        }
                        else
                        {
                            LogManager.WriteLog("短信发送失败,手机号:" + msg.PhoneNumber + " 内容:" + msg.MessageContent);
                        }
                    }
                    catch (Exception e)
                    {
                        //记录日志
                        LogManager.WriteLog("短信发送失败,手机号:" + msg.PhoneNumber + " 内容:" + msg.MessageContent + "异常:" + e.Message);
                    }
                }
                else
                {
                    //手机号验证失败 记录日志 删除表中数据
                    LogManager.WriteLog("手机号验证失败,手机号:" + msg.PhoneNumber);
                    opt.DeleteMessage(msg.ID);
                }
                //没处理一条数据睡0.5s,减轻机器负荷
                Thread.Sleep(500);
            });
        }
 private bool SmsSend(string phoneNumber, string msgContent)
        {
            try
            {
                //DLL
                if (Sms_Send(phoneNumber, msgContent) == 1)
                {
                    return true;
                }
            }
            catch (Exception e)
            {
                LogManager.WriteLog("发送短信时发送异常:" + e.Message);
            }
            return false;
        }

/// <summary>
        /// 处理接收短信
        /// </summary>
        /// <param name="ReceiveSmsText"></param>
        public void ReceiveSmsTextThread()
        {

            while (true)
            {
                try
                {
                    HandleReceiveSmsText();
                }
                catch (Exception e)
                {
                    LogManager.WriteLog(e.Message);
                }
                Thread.Sleep(1000);
            }
        }
        private void HandleReceiveSmsText()
        {
            string ReceiveSmsText = string.Empty;
            lock (thisLock)
            {
                ReceiveSmsText = SmsReceive("4");
            }
            if (!string.IsNullOrEmpty(ReceiveSmsText))
            {
                //解析数据
                List<EnMessage> msgList = AnalysisSmsText(ReceiveSmsText);
                //解析并保存接收短信
                string msgIndex = string.Empty;
                string error = opt.InsertMsgHistory(msgList, out msgIndex);
                lock (thisLock)
                {
                    //删除接收到的短信
                    SmsDelete(msgIndex);
                }
                if (!string.IsNullOrEmpty(error))
                {
                    LogManager.WriteLog("保存接收短信失败:" + error);
                }
            }
        }
        /// <summary>
        /// 接收短信
        /// </summary>
        /// <param name="smsType"></param>
        /// <returns></returns>
        public string SmsReceive(string smsType)
        {
            String ReceiveSmsText = string.Empty;
            try
            {
                Sms_Receive(smsType, out ReceiveSmsText);
            }
            catch (Exception e)
            {
                LogManager.WriteLog("接收短信异常:" + e.Message);
            }

            return ReceiveSmsText;
        }
        /// <summary>
        /// 解析短信
        /// </summary>
        /// <param name="receiveSmsText"></param>
        /// <returns></returns>
        private List<EnMessage> AnalysisSmsText(string receiveSmsText)
        {
            List<EnMessage> msgList = new List<EnMessage>();
            //短信内容字符串说明:短信与短信之前用"|"符号作为分隔符,每条短信中间的各字段用"#"符号作为分隔符
            string[] msgArray = receiveSmsText.Split('|');
            msgArray.ToList().ForEach(msg =>
            {
                if (!string.IsNullOrEmpty(msg))
                {
                    string[] array = msg.Split('#');
                    msgList.Add(new EnMessage()
                    {
                        MessageIndex = array[0],
                        PhoneNumber = array[2],
                        MessageContent = array[3],
                        Date = Convert.ToDateTime(array[4]),
                        Type = "R"
                    });
                }
            });
            return msgList;
        }
        /// <summary>
        /// 删除短信
        /// </summary>
        /// <param name="msgList"></param>
        private void SmsDelete(string msgIndex)
        {
            msgIndex.Split(',').ToList().ForEach(index =>
                {
                    Sms_Delete(index);
                    //给短信猫一个反映时间
                    Thread.Sleep(500);
                });
        }

/// <summary>
        /// 连接短信猫
        /// </summary>
        /// <returns></returns>
        private bool SmsConnection()
        {
            String TypeStr = "";
            string CopyRightStr = "//上海迅赛信息技术有限公司,网址www.xunsai.com//";
            string CopyRightToCOM = "";
            bool isConn = false;
            try
            {
                if (Sms_Connection(CopyRightStr, MOB_PORT, 9600, out TypeStr, out CopyRightToCOM) == 1) ///5为串口号,0为红外接口,1,2,3,...为串口
                {
                    isConn = true;
                    LogManager.WriteLog("短信猫连接成功,可以开始发送短信。");
                }
                else
                {
                    isConn = false;
                    LogManager.WriteLog("短信猫连接失败,请检查设备。");
                }
            }
            catch (Exception ex)
            {
                isConn = false;
                LogManager.WriteLog("短信猫连接失败: " + ex.Message);
            }
            return isConn;
        }

目前次程序使用 winform 调用Start方法没任何问题,如果是windows服务,则无法发送短信和接收短信,求解释,

老孟Flutter的主页 老孟Flutter | 初学一级 | 园豆:55
提问于:2013-11-08 16:29
< >
分享
所有回答(4)
0

那可能是windows服务的毛病的,建议:1,看看windows日志里有错误信息没;2,在程序的关键节点写日志文件,这样便于查询问题

会长 | 园豆:12463 (专家六级) | 2013-11-08 16:57

不好意思,没看见你已经写日子了,从日志上也看不出?

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2013-11-08 16:58

在程序的开头写一个日志,确认一下程序是否真的执行了,就是写一些调试用的日志,而不是发生了错误才写日志。希望能帮到你

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2013-11-08 16:59

@会长: 通过日志目前可以断定在调用DLL的Sms_Send时出现异常,程序将停在此处,我猜测可能是串口堵塞(短信猫是串口的),当然这只是猜测。

支持(0) 反对(0) 老孟Flutter | 园豆:55 (初学一级) | 2013-11-08 17:04

@会长: winForm和windows服务有什么区别吗?权限问题?

支持(0) 反对(0) 老孟Flutter | 园豆:55 (初学一级) | 2013-11-08 17:05

@meng5619: 异常信息是什么呀,有没有参考价值

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2013-11-08 17:06

@会长: 没有任何异常信息,调试时调用DLL程序直接就死了,

支持(0) 反对(0) 老孟Flutter | 园豆:55 (初学一级) | 2013-11-08 17:08

@会长: 将服务停止,程序就可以正常往下走

支持(0) 反对(0) 老孟Flutter | 园豆:55 (初学一级) | 2013-11-08 17:09

@meng5619: windows日志里有没有蛛丝马迹

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2013-11-08 17:09

@会长: 没有任何异常信息

支持(0) 反对(0) 老孟Flutter | 园豆:55 (初学一级) | 2013-11-08 17:09

@meng5619: 你调用的第三方dll放在了什么位置,会不会是你编写的windows服务找不到那个dll文件

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2013-11-08 17:13

@会长: 找的到,找不到肯定会有异常,而且发送短信前会连接短信猫,日志显示短信猫连接成功了

支持(0) 反对(0) 老孟Flutter | 园豆:55 (初学一级) | 2013-11-08 17:16

@meng5619: 注册windows服务用InstallUtil.exe命令吗?看看是用的哪个版本的freamwork下面的InstallUtil.exe,会不会是版本问题,

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2013-11-08 17:21
0

楼主,我也碰到相同问题,我写了个dll,里面是发送短信。用winForm程序调用正常。

windows服务调用时,连接可以,发送失败!请问你解决了吗?

LiQ_R | 园豆:202 (菜鸟二级) | 2014-05-16 15:18
0

楼主,问题解决了么?

我用自己开发的类库没问题,用这个sms.dll遇到和你一样的问题,winform正常,windows服务可以连接设备,就是不能收发。。。

楓の戀 | 园豆:19 (初学一级) | 2015-10-23 16:19
0

短信猫厂家直销 GSM短信猫池,TC35短信猫,WAVECOM短信猫 8口电信猫池,16口短信猫联系电话15986760960吴婷婷QQ1052012180

短信猫Q1052012180 | 园豆:210 (菜鸟二级) | 2017-06-02 13:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册