VS2005 C#创建WebService使用线程(续)

 服务器端操作,我们建立WebService,使用默认的Service.cs,然后再添加两个类,一个做数据库操作的DataControl类,另一个做日志操作及公用法的Common类。
在Service.cs中添加两个WebService方法
    // 接收数据方法
    [WebMethod]
    public bool inceptData(string[] item)
    {
        dataList.Add(item);
        return true;
    }
    // 接收客户端消息数据传递完毕
    [WebMethod]
    public bool finishTrans()
    {
        DataControl dc = new DataControl();
        dc.doInsertDate(dataList);
        return true;
    }
在DataControl类中加入启动线程的方法,数据库操作的方法
    private static Thread thread = null;
    // 调用线程做操作
    public bool doInsertDate(List<string[]> _list)
    {
        try
        {
            list = _list;
            thread = new Thread(new ThreadStart(work));
            thread.Start();
        }
        catch(Exception ex)
        {
            Common.ThreadeLog("start", "启动异常 : " + ex.Message);
        }
        return true;
    }
    // 线程启动的方法,做数据库操作
    private void work()
    {
        try
        {
            //将所有数据保存到XML文件做备份,再做操作
            Common.saveToXML("文件名", list);
            //调用其它方法
     //.......
            Common.saveLog(Common.getDate() + " 操作完成");
        }
        catch (ThreadAbortException ex)
        {
            Common.ThreadeLog("exception", "存入数据异常" + ex.Message);
            if (thread.IsAlive == true)
                thread.Abort();
        }
        finally
        {
            if (thread.IsAlive == true)
                thread.Abort();
            Common.ThreadeLog("stop", "线程中止");
        }
    }
在Common中加入相关写日志的方法
    // 线程操作日志,start,exception,stop,启动,异常,停止
    public static void ThreadeLog(string flag,string annotate)
    {
        //创建文件与目录
        if (!Directory.Exists(directoryName))
            Directory.CreateDirectory(directoryName);
        if (!File.Exists(threadLogFile))
            File.Create(threadLogFile);
        try
        {
            FileStream fileStream = null;
            StreamWriter sw = null;
            fileStream = new FileStream(threadLogFile, FileMode.Open, FileAccess.Write);
            sw = new StreamWriter(fileStream);
            sw.BaseStream.Seek(0, SeekOrigin.End);
            switch (flag)
            {
                case "start":
                    {
                        sw.WriteLine(getDate() + "  " + "thread start " + annotate );
                        break;
                    }
                case "exception":
                    {
                        sw.WriteLine(getDate() + "  " + "thread Exception " + annotate);
                        break;
                    }
                case "stop":
                    {
                        sw.WriteLine(getDate() + "  " + "thread stop  " + annotate);
                        break;
                    }
            }
            sw.Flush();
            sw.Close();
            fileStream.Close();
        }
        catch(Exception ex)
        {
            //保存出错,写入日志
            saveLog(ex.Message);
        }
    }

    // 保存文件出错日志
    public static void saveLog(string message)
    {
        if (!Directory.Exists(directoryName))
            Directory.CreateDirectory(directoryName);
        if (!File.Exists(saveLogFile))
            File.Create(saveLogFile);
        try
        {
            FileStream fileStream = null;
            StreamWriter sw = null;
            fileStream = new FileStream(saveLogFile, FileMode.Open, FileAccess.Write);
            sw = new StreamWriter(fileStream);
            sw.BaseStream.Seek(0, SeekOrigin.End);
            sw.WriteLine(getDate() + "  " + message);
            sw.Flush();
            sw.Close();
            fileStream.Close();
        }
        catch
        { }
       
    }
    // 将所有数据保存到XML文件备查
    public static void saveToXML(string fileName,List<string[]> list )
    {
        if (!File.Exists(fileName))
        {
            try
            {
                XmlTextWriter xmlText = new XmlTextWriter(fileName, Encoding.UTF8);
                xmlText.WriteStartDocument();
                xmlText.WriteStartElement("Context");
                for (int i = 0; i < list.Count; i++)
                {
                    xmlText.WriteStartElement("Row");
                    xmlText.WriteAttributeString("OrderNO", list[i][0].ToString());
                    xmlText.WriteAttributeString("OrderPerson", list[i][1].ToString());
                    xmlText.WriteAttributeString("ManufactureNO", list[i][2].ToString());
                    xmlText.WriteAttributeString("TagNO", list[i][3].ToString());
                    xmlText.WriteAttributeString("transTime", list[i][4].ToString());
                    xmlText.WriteEndElement();
                }
                xmlText.WriteEndElement();
                xmlText.WriteEndDocument();
                xmlText.Flush();
                xmlText.Close();
            }
            catch (Exception ex)
            {
                saveLog("文件创建失败 : " + ex.Message);
            }

        }
        else
        {
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(fileName);
                XmlNode root = xmlDoc.SelectSingleNode("Context");
                for (int i = 0; i < list.Count; i++)
                {
                    XmlElement xe = xmlDoc.CreateElement("ROW");
                    xe.SetAttribute("OrderNO", list[i][0].ToString());
                    xe.SetAttribute("OrderPerson", list[i][1].ToString());
                    xe.SetAttribute("ManufactureNO", list[i][2].ToString());
                    xe.SetAttribute("TagNO", list[i][3].ToString());
                    xe.SetAttribute("transTime", list[i][4].ToString());
                    root.AppendChild(xe);

                }
                xmlDoc.Save(fileName);
            }
            catch (Exception ex)
            {
                Common.saveLog("写入文件失败" + ex.Message);
            }
        }

    }
做完这些所有操作后,我们发布网站,在打开本机IIS,在默认网站下增加虚拟目录,路径指向我们发布的WebService目录
然后在客户端调用的时候,我们首先添加Web引用,例如http://localhost/Usethread/Service.asmx,在频繁调用的地方使用
    request = (HttpWebRequest)WebRequest.Create(service.Url);
    request.KeepAlive = true;
来请求http资源,并且建立持久性连接,然后就可以进行其它业务逻辑的处理。
具体实现可以下载资源(http://dl2.csdn.net/down4/20071226/26222659995.rar)查看完整的实现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值