J'ai rencontré un problème étrange en utilisant un client de service Web C# pour appeler un service Web ASP.NET 2.0. Le service est une recherche de produit simple et renvoie un tableau de produits correspondant à un terme de recherche - voir la partie pertinente du fichier WSDL ci-dessous.
Mon client C# est simplement généré en ajoutant une référence Web dans VS2010 (non-WCF) et à titre de comparaison, j'utilise un client Java Axis 1.4.
En utilisant les mêmes paramètres de recherche dans le client C# et le client Java, l'appel renvoie 50 produits mais dans le client C#, le tableau des résultats a une longueur de 1 tandis que le client Java affiche les 50 éléments corrects.Client de service Web Debug C#
Je cherche des suggestions comment trouver le problème - j'ai essayé ce qui suit:
- Comparez le code XML retourné par le webservice en utilisant un moniteur TCP/IP: XML semble identique C# par rapport à Java et contient les 50 produits
- Comparer les paramètres HTTP en utilisant netcat: C# par défaut à HTTP 1.1 tandis que l'Axe 1.4 utilise HTTP 1.0, mais changer le client C# pour utiliser HTTP 1.0 ne change rien
- Essayez SOAP 1.2 au lieu de SOAP 1.1: Aucun effet
- Essayez HttpGetPr otocol, HttpPostProtocol au lieu de savon
Toutes les suggestions sont très appréciées.
EDIT: WSDL complet et code généré (Reference.cs) se trouvent ici:
http://timmay.dk/Reference.txt
http://timmay.dk/Wsdl.txt
partie WSDL simplifié:
<s:element name="Search">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="SearchTerm" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="StartFrom" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="NumberToBeReturned" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="SearchResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="SearchResult" type="tns:SearchResult" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="SearchResult">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Products" type="tns:ArrayOfResponseProduct" />
</s:sequence>
</s:complexType>
<s:complexType name="ArrayOfResponseProduct">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="ResponseProduct" nillable="true" type="tns:ResponseProduct" />
</s:sequence>
</s:complexType>
<s:complexType name="ResponseProduct">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Fields" type="tns:ArrayOfResponseField" />
</s:sequence>
<s:attribute name="id" type="s:string" />
</s:complexType>
Comment le client C# récupère-t-il 50 produits avec seulement 1 élément de tableau? –
Le tableau * devrait * avoir une longueur de 50 mais a une longueur de 1. En regardant le code XML dans le moniteur TCP/IP, je peux voir tous les 50 produits retournés par le service - le résultat analysé est le problème. – Tim
Puisque les réponses évidentes ne vous aident pas, nous aurons besoin de regarder votre code généré, ou même un petit exemple de travail complet qui contient le bug (mais cela peut être un peu difficile dans cette situation). – Abel