Я использую C # для чтения данных из 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."
[Edit] Вот полная трассировка стека:
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 находится в другом формате?