Я использую С# для чтения данных из Java-веб-сервиса.
Я создал ссылку на службу в VS2008 для сервера и могу вызвать единственный метод, который там есть. Однако некоторые из возвращаемых полей имеют тип Decimal, и поскольку автоматически сгенерированный прокси-сервер WCF возвращает XML, он завершается ошибкой с сообщением CommunicationException:
"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."
[Изменить] Вот полная трассировка стека:
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)
Я вижу, что возвращаемое десятичное число отформатировано с пунктуацией как десятичное число. В целях тестирования я попробовал Decimal.Parse("123.99") и получил ту же ошибку. Установив
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
перед моим тестовым кодом для Decimal.Parse("123.99") я получаю это.
Однако установка CurrentCulture перед вызовом метода WCFService не имеет никакого значения.
Есть ли способы заставить мой прокси-объект WCFService понять, что возвращенный XML находится в другом культурном формате?