PlatformNotSupportedException при вызове метода веб-службы - PullRequest
0 голосов
/ 09 декабря 2010

Хорошо, я действительно озадачен этим. У меня есть это приложение 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)

Ответы [ 2 ]

1 голос
/ 09 декабря 2010

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

РЕДАКТИРОВАТЬ: Схема для DataSet должна указывать культуру через Microsoftрасширение схемы.Попробуйте добавить в свою схему объявление пространства имен

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

и атрибут

msdata:Locale=""

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

msdata:UseCurrentLocale="true"

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

0 голосов
/ 20 октября 2018

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

...