using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Messaging;
using System.Threading;
using System.Net;
using System.IO;
namespace Egensource.WindowsService.SMS
{
public partial class Service1 : ServiceBase
{
MessageQueue mainWaitQueue;
public Service1()
{
if (MessageQueue.Exists(@".\private$\MessageForSMS"))
{
MessageQueue = new MessageQueue(@".\private$\MessageForSMS");
}
else
{
MessageQueue = MessageQueue.Create(@".\private$\MessageForSMS", true);
}
InitializeComponent();
}
protected override void OnStart(string[] args)
{
//WriteLog("SMS service is startted." + System.DateTime.Now.ToString());
// TODO: 在此处添加代码以启动服务。
this.Start();
Console.Read();
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
if (t != null)
{
//WriteLog("SMS service : stop work thread");
t.Interrupt();
}
//WriteLog("SMS service : service is stopped");
}
Thread t;
internal void Start()
{
t = new Thread(new ThreadStart(this.Work));
t.Start();
Console.Read();
}
private void Work()
{
string strResoult = string.Empty;
while (true)
{
// WriteLog("SMS service: work thread started:");
if (mainWaitQueue.Transactional)
{
MessageQueueTransaction myTransaction;
System.Messaging.Message message;
myTransaction = new MessageQueueTransaction();
try
{
myTransaction.Begin();
message = mainWaitQueue.Receive(myTransaction);
message.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
//Response.Write(string.Format(message.Body.ToString(), "sfsdfsdfds"));
strResoult = GetHtml(message.Body.ToString());
if (strResoult == "0")
{
WriteLog(GetErrorInfo(strResoult), EventLogEntryType.Information);
}
else
{
WriteLog(GetErrorInfo(strResoult), EventLogEntryType.Error);
Thread.Sleep(20000);
}
myTransaction.Commit();
}
catch (Exception ex)
{
myTransaction.Abort();
WriteLog(ex.ToString(), EventLogEntryType.Error);
}
}
//Thread.Sleep(20000);
}
}
/// <summary>
/// 获得短信发送后,返回结果
/// </summary>
public string GetHtml(string strUrl)
{
WebRequest request = null;
StreamReader sr = null;
Stream stream = null;
WebResponse response = null;
try
{
request = WebRequest.Create(strUrl);
response = request.GetResponse();
if (response.ContentType.Contains("utf-8"))
{
stream = response.GetResponseStream();
sr = new StreamReader(stream, Encoding.UTF8, true);
}
else
{
stream = response.GetResponseStream();
sr = new StreamReader(stream, Encoding.Default, true);
}
return sr.ReadToEnd();
}
catch (Exception ex)
{
return "";
}
finally
{
if (sr != null)
sr.Close();
if (stream != null)
stream.Close();
if (response != null)
response.Close();
}
}
private string GetErrorInfo(string number)
{
string strRemindInfo = string.Empty;
switch (number)
{
case "0":
strRemindInfo = "提交短信成功";
break;
case "500":
strRemindInfo = "参数不正确";
break;
case "501":
strRemindInfo = "IP验证没有通过";
break;
case "502":
strRemindInfo = "SP验证没通过";
break;
case "503":
strRemindInfo = "资费不足";
break;
case "504":
strRemindInfo = "指定的业务尚未开通";
break;
case "505":
strRemindInfo = "非法的接收用户";
break;
case "506":
strRemindInfo = "短信息内容中含有非法信息";
break;
case "507":
strRemindInfo = "linkid为空或非法";
break;
case "508":
strRemindInfo = "发送限额已满";
break;
case "550":
strRemindInfo = "数据库操作错误";
break;
default:
strRemindInfo = "其他错误";
break;
}
return number + ":" + strRemindInfo;
}
public static void WriteLog(string msg, EventLogEntryType type)
{
if (!EventLog.SourceExists("SMSService"))
{
EventLog.CreateEventSource("SMSService", "SMSServiceLog");
}
EventLog.WriteEntry("SMSService", msg, type);
}
}
}
1. 需要右键电击“加安装程序”
2.安装要在VS2008 ->visual Studio Tools->cmd installutil c:\WindowsService1.exe -i
3.卸载命令, installutil c:\WindowsService1.exe -u
浙公网安备 33010602011771号