用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
xne2ds的公告
文章分类
    存档

    原创  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)查看完整的实现。

    发表于 @ 2007年12月27日 23:57:00 | 评论( loading... ) | 编辑| 举报| 收藏

    旧一篇:VS2005 C#创建WebService使用线程 | 新一篇:使用MiddleGen-hibernate-r5生成hbm文件及POJO文件

    • 发表评论
    • 评论内容:
    •  
    Copyright © xne2ds
    Powered by CSDN Blog