首页 新闻 会员 周边

IIS 调用com端口发短信正常 但到第二天时无法启用com端口

0
悬赏园豆:10 [已关闭问题] 关闭于 2015-04-17 09:02

 在IIS下建立了Quartz作业,定时发送短信 时间为早7点到晚7点

 

现在遇到一个问题,到了第二天7点后,作业开始,提示启动短信猫失败,但是web站点能够正常访问,在网页启动短信猫,能够启动成功,启动成功后,短信作业能够正常发送短信,这一天短信作业都不会有问题,但到了第二天又重复这种情况

为什么第二天通过网页能够启用短信服务(通过com端口调用),而quartz下却无法启动短信服务,是否是权限问题?

蓝风»的主页 蓝风» | 初学一级 | 园豆:21
提问于:2015-01-21 11:34
< >
分享
所有回答(2)
0

你查下错误日志

Launcher | 园豆:45045 (高人七级) | 2015-01-21 11:35

我自己记录的日志,启动短信服务失败

 

支持(0) 反对(0) 蓝风» | 园豆:21 (初学一级) | 2015-01-21 11:36

@蓝风»: 为啥失败?总的有错误代码或描述信息吧。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2015-01-21 11:37

@Launcher: 现在就是不清楚为什么失败,web页面加的启动服务的Button按钮执行的方法与quartz下启动服务的方法是一样的

支持(0) 反对(0) 蓝风» | 园豆:21 (初学一级) | 2015-01-21 11:39

@蓝风»: 那你应该把具体的错误信息记录下来,比如我们用 CreateFile 打开一个 COM 端口时,它有返回值,并且通过 GetLastError 还能得到具体的 Win32 Error Code。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2015-01-21 11:47

@Launcher: 用的是短信猫自带的sms.dll文件,无法获取到更详细的信息

支持(0) 反对(0) 蓝风» | 园豆:21 (初学一级) | 2015-01-21 13:20

@蓝风»: 你的意思是说,它提供的接口是这样的: void send(string s),所以无论有啥错误,这个方法既没有返回值,也不抛出异常,是吗?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2015-01-21 13:22

@Launcher: 差不多,只返回1 0 ,同一个web程序,为什么网页按钮能够启动,quartz作业启动短信猫服务失败?纳闷。。。  按理说一个程序占用一个端口,同一个web程序,理论上应该是没问题的。对了,当前的web应用程序,晚上到第二天上班前是没人用的

支持(0) 反对(0) 蓝风» | 园豆:21 (初学一级) | 2015-01-21 13:30

@蓝风»: 

[DllImport("sms.dll", EntryPoint = "Sms_Connection")]
public static extern uint Sms_Connection(string CopyRight, uint Com_Port, uint Com_BaudRate, out string Mobile_Type, out string CopyRightToCOM);

[DllImport("sms.dll", EntryPoint = "Sms_Disconnection")]
public static extern uint Sms_Disconnection();

[DllImport("sms.dll", EntryPoint = "Sms_Send")]
public static extern uint Sms_Send(string Sms_TelNum, string Sms_Text);

 

哪个方法调用失败了?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2015-01-21 13:34

@Launcher: 

        //启动服务int _stdcall SMSStartService(int nPort,DWORD BaudRate = 57600, int Parity=2, int DataBits = 8,int StopBits=0,int FlowControl=0,char* csca="card") 

        //参数:nPort 串口号 如1 则表示COM1
        //BaudRate 拨特率 115200  
        //Parity 校验位 2 
        //DataBits 数据位 8
        //StopBits停止位 0
        //FlowControl 流控制 0
        //Csca 短信中心号码,可以使用默认值,若设置则格式如:” +8613800591500”

        //   返回值:1成功,0失败
        [DllImport(@"SMSDLL.dll")]
        public static extern int SMSStartService(
            int nPort,
            uint baudRate,
            int parity,
            int dataBits,
            int stopBits,
            int flowControl,
            byte[] csca);
支持(0) 反对(0) 蓝风» | 园豆:21 (初学一级) | 2015-01-21 13:38

@蓝风»:  [DllImport(@"SMSDLL.dll",SetLastError=true)]

调用完 SMSStartService 后,调用 GetLastError 看下错误代码。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2015-01-21 13:41

@Launcher: 

       [DllImport(@"SMSDLL.dll")]
        public static extern int SMSGetLastError(string err);

看看这个的返回结果就蛋疼,int

支持(0) 反对(0) 蓝风» | 园豆:21 (初学一级) | 2015-01-21 13:45

@蓝风»: 这个你蛋有多疼我不知道,我只想知道这个返回值是啥?

https://msdn.microsoft.com/en-us/library/windows/desktop/ms679360(v=vs.85).aspx

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2015-01-21 13:47

@Launcher: 我再测试下

支持(0) 反对(0) 蓝风» | 园豆:21 (初学一级) | 2015-01-21 13:49
0

我觉得是你逻辑写的有问题,导致quarz启动时环境和你网页启动时所处环境不一样,也就是说可能某些资源没有加载。

网站可能设置了自动回收什么的,直接调整quarz每分都发送,马上就测就知道是不是quarz的问题了。

arg | 园豆:1047 (小虾三级) | 2015-01-21 15:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册