PlatformNotSupportedException при вызове метода веб-службы

Хорошо, я действительно в тупике с этим. У меня есть это приложение Compact Framework, которое вызывает ваш стандартный веб-сервис .NET. Некоторое время это работало довольно хорошо, но недавно нас попросили заставить это программное обеспечение работать на другом устройстве Windows CE.

Похоже, что это новое устройство было произведено в Корее и имеет странную конфигурацию по умолчанию. Региональные настройки на панели управления показывают, что языковой стандарт установлен на английский (США), а в настройках «Язык пользовательского интерфейса» и «Язык ввода» также установлено это значение.

Хотя есть некоторые странные проблемы. В проводнике Windows обычные символы «\», которые используются для разделения папок, отображаются как перечеркнутая буква W. На небольшой панели ввода есть некоторые символы, которые также неверны, некоторые выглядят явно корейскими.

Проблема со всем этим заключается в том, что по какой-то причине я получаю исключение PlatformNotSupportedException при вызове метода веб-службы, который возвращает DataSet. В отладчике я вижу, что для CurrentUICulture правильно установлено значение «en-US», но почему-то это не мешает программе запускать эту проблему.

Я думаю, что корейский язык, установленный на устройстве, конфликтует с культурной конфигурацией веб-службы, но я не знаю подробностей и не знаю, как это исправить. Любая помощь будет принята с благодарностью. Спасибо.

Это полная трассировка стека:

    System.PlatformNotSupportedException -    at System.Globalization.CultureInfo..ctor(String name, Boolean useUserOverride)
   at System.Globalization.CultureInfo..ctor(String name)
   at System.Data.XSDSchema.HandleDataSet(XmlSchemaElement node, Boolean isNewDataSet)
   at System.Data.XSDSchema.LoadSchema(XmlSchemaSet schemaSet, DataSet ds)
   at System.Data.DataSet.ReadXSDSchema(XmlReader reader, Boolean denyResolving)
   at System.Data.DataSet.ReadXml(XmlReader reader, XmlReadMode mode, Boolean denyResolving)
   at System.Data.DataSet.ReadXmlSerializable(XmlReader reader)
   at System.Data.DataSet.System.Xml.Serialization.IXmlSerializable.ReadXml(XmlReader reader)
   at System.Xml.Serialization.XmlSerializationReader.DeserializeSerializableElement(LogicalType deserializeAs, Accessor accessor, Fixup fixup, Object fixupTarget, String identifier, Boolean emptyValue, Boolean nullValue)
   at System.Xml.Serialization.XmlSerializationReader.deserializeElement(Accessor accessor, Fixup fixup, Object fixupTarget)
   at System.Xml.Serialization.XmlSerializationReader.DeserializeElementMember(MemberValueCollection members, Object fixupTarget, Hashtable internalState, Boolean& firstElement)
   at System.Xml.Serialization.XmlSerializationReader.deserializeMembers(MemberValueCollection members, Object fixupTarget)
   at System.Xml.Serialization.XmlSerializationReader.DeserializeComplexElement(LogicalType deserializeAs, Accessor accessor, Fixup fixup, Object fixupTarget, String identifier, Boolean emptyValue, Boolean nullValue)
   at System.Xml.Serialization.XmlSerializationReader.deserializeElement(Accessor accessor, Fixup fixup, Object fixupTarget)
   at System.Xml.Serialization.XmlSerializationReader.DeserializeElementMember(MemberValueCollection members, Object fixupTarget, Hashtable internalState, Boolean& firstElement)
   at System.Xml.Serialization.XmlSerializationReader.deserializeMembers(MemberValueCollection members, Object fixupTarget)
   at System.Web.Services.Protocols.SoapMessageParser.execute()
   at System.Web.Services.Protocols.SoapMessageSerializer.Deserialize(XmlReader reader, SoapHttpClientProtocol client, LogicalSoapMethod soapMethod, Boolean soap12)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.doInvoke(String methodName, Object[] parameters, WebClientAsyncResult asyncResult)

person JayPea    schedule 08.12.2010    source источник


Ответы (2)


Язык и региональные параметры, которые вы пытаетесь использовать, не являются нейтральными, а базовая локаль Win32 не поддерживается операционной системой устройства. В любом случае, для веб-службы, разве вы не хотели бы использовать инвариантный язык и региональные параметры?

EDIT: схема для DataSet должна указывать культуру посредством расширения схемы Microsoft. Попробуйте добавить объявление пространства имен

xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"

к вашей схеме и атрибуту

msdata:Locale=""

к xs:element, представляющему корень DataSet, чтобы принудительно использовать инвариантную культуру; непустое строковое значение будет передано конструктору CultureInfo(string). В противном случае, если атрибут

msdata:UseCurrentLocale="true"

присутствует, будет использоваться текущая локаль устройства. Если ни один из атрибутов не присутствует, он жестко запрограммирован на LCID 0x0409, что соответствует английскому языку США.

person Jeffrey Hantin    schedule 08.12.2010
comment
Спасибо, на самом деле я не пытаюсь использовать какую-либо конкретную культуру, я хотел бы просто сказать веб-службе, чтобы она полностью игнорировала культуру, но я не знаю, как это сделать. Как заставить веб-службу использовать инвариантный язык и региональные параметры? - person JayPea; 09.12.2010

Вам нужно либо изменить целевую платформу на X64 или X32 в настройках сборки свойств CSproj, либо просто отключить упомянутое исключение System.PlatformNotSupportedException в настройках исключений в опции окна отладки.

person Edzel Buhisan    schedule 19.10.2018