J'utilise C# pour lire des données à partir d'un service Web Java.Modifier la culture lors de la désérialisation du service WCF
J'ai créé une référence de service dans VS2008 sur le serveur, et je peux appeler la méthode qui existe. Cependant, quelques-uns des champs retournés sont de type décimal, et que le proxy WCF généré automatiquement obtient XML arrière, il échoue avec une CommunicationException disant:
"Error in deserializing body of reply message for operation 'getOpenReceivables'."
"There is an error in XML document (1, 941)."
"Input string was not in a correct format."
[Modifier] Voici une stacktrace complète:
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.Decimal.Parse(String s, NumberStyles style, IFormatProvider provider)
at System.Xml.XmlConvert.ToDecimal(String s)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderExecutePortType.Read2_XXNG_OPEN_RECEIVABLES(Boolean isNullable, Boolean checkType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderExecutePortType.Read3_Item()
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer.Deserialize(XmlSerializationReader reader)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
Je peux voir que le nombre décimal retourné est formaté avec une ponctuation comme décimal. À des fins de test j'ai essayé un Decimal.Parse ("123.99") et ai eu la même erreur. En réglant un
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
avant mon code de test pour Decimal.Parse ("123.99") Je commence à travailler. Toutefois, la définition de CurrentCulture avant d'appeler la méthode WCFService ne fait aucune différence.
Y a-t-il des moyens pour que mon objet proxy WCFService puisse comprendre que le XML renvoyé se trouve dans un autre format de culture?
En fait, je suis le problème corrigé en éditant le fichier xsd m'a été donnée par le gars qui a fait le webservice. (Vous avez un fichier .wsdl et deux .xsd). Vous avez eu des points puisque cela semble être une bonne solution et un bon lien, mais je ne l'ai pas vraiment essayé. –
Vous devriez avoir au moins collé le code le plus pertinent de l'article de blog - le lien est mort –
désolé @CamiloTerevinto - il était il y a près de 7 ans quand j'ai écrit ceci, bien avant le "doit coller le code avec les liens" la pratique a été formalisée. J'ai trouvé le blog sur Internet Archive et mis à jour ma réponse avec le lien d'archive plus un extrait d'échantillon de code. –