我正在尝试从我的应用程序通过 CUCM 沙盒环境中的 AXL API 运行 SQL 查询并取回 SQL 查询结果。任何人都可以通过一个例子告诉我我们如何做到这一点。我试图这样做,但是当 WebResponse resp = req.GetResponse(); 时收到错误“底层连接已关闭:接收时发生意外错误”;被执行。完整代码如下所示:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"https://xx.xx.xx.xx/https/0/xx.xx.xx.x/axl/");
//req.KeepAlive = false;
req.ProtocolVersion = HttpVersion.Version10;
req.Method = "POST";
req.Host = "xx.xx.xx.x:8443";
req.ProtocolVersion = System.Net.HttpVersion.Version10;
req.ContentType = "text/xml";
req.Accept = "text/xml";
req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("username:password")));
string strAXLRequest;
strAXLRequest = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=";
strAXLRequest += "\"http://schemas.xmlsoap.org/soap/envelope/\"";
strAXLRequest += " xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\"";
strAXLRequest += " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
strAXLRequest += " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"> ";
strAXLRequest += "<SOAP-ENV:Body> ";
strAXLRequest += "<m:executeSQLQuery xmlns:m=\"http://www.cisco.com/AXL/API/7.0\" sequence=\"1\"> ";
strAXLRequest += "<m:sql> ";
strAXLRequest += "SELECT * FROM Device ";
strAXLRequest += "</m:sql> ";
strAXLRequest += "</m:executeSQLQuery> ";
strAXLRequest += "</SOAP-ENV:Body> ";
strAXLRequest += "</SOAP-ENV:Envelope>";
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
req.ContentLength = strAXLRequest.Length;
Stream s = req.GetRequestStream();
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(strAXLRequest);
s.Write(buffer, 0, strAXLRequest.Length);
s.Close();
try
{
WebResponse resp = req.GetResponse();
s = resp.GetResponseStream();
StreamReader sr = new StreamReader(s);
string outputString = sr.ReadToEnd(); //Just output XML response
sr.Close();
s.Close();
resp.Close();
}
catch (Exception ex)
{
string excep = ex.ToString();
}
}
}
}