Ik ben bezig met de AXL toolkit voor Cisco Unified Communications Manager maar ik loop tegen een probleem aan. Met WSDL heb ik de vanuit de schema's een AXLAPIService.cs weten te generen, nu zaten hier nog een paar fouten in maar na deze aangepast te hebben werkt alles zonder problemen. Het bestand is echter 330000 regels code en ik gebruik er maar een paar. Dus ik heb het één en ander er uit gestript waardoor ik alleen nog de methode's en classes heb die ik gebruik.
Nu zou in theorie deze API backwards compatible moeten zijn, echter als ik die voor versie 10 op een versie 9.1 installatie gebruik krijg ik een foutmelding. Nu verschillen de API's maar eigenlijk op twee puntjes en dat is de namespace en de SoapDocumentMethodAttribute.
Een vergelijkbaar iets komt op nog 2 plekken voor. Verander ik hier overal de versie 10.0 naar 9.1 dan werkt hij probleemloos.
Het lukt mij echter niet om deze waarde variabel te maken, een if gebruiken op deze plek gaat niet omdat het in de root van de class is.
Ik heb geprobeerd deze allen naar voren te halen om te kijken of hij dan nog werkt maar dat is niet het geval. Blijkbaar moeten ze direct voor de methode waarbij ze horen aangeroepen worden. Kon ik ze wel naar voren halen dan kon ik ze eventueel allemaal in één methode gooien en daar doorheen lopen met welke versie ik moet hebben.
Waarschijnlijk zit ik veel te moeilijk te denken en is er een betere oplossing voor maar ik kom er niet op. Ik hoop dat jullie me op de goede weg weten te helpen.
Nu zou in theorie deze API backwards compatible moeten zijn, echter als ik die voor versie 10 op een versie 9.1 installatie gebruik krijg ik een foutmelding. Nu verschillen de API's maar eigenlijk op twee puntjes en dat is de namespace en de SoapDocumentMethodAttribute.
C#:
1
2
3
4
5
6
7
8
9
10
11
| public partial class AXLAPIService : System.Web.Services.Protocols.SoapHttpClientProtocol { //wat dingen weg gelaten [System.Web.Services.Protocols.SoapDocumentMethodAttribute("CUCM:DB ver=10.0 executeSQLQuery", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Bare)] [return: System.Xml.Serialization.XmlElementAttribute("executeSQLQueryResponse", Namespace = "http://www.cisco.com/AXL/API/10.0")] public ExecuteSQLQueryRes executeSQLQuery([System.Xml.Serialization.XmlElementAttribute("executeSQLQuery", Namespace = "http://www.cisco.com/AXL/API/10.0")] ExecuteSQLQueryReq executeSQLQuery1) { object[] results = this.Invoke("executeSQLQuery", new object[] { executeSQLQuery1}); return ((ExecuteSQLQueryRes)(results[0])); } } |
Een vergelijkbaar iets komt op nog 2 plekken voor. Verander ik hier overal de versie 10.0 naar 9.1 dan werkt hij probleemloos.
Het lukt mij echter niet om deze waarde variabel te maken, een if gebruiken op deze plek gaat niet omdat het in de root van de class is.
Ik heb geprobeerd deze allen naar voren te halen om te kijken of hij dan nog werkt maar dat is niet het geval. Blijkbaar moeten ze direct voor de methode waarbij ze horen aangeroepen worden. Kon ik ze wel naar voren halen dan kon ik ze eventueel allemaal in één methode gooien en daar doorheen lopen met welke versie ik moet hebben.
Waarschijnlijk zit ik veel te moeilijk te denken en is er een betere oplossing voor maar ik kom er niet op. Ik hoop dat jullie me op de goede weg weten te helpen.