在C#.net项目中使用时,Cisco Unified Call Manager(CUCM)AXL API抛出错误

时间:2014-11-12 09:49:23

标签: c# soap cucm cisco-axl

我正在尝试通过我的应用程序在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();
        }
    }

}

}

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。我只需要替换几件事:

  1. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"https://xx.xx.xx.xx/https/0/xx.xx.xx.x/axl/");

  2. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"https://xx.xx.xx.x:8443/axl/");

    1. 将我的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>";