我正在尝试通过我的应用程序在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();
}
}
}
}
答案 0 :(得分:0)
我解决了这个问题。我只需要替换几件事:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"https://xx.xx.xx.xx/https/0/xx.xx.xx.x/axl/");
带
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"https://xx.xx.xx.x:8443/axl/");
将我的strAXLRequest更改为
strAXLRequest += " <soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns=\"http://www.cisco.com/AXL/API/10.0\">";
strAXLRequest += " <soapenv:Header/>";
strAXLRequest += " <soapenv:Body>";
strAXLRequest += " <ns:executeSQLQuery sequence=\"?\">";
//strAXLRequest += " <sql>select * from device </sql>";
strAXLRequest += " <sql>" + SQLQuery + "</sql>";
strAXLRequest += " </ns:executeSQLQuery>";
strAXLRequest += " </soapenv:Body>";
strAXLRequest += " </soapenv:Envelope>";