I am trying to modify the CSClient code that is provided in the SDK to fetch data via QueryXml with more than one table in the query.
The problem I am having is when I try include another table data I get this error " An unhandled exception of type 'System.NullReferenceException' occurred in CSClient.exe Additional information: Object reference not set to an instance of an object." What is the best way to fetch data based on my query so I can select individual nodes such as "alert.NodeID" I am wanting to pull the data and insert it into a local MySQL database you see.
Any help or advice would be appreciated.
static void Main()
{
const string hostname = "";
const string username = "";
const string password = "";
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
var client = new InformationServiceClient("BasicHttpBinding_InformationService",
string.Format("https://{0}:17778/SolarWinds/InformationService/OrionBasic", hostname));
client.ClientCredentials.UserName.UserName = username;
client.ClientCredentials.UserName.Password = password;
client.Open();
var result = client.QueryXml("SELECT Interfaces.FullName, Interfaces.NodeID, Nodes.IPAddress FROM Orion.NPM.Interfaces INNER JOIN Orion.Nodes ON Interfaces.NodeID = Nodes.NodeID WHERE Interfaces.Status <> '1' RETURN XML AUTO", null);
var element = result.XPathSelectElement("//*[local-name()='Interfaces']");
var element2 = result.XPathSelectElement("//*[local-name()='Nodes']");
var alert = new AlertInfo
{
FullName = element.ElementAnyNS("FullName").Value,
NodeID = element.ElementAnyNS("NodeID").Value,
IPAddress = element2.ElementAnyNS("IPAddress").Value,
};
var alerts = new[] {alert};
var dcs = new DataContractSerializer(alerts.GetType());
var doc = new XmlDocument();
using (var writer = doc.CreateNavigator().AppendChild())
{
dcs.WriteObject(writer, alerts);
}
/*
var arguments = new ArrayOfXmlElement {XDocument.Load(new XmlNodeReader(doc)).Root};
var result2 = client.Invoke("Orion.AlertStatus", "Acknowledge", arguments);
*/
//Console.Write(result2);
Console.WriteLine("FullName: " + alert.FullName);
Console.WriteLine("NodeID: " + alert.NodeID);
Console.WriteLine("IPAddress: " + alert.IPAddress);
client.Close();
Console.ReadLine();
}
[DataContract(Name = "AlertInfo", Namespace = "http://schemas.solarwinds.com/2008/Orion")]
public class AlertInfo
{
[DataMember(Order = 1)]
public string FullName;
[DataMember(Order = 2)]
public string NodeID;
[DataMember(Order = 3)]
public string IPAddress;
}