Ik wil een collection doorgeven aan een webservice, maar nu vraagt de webservice telkens om een array van integers. Ik zal het probleem stap voor stap uitleggen:
Het eerste stuk code bevat de webmethod, die dus in de webservice staat. De body heb ik niet meegegeven, maar het gaat erom dat op basis van een verzameling personeelsnummers personen worden opgehaald. (De NrCollection is gemaakt op basis van een CollectionBase). Deze NrCollection is later nog belangrijk
Het tweede stuk code is de aanroep vanuit een applicatie die de webmethod aanspreekt:
Hierin is dus te zien dat ik de webmethod aanspreek en de juiste verzameling doorgeef, van het type NrCollection, precies zoals de webmethod verwacht.
En nu komt het gekke stuk code:
Hierboven is te zien dat in het door WSDL gegereneerde stuk code een int[] wordt verwacht ( public PersObj[] GetPersonenByNrs(int[] PersNrs) ) . Dit moet natuurlijk een NrCollection zijn. Maar dat is niet zo en daarom werkt dit stuk code ook niet.
Waarom wordt er een int[] gegenereerd en geen NrCollection, terwijl als ik dat handmatig aanpas, dan werkt alles wel goed.
Hoe kan ik ervoor zorgen dat WSDL snapt dat ik een NrCollection gebruik en geen int[] ?
Het eerste stuk code bevat de webmethod, die dus in de webservice staat. De body heb ik niet meegegeven, maar het gaat erom dat op basis van een verzameling personeelsnummers personen worden opgehaald. (De NrCollection is gemaakt op basis van een CollectionBase). Deze NrCollection is later nog belangrijk
C#:
1
2
3
4
| [WebMethod] public Personen GetPersonenByNrs(NrCollection PersNrs) { } |
Het tweede stuk code is de aanroep vanuit een applicatie die de webmethod aanspreekt:
C#:
1
2
3
4
5
6
7
8
9
10
| PersWebservice wsPers = new PersWebservice(); NrCollection PersNrs = new NrCollection(); PersNrs.Add(2207667); PersNrs.Add(2487058); PersObj[] personen = wsPers.GetPersonenByNrs(PersNrs); |
Hierin is dus te zien dat ik de webmethod aanspreek en de juiste verzameling doorgeef, van het type NrCollection, precies zoals de webmethod verwacht.
En nu komt het gekke stuk code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
| [System.Web.Services.Protocols.SoapDocumentMethodAttribute ("http://tempuri.org/GetGoederenByIDs", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] public PersObj[] GetPersonenByNrs(int[] PersNrs) { object[] results = this.Invoke( "GetPersonenByNrs", new object[] { PersNrs } ) ; return ((PersObj[])(results[0])); } |
Hierboven is te zien dat in het door WSDL gegereneerde stuk code een int[] wordt verwacht ( public PersObj[] GetPersonenByNrs(int[] PersNrs) ) . Dit moet natuurlijk een NrCollection zijn. Maar dat is niet zo en daarom werkt dit stuk code ook niet.
Waarom wordt er een int[] gegenereerd en geen NrCollection, terwijl als ik dat handmatig aanpas, dan werkt alles wel goed.
Hoe kan ik ervoor zorgen dat WSDL snapt dat ik een NrCollection gebruik en geen int[] ?