将计算机从 xml 文件 c# 移动到具有读/写功能的字典
本文关键字:功能 字典 计算机 xml 文件 移动 | 更新日期: 2024-10-30 10:48:34
>我正在编写一个应用程序,该应用程序将作为服务运行,并每小时检查一次计算机以查看它们是否启动。 我有一个 ComputerList.xml 文件,我将读取和写入该文件。XML 文件的格式为
<computers>
<PrimaryServers>
<Location1 type="primary">
<ipaddress>192.168.1.2</ipaddress>
<isAlive>true</ipaddress>
</Location1>
<location2></location2>
</PrimaryServers>
<SecondaryServers>
<location1 type="secondary">
<ipaddress></ipaddress>
etc...
</location1>
</SecondaryServers>
<clients>
etc... <type="client">
</clients>
</computers>
每个位置都有不同数量的计算机,我想存储这些值以用于其他方法,并在检查主机后是否处于活动状态,将布尔值写回文件。
这个应用程序的想法是检查主服务器是否处于活动状态,如果不是,它会检查客户端是否处于活动状态,如果它们已关闭,那么我知道站点之间的网络已关闭并且什么都不做,如果只是服务器关闭,那么它会将主机文件推送到处于活动状态的客户端, 将流量重定向到辅助服务器。 我会使用故障转移群集,但服务器上的 LOB 应用程序不允许这样做。
我正在寻找的只是一种读取 xml 文件的方法,区分主文件、辅助文件和客户端,检索值并将其存储在字典中。 我已经编写了代码以查看它是否处于活动状态,这将返回每个设备的 IsAlive 状态,我只需要将其写入 xml 中,以便在服务器重新启动时拥有持久数据。 没有足够的计算机来证明数据库的合理性。
提前谢谢。
可以使用XmlDocument
类来读取和保存 XML 文档。它在System.Xml
.
在这里阅读更多关于它的信息:
https://msdn.microsoft.com/en-us/library/system.xml.xmldocument%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
试试这样的事情
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, Computer> dict = new Dictionary<string, Computer>();
string xml =
"<Computers>" +
"<PrimaryServers>" +
"<Location1 type='"primary'">" +
"<Ipaddress>192.168.1.2</Ipaddress>" +
"<IsAlive>true</IsAlive>" +
"</Location1>" +
"<Location2></Location2>" +
"</PrimaryServers>" +
"<SecondaryServers>" +
"<Location1 type='"secondary'">" +
"<Ipaddress>192.168.1.3</Ipaddress>etc..." +
"</Location1>" +
"</SecondaryServers>" +
"<Clients>" +
"<Location1 type='"secondary'">" +
"<Ipaddress>192.168.1.4</Ipaddress>etc..." +
"</Location1>" +
"</Clients>" +
"</Computers>";
XDocument doc = XDocument.Parse(xml);
List<XElement> computers = doc.Descendants("Computers").Elements().ToList();
foreach (XElement computer in computers)
{
dict.Add((string)computer.Descendants("Ipaddress").FirstOrDefault(), new Computer()
{
ip = (string)computer.Descendants("Ipaddress").FirstOrDefault(),
type = (string)computer.Descendants("Location1").FirstOrDefault().Attribute("type")
});
}
}
}
public class Computer
{
public string ip { get; set; }
public string location1 { get; set; }
public string location2 { get; set; }
public string type { get; set; }
}
}