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

posted on 2009-04-02 15:54  blogsweb  阅读(216)  评论(0)    收藏  举报