使用ajax每1分钟操作一次XML文件,把当前时间记录进XML;
服务器操作系统是Windows2003,经常出现系统打不开,需要重启服务器才可以.
我在我的XP系统上面一个人调试,没有出现过问题,不知道是不是服务器上同时访问人多出现的问题.
JS代码如下:
[code]function InsertRefreshTime() {
    var StaffId = $get('txtStaffId').value;
    var StaffName = $get('txtStaffName').value;
    var SiteId = $get('txtSiteId').value;
    //1.更新當前在綫時間
    OnlineService.InsertRefreshTime(StaffId,StaffName,SiteId,onSucceed,onFailed);
    //2.查看轉發的有沒有被處理.1)轉發人員在綫的但沒有被刪除的,保持不動
    //  2)轉發人員不在綫的,更換轉發人員,同時更新TSS_WAKE資料
    RefreshEscalateListByStaffId();
    //3.轉發人員搜集需要處理的問題,現在處理的刪除,不然保持不動.
    GetEscalateListByStaffId();
    //4.提醒轉發被關閉
    IsCloseEscalateList();
}
setInterval(InsertRefreshTime,60000); //定时每间隔1分钟循环执行
[/code]
CS部分代码:
[code]
 public static readonly string OnlinePath = ConfigurationManager.AppSettings["OnlinePath"]; //XML文件路径
private static object objectLock = new object();
//更新用户在线时间
        public static void CreateStaffToList(OnlineInfo onlineInfo)
        {
            bool isExist = false;
            lock (objectLock)
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(OnlinePath);
                //
                XmlNodeList nodeList = xmlDoc.SelectSingleNode("OnlineList").ChildNodes;//获取OnlineList节点的所有子节点
                foreach (XmlNode xn in nodeList)//遍历所有子节点
                {
                    XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                    if (xe.GetAttribute("StaffId") == onlineInfo.StaffId)//如果StaffId属性值为strStaffId
                    {
                        isExist = true;
                        break;
                    }
                }
                if (!isExist)
                {   //新增用户节点
                    XmlNode root = xmlDoc.SelectSingleNode("OnlineList");//查找<OnlineList>
                    XmlElement xe1 = xmlDoc.CreateElement("Staff");//创建一个<Staff>节点
                    xe1.SetAttribute("StaffId", onlineInfo.StaffId);//设置该节点StaffId属性
                    XmlElement xesub1 = xmlDoc.CreateElement("StaffName");
                    xesub1.InnerText = onlineInfo.StaffName;//设置文本节点
                    xe1.AppendChild(xesub1);//添加到<Staff>节点中
                    XmlElement xesub2 = xmlDoc.CreateElement("SiteId");
                    xesub2.InnerText = onlineInfo.SiteId;
                    xe1.AppendChild(xesub2);
                    XmlElement xesub3 = xmlDoc.CreateElement("RefreshTime");
                    xesub3.InnerText = onlineInfo.RefreshTime;
                    xe1.AppendChild(xesub3);                    root.AppendChild(xe1);//添加到<OnlineList>节点中
                    //xmlDoc.Save(HttpContext.Current.Server.MapPath(OnlinePath));
                }
                else
                {//刷新用户在线时间
                    foreach (XmlNode xn in nodeList)//遍历所有子节点
                    {
                        XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                        if (xe.GetAttribute("StaffId") == onlineInfo.StaffId)//如果StaffId属性值为strStaffId
                        {
                            XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
                            foreach (XmlNode xn1 in nls)//遍历
                            {
                                XmlElement xe2 = (XmlElement)xn1;//转换类型
                                if (xe2.Name == "RefreshTime")//如果找到
                                {
                                    xe2.InnerText = onlineInfo.RefreshTime;//则修改
                                    break;//找到退出来就可以了
                                }
                            }
                            break;
                        }
                    }
                }
                xmlDoc.Save(OnlinePath);
                xmlDoc = null;
            }
        }//判断用户是否在线
public static bool IsOnlineByStaffId(string strStaffId,string strCurrentTime)
        {
            string strRefreshTime = string.Empty;
            lock (objectLock)
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(OnlinePath);
                //xmlDoc.Load(HttpContext.Current.Server.MapPath(OnlinePath));                XmlNodeList nodeList = xmlDoc.SelectSingleNode("OnlineList").ChildNodes;//获取OnlineList节点的所有子节点
                foreach (XmlNode xn in nodeList)//遍历所有子节点
                {
                    XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                    if (xe.GetAttribute("StaffId") == strStaffId)//如果StaffId属性值为strStaffId
                    {
                        XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
                        foreach (XmlNode xn1 in nls)//遍历
                        {
                            XmlElement xe2 = (XmlElement)xn1;//转换类型
                            if (xe2.Name == "RefreshTime")//如果找到
                            {
                                strRefreshTime = xe2.InnerText;//则修改
                                break;//找到退出来就可以了
                            }
                        }
                        break;
                    }
                }
                if (strRefreshTime.Length == 0)
                    return false;
                else
                {
                    DateTime dtCurrentTime = Convert.ToDateTime(strCurrentTime);
                    DateTime dtRefreshTime = Convert.ToDateTime(strRefreshTime);
                    TimeSpan ts = dtCurrentTime.Subtract(dtRefreshTime);
                    int intTimeSpan = Convert.ToInt32(ts.TotalSeconds.ToString());
                    if (intTimeSpan < 60)
                        return true;
                    else
                        return false;
                }
            }        }
[/code]

解决方案 »

  1.   

    不知道为什么上面的看不见?
    JS代码如下:
    function InsertRefreshTime() {
        var StaffId = $get('txtStaffId').value;
        var StaffName = $get('txtStaffName').value;
        var SiteId = $get('txtSiteId').value;
        //1.更新當前在綫時間
        TSSsystem.Web.OnlineService.InsertRefreshTime(StaffId,StaffName,SiteId,onSucceed,onFailed);
        //2.查看轉發的有沒有被處理.1)轉發人員在綫的但沒有被刪除的,保持不動
        //  2)轉發人員不在綫的,更換轉發人員,同時更新TSS_WAKE資料
        RefreshEscalateListByStaffId();
        //3.轉發人員搜集需要處理的問題,現在處理的刪除,不然保持不動.
        GetEscalateListByStaffId();
        //4.提醒轉發被關閉
        IsCloseEscalateList();
    }
     setInterval(InsertRefreshTime,60000); //定时每间隔1分钟循环执行
      

  2.   

    CS代码如下:
    public static readonly string OnlinePath = ConfigurationManager.AppSettings["OnlinePath"]; //XML文件路径
    private static object objectLock = new object();
    //刷新用户在线时间
            public static void CreateStaffToList(OnlineInfo onlineInfo)
            {
                bool isExist = false;
                lock (objectLock)
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.Load(OnlinePath);
                    //開始處理
                    XmlNodeList nodeList = xmlDoc.SelectSingleNode("OnlineList").ChildNodes;//获取OnlineList节点的所有子节点
                    foreach (XmlNode xn in nodeList)//遍历所有子节点
                    {
                        XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                        if (xe.GetAttribute("StaffId") == onlineInfo.StaffId)//如果StaffId属性值为strStaffId
                        {
                            isExist = true;
                            break;
                        }
                    }
                    if (!isExist)
                    {//新增Staff
                        XmlNode root = xmlDoc.SelectSingleNode("OnlineList");//查找<OnlineList>
                        XmlElement xe1 = xmlDoc.CreateElement("Staff");//创建一个<Staff>节点
                        xe1.SetAttribute("StaffId", onlineInfo.StaffId);//设置该节点StaffId属性
                        XmlElement xesub1 = xmlDoc.CreateElement("StaffName");
                        xesub1.InnerText = onlineInfo.StaffName;//设置文本节点
                        xe1.AppendChild(xesub1);//添加到<Staff>节点中
                        XmlElement xesub2 = xmlDoc.CreateElement("SiteId");
                        xesub2.InnerText = onlineInfo.SiteId;
                        xe1.AppendChild(xesub2);
                        XmlElement xesub3 = xmlDoc.CreateElement("RefreshTime");
                        xesub3.InnerText = onlineInfo.RefreshTime;
                        xe1.AppendChild(xesub3);                    root.AppendChild(xe1);//添加到<OnlineList>节点中
                        //xmlDoc.Save(HttpContext.Current.Server.MapPath(OnlinePath));
                    }
                    else
                    {//刷新Staff在綫時間
                        foreach (XmlNode xn in nodeList)//遍历所有子节点
                        {
                            XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                            if (xe.GetAttribute("StaffId") == onlineInfo.StaffId)//如果StaffId属性值为strStaffId
                            {
                                XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
                                foreach (XmlNode xn1 in nls)//遍历
                                {
                                    XmlElement xe2 = (XmlElement)xn1;//转换类型
                                    if (xe2.Name == "RefreshTime")//如果找到
                                    {
                                        xe2.InnerText = onlineInfo.RefreshTime;//则修改
                                        break;//找到退出来就可以了
                                    }
                                }
                                break;
                            }
                        }
                    }
                    xmlDoc.Save(OnlinePath);
                    xmlDoc = null;
                }
            }
    //判断用户是否在线
    public static bool IsOnlineByStaffId(string strStaffId,string strCurrentTime)
            {
                string strRefreshTime = string.Empty;
                lock (objectLock)
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.Load(OnlinePath);
                    //xmlDoc.Load(HttpContext.Current.Server.MapPath(OnlinePath));                XmlNodeList nodeList = xmlDoc.SelectSingleNode("OnlineList").ChildNodes;//获取OnlineList节点的所有子节点
                    foreach (XmlNode xn in nodeList)//遍历所有子节点
                    {
                        XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
                        if (xe.GetAttribute("StaffId") == strStaffId)//如果StaffId属性值为strStaffId
                        {
                            XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
                            foreach (XmlNode xn1 in nls)//遍历
                            {
                                XmlElement xe2 = (XmlElement)xn1;//转换类型
                                if (xe2.Name == "RefreshTime")//如果找到
                                {
                                    strRefreshTime = xe2.InnerText;//则修改
                                    break;//找到退出来就可以了
                                }
                            }
                            break;
                        }
                    }
                    if (strRefreshTime.Length == 0)
                        return false;
                    else
                    {
                        DateTime dtCurrentTime = Convert.ToDateTime(strCurrentTime);
                        DateTime dtRefreshTime = Convert.ToDateTime(strRefreshTime);
                        TimeSpan ts = dtCurrentTime.Subtract(dtRefreshTime);
                        int intTimeSpan = Convert.ToInt32(ts.TotalSeconds.ToString());
                        if (intTimeSpan < 60)
                            return true;
                        else
                            return false;
                    }
                }        }
      

  3.   

    可以利用MSMQ(消息队列)统一执行保存