短信猫二次开发,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服务,则无法发送短信和接收短信,求解释,
那可能是windows服务的毛病的,建议:1,看看windows日志里有错误信息没;2,在程序的关键节点写日志文件,这样便于查询问题
不好意思,没看见你已经写日子了,从日志上也看不出?
在程序的开头写一个日志,确认一下程序是否真的执行了,就是写一些调试用的日志,而不是发生了错误才写日志。希望能帮到你
@会长: 通过日志目前可以断定在调用DLL的Sms_Send时出现异常,程序将停在此处,我猜测可能是串口堵塞(短信猫是串口的),当然这只是猜测。
@会长: winForm和windows服务有什么区别吗?权限问题?
@meng5619: 异常信息是什么呀,有没有参考价值
@会长: 没有任何异常信息,调试时调用DLL程序直接就死了,
@会长: 将服务停止,程序就可以正常往下走
@meng5619: windows日志里有没有蛛丝马迹
@会长: 没有任何异常信息
@meng5619: 你调用的第三方dll放在了什么位置,会不会是你编写的windows服务找不到那个dll文件
@会长: 找的到,找不到肯定会有异常,而且发送短信前会连接短信猫,日志显示短信猫连接成功了
@meng5619: 注册windows服务用InstallUtil.exe命令吗?看看是用的哪个版本的freamwork下面的InstallUtil.exe,会不会是版本问题,
楼主,我也碰到相同问题,我写了个dll,里面是发送短信。用winForm程序调用正常。
windows服务调用时,连接可以,发送失败!请问你解决了吗?
楼主,问题解决了么?
我用自己开发的类库没问题,用这个sms.dll遇到和你一样的问题,winform正常,windows服务可以连接设备,就是不能收发。。。
短信猫厂家直销 GSM短信猫池,TC35短信猫,WAVECOM短信猫 8口电信猫池,16口短信猫联系电话15986760960吴婷婷QQ1052012180