在IIS下建立了Quartz作业,定时发送短信 时间为早7点到晚7点
现在遇到一个问题,到了第二天7点后,作业开始,提示启动短信猫失败,但是web站点能够正常访问,在网页启动短信猫,能够启动成功,启动成功后,短信作业能够正常发送短信,这一天短信作业都不会有问题,但到了第二天又重复这种情况
为什么第二天通过网页能够启用短信服务(通过com端口调用),而quartz下却无法启动短信服务,是否是权限问题?
你查下错误日志
我自己记录的日志,启动短信服务失败
@蓝风»: 为啥失败?总的有错误代码或描述信息吧。
@Launcher: 现在就是不清楚为什么失败,web页面加的启动服务的Button按钮执行的方法与quartz下启动服务的方法是一样的
@蓝风»: 那你应该把具体的错误信息记录下来,比如我们用 CreateFile 打开一个 COM 端口时,它有返回值,并且通过 GetLastError 还能得到具体的 Win32 Error Code。
@Launcher: 用的是短信猫自带的sms.dll文件,无法获取到更详细的信息
@蓝风»: 你的意思是说,它提供的接口是这样的: void send(string s),所以无论有啥错误,这个方法既没有返回值,也不抛出异常,是吗?
@Launcher: 差不多,只返回1 0 ,同一个web程序,为什么网页按钮能够启动,quartz作业启动短信猫服务失败?纳闷。。。 按理说一个程序占用一个端口,同一个web程序,理论上应该是没问题的。对了,当前的web应用程序,晚上到第二天上班前是没人用的
@蓝风»:
[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);
哪个方法调用失败了?
@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);
@蓝风»: [DllImport(@"SMSDLL.dll",SetLastError=true)]
调用完 SMSStartService 后,调用 GetLastError 看下错误代码。
@Launcher:
[DllImport(@"SMSDLL.dll")] public static extern int SMSGetLastError(string err);
看看这个的返回结果就蛋疼,int
@蓝风»: 这个你蛋有多疼我不知道,我只想知道这个返回值是啥?
https://msdn.microsoft.com/en-us/library/windows/desktop/ms679360(v=vs.85).aspx
@Launcher: 我再测试下
我觉得是你逻辑写的有问题,导致quarz启动时环境和你网页启动时所处环境不一样,也就是说可能某些资源没有加载。
网站可能设置了自动回收什么的,直接调整quarz每分都发送,马上就测就知道是不是quarz的问题了。