/// <summary> /// 增加新的 KepwareServer /// </summary> /// <param name="server">KepwareServer 对象</param> /// <param name="dataFileName">本地持久化文件名</param> public void Add(TIRAPOPCServer server, string dataFileName) { if (GetServerWithAddrAndName(server.Address, server.Name) != null) { Exception error = new Exception(); error.Data["ErrCode"] = "900102"; error.Data["ErrText"] = string.Format( "KepServer[{0}({1})]已在系统中注册", server.Address, server.Name); throw error; } ModifyDataFile(1, server, dataFileName); servers.Add(server); }
/// <summary> /// 删除已有的 KepwareServer /// </summary> /// <param name="servAddr">KepwareServer 地址</param> /// <param name="servName">KepwareServer 名称</param> /// <param name="dataFileName">本地持久化文件名</param> public void Remove(string servAddr, string servName, string dataFileName) { TIRAPOPCServer server = GetServerWithAddrAndName(servAddr, servName); if (server == null) { Exception error = new Exception(); error.Data["ErrCode"] = "900101"; error.Data["ErrText"] = string.Format( "KepServer[{0}({1})]未在系统中注册", server.Address, server.Name); throw error; } ModifyDataFile(2, server, dataFileName); servers.Remove(server); }
/// <summary> /// 从指定的持久化文件中加载 KepwareServer 信息 /// </summary> /// <param name="cfgFileName"></param> /// <returns></returns> public int LoadFromDataFile(string cfgFileName) { servers.Clear(); XmlDocument xml = new XmlDocument(); try { xml.Load(cfgFileName); } catch (Exception error) { Debug.WriteLine(string.Format("加载[{0}]文件时出错:[{1}]", cfgFileName, error.Message)); return(servers.Count); } XmlNode parentNode = xml.SelectSingleNode("root/OPCServers"); if (parentNode != null) { foreach (XmlNode child in parentNode.ChildNodes) { TIRAPOPCServer server = TIRAPOPCServer.LoadFromXMLNode(child); if (server != null) { servers.Add(server); } } } else { Debug.WriteLine("配置文件中没有找到 root/OPCServers 节点(请注意大小写)"); } return(servers.Count); }
/// <summary> /// 将 KepwareServer 信息持久化 /// </summary> /// <param name="type">编辑类别:1-保存;2-删除</param> /// <param name="server">KepwareServer对象</param> /// <param name="dataFileName">本地持久化文件名</param> public void ModifyDataFile(int type, TIRAPOPCServer server, string dataFileName) { XmlDocument xml = new XmlDocument(); XmlNode rootNode = null; if (!File.Exists(dataFileName)) { xml.AppendChild(xml.CreateXmlDeclaration("1.0", "utf-8", "")); rootNode = xml.CreateElement("root"); xml.AppendChild(rootNode); } else { try { xml.Load(dataFileName); } catch (Exception error) { Debug.WriteLine(string.Format("加载[{0}]文件时出错:[{1}]", dataFileName, error.Message)); return; } rootNode = xml.SelectSingleNode("root"); if (rootNode == null) { Debug.WriteLine( string.Format( "[{0}] 文件中不存在 root 根节点")); return; } } // 在第一层子节点中查找 Device 节点,若没有找到则创建该节点 XmlNode serversNode = null; foreach (XmlNode node in rootNode.ChildNodes) { if (node.Name == "OPCServers") { serversNode = node; break; } } if (serversNode == null) { serversNode = xml.CreateElement("OPCServers"); rootNode.AppendChild(serversNode); } // 在 OPCServers 节点中查找指定 Address 的 OPCServer 子节点,如果找到则从 Devices 节点中删除 XmlNode serverNode = IRAPXMLUtils.GetChildNodeWithPropertyValue( serversNode, server); if (serverNode != null) { serversNode.RemoveChild(serverNode); } if (type == 1) { #region 添加设备节点 serverNode = xml.ImportNode(server.GenerateXMLNode(), true); serversNode.AppendChild(serverNode); #endregion } // 保存 XML 到文件 xml.Save(dataFileName); }
public string DoAction() { if (content.Request != null) { content.Response.ErrCode = "999999"; content.Response.ErrText = "功能正在开发中......"; try { if (content.Request.ExCode == "UpdateKepServ") { TIRAPOPCServer server = null; switch (content.Request.UpdateType) { case 1: // 新增 server = TIRAPOPCServers.Instance.GetServerWithAddrAndName( content.Request.KepServAddr, content.Request.KepServName); if (server != null) { Exception error = new Exception(); error.Data["ErrCode"] = "900102"; error.Data["ErrText"] = string.Format( "KepServer[{0}({1})]已在系统中注册", server.Address, server.Name); throw error; } server = new TIRAPOPCServer(content.Request); TIRAPOPCServers.Instance.Add( server, TOPCGatewayGlobal.Instance.ConfigurationFile); content.Response.ErrCode = "0"; content.Response.ErrText = "KepwareServer 新增成功"; break; case 2: content.Response.ErrCode = "999999"; content.Response.ErrText = "不支持 UpdateType=2 的功能"; break; case 3: TIRAPOPCServers.Instance.Remove( content.Request.KepServAddr, content.Request.KepServName, TOPCGatewayGlobal.Instance.ConfigurationFile); content.Response.ErrCode = "0"; content.Response.ErrText = "KepwareServer 删除成功"; break; } } else { content.Response.ErrCode = "900000"; content.Response.ErrText = "报文体中的交易代码和报文头中的交易代码不一致"; } } catch (Exception error) { content.Response.ErrText = string.Format("系统抛出的错误:[{0}]", error.Message); foreach (DictionaryEntry de in error.Data) { if (de.Key.ToString().ToUpper() == "ERRCODE") { content.Response.ErrCode = de.Value.ToString(); } if (de.Key.ToString().ToUpper() == "ERRTEXT") { content.Response.ErrText = de.Value.ToString(); } } } } return(content.GenerateResponseContent()); }