Created by: Keith Lunn on 18-12-2009 08:09:09 PM Hello, CUCM 6.13 I have a program that gets all phones devices using AXL and then submits the phones to RISport to get status and ip address. The program worked perfectly on a small test cluster of 43 devices; it had one AXL request and one RISport request. Next the programn was tested on a larger cluster that had 2,200 phone devices. The AXL fetch worked perefectly and collected all 2,200 devices. Then the devices were processed in groups of 200. (The SOAP Specification WSDL reveals that you can return no more than 200 records per CallManager device). After each RISport request the program sleeps for 6 seconds (so not to exceed the RIS Request limit of 15 per minute). The first bacth of 200 devices were submitted and the HTTP Status return code was 200 (HTTP OK). The return XML was processed OK and the phone status and ip address collected ok. Then the 2nd batch of 200 phones was submitted (after sleeping 6 seconds) and it immediately returned HTTP Status code 500 and failed. I checked the SOAP Monitor and the second batch request was not seen; apparently you only see requests that it deems valid and it is going to process:https://server:8443/realtimeservice/SOAPMonitor However, the first batch request was success and showed in the monitor. I checked the SOAP Web Service log with RTMT and it only shows the first batch of devices, but it does not show the second set of devices submitted which returned http status code 500. It appears that this tool also does not provide any information on a request that returns http status 500. Q: How does one troubleshoot this issue since there does not appear to be any logging mechanism to look at when you get a http status return of 500? I even tried increasing my sleep timer to 65 seconds- still get return code 500 when i submit the 2nd batch of phones. I have also dumped the xml request for the 1st and 2nd batches and they are identical except for the device names listed, and also i have verified their xml format in IE and Firefox - no issues with xml format. Help!!!!!!! Thanks, Keith
Subject: RE: RIS Request Returns Code 500 Replied by: Keith Lunn on 22-12-2009 08:22:07 PM Well I managed to get my program working, there was an issue with a Microsoft COM object created to send the https request. Once I corrected that, the program is working fine now on all our clusters. However, if anyone knows if there is log one could look at or review to help diagnose a http status return code 500, that would be helpful in the future!!
Subject: RE: RIS Request Returns Code 500 Replied by: Keith Lunn on 22-12-2009 08:52:01 PM CUCM 6.13 - RISPort ¿ Lessons Learnt RISPort requests are sent to: <a>https://cucm-publisher:8443/realtimeservice/services/RisPort</a>] HTTP Header requires: (JScript Example) var strRISRequest = "http://schemas.cisco.com/ast/soap/action/#RisPort#SelectCmDevice"; intSoapPayloadLength = strSoapPayload.length; objHttp.open("POST", strRISServerURL, false, strUID, strPassw); // POST Method, asynchronous=false objHttp.setRequestHeader("Content-Type", "text/xml"); objHttp.setRequestHeader("Accept", "text/*"); objHttp.setRequestHeader("SOAPAction", strRISRequest); objHttp.setRequestHeader("Content-length", intSoapPayloadLength); Example RISPort Request: Notes: tns:SelectItem ¿ x = number of array items you are coding, in this example there are 3 devices: tns:SelectItem[3] AstHeader ¿ not required in 6.x, however it¿s a good idea to code it as it may be required in future releases. The SessionID used was an incremented integer, incremented by 1 after each RISport request ¿ all works fine. MaxReturnedDevices: Set to a maximum value of 200. This limits the amount of device status records that can be returned by any one CallManager device. The SOAP WSDL for RISport has a specification which restricts the array of device status records from any one CallManager device to 200 items. The RISport WSDL: <a>https://server:8443/realtimeservice/services/RisPort?wsdl</a>] Duplicate Status records: CallManagers can return duplicate status records for a device if the device has failed over from one subscriber to another. The original subscriber will issue a status record showing ¿Unregistered¿ and the new subscriber will issue a status record showing ¿Registered¿. Your program logic must account for this scenario. Check the TimeStamp field on the device status record and if you detect duplicates, only keep the status record which has the newest timestamp. Eventually, the duplicate ¿Unregistered¿ status records expire and are removed from cache (the expiry time was not measured and is unknown at this time). Data Throttling: There can be a max of 15 RISport requests per minute, therefore this translates into one every 4 seconds. If you are sending the max of 200 device status requests per fetch, then the max devices you can request per minute are 3,000. An example cluster had 13,299 phone devices. Execution time was 8 minutes and 34 seconds. After the end of each RISport request, code your program to sleep for at least 4 seconds. <?xml version="1.0" encoding="UTF-8" ?> - <soap:Envelope xmlns:soap="<a>http://schemas.xmlsoap.org/soap/envelope/</a>]" xmlns:soapenc="<a>http://schemas.xmlsoap.org/soap/encoding/</a>]" xmlns:tns="<a>http://schemas.cisco.com/ast/soap/</a>]" xmlns:types="<a>http://schemas.cisco.com/ast/soap/encodedTypes</a>]" xmlns:xsi="<a>http://www.w3.org/2001/XMLSchema-instance</a>]" xmlns:xsd="<a>http://www.w3.org/2001/XMLSchema</a>]"> - <soap:Header> - <tns:AstHeader> <SessionId xsi:type="xsd:string">606</SessionId> </tns:AstHeader> </soap:Header> - <soap:Body soap:encodingStyle="<a>http://schemas.xmlsoap.org/soap/encoding/</a>]"> - <tns:SelectCmDevice> <StateInfo xsi:type="xsd:string" /> - <tns:CmSelectionCriteria xsi:type="tns:CmSelectionCriteria"> <MaxReturnedDevices xsi:type="xsd:unsignedInt">200</MaxReturnedDevices> <Class xsi:type="xsd:string">Phone</Class> <Model xsi:type="xsd:unsignedInt">255</Model> <Status xsi:type="xsd:string">Any</Status> <NodeName xsi:type="xsd:string" /> <SelectBy xsi:type="xsd:string">Name</SelectBy> - <SelectItems soapenc:arrayType="tns:SelectItem[3]" xsi:type="soapenc:Array"> - <item xsi:type="tns:SelectItem"> <Item xsi:type="xsd:string">SEP00070EEA52A6</Item> </item> - <item xsi:type="tns:SelectItem"> <Item xsi:type="xsd:string">SEP0009B7AA1E87</Item> </item> - <item xsi:type="tns:SelectItem"> <Item xsi:type="xsd:string">SEP6173458045AA</Item> </item> </SelectItems> </tns:CmSelectionCriteria> </tns:SelectCmDevice> </soap:Body> </soap:Envelope>
Subject: RE: RIS Request Returns Code 500 Replied by: Girisha Srinivasa on 13-10-2011 11:38:10 PM Hi Keith,
Is it possible to share the code. Even i am trying to get the list of devices from cucm. Not sure how do i that.
Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community: