Ошибка AXL API Cisco Unified Call Manager (CUCM) при использовании в проекте C#.net
Я пытаюсь выполнить запрос SQL через API AXL в среде изолированной программной среды CUCM из моего приложения и получить результат запроса 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();
}
}
}
}
1 ответ
Я решил это. Я просто должен был заменить пару вещей:
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>";