0

好吧,我真的被这个难住了。我有这个 Compact Framework 应用程序,它调用您的标准 .NET Web 服务。这已经运行了一段时间,但最近我们被要求让这个软件在另一个 Windows CE 设备上运行。

这个新设备似乎是在韩国制造的,并且有一些奇怪/错误的默认配置。控制面板上的区域设置显示区域设置为英语(美国),并且用户界面语言和输入语言设置也设置了此值。

不过也有一些奇怪的问题。在 Windows 资源管理器中,用于分隔文件夹的常用“\”字符显示为划掉的 W。小输入面板中的一些字符也是错误的,有些看起来很明显是韩文。

所有这一切的问题在于,由于某种原因,在调用返回 DataSet 的 Web 服务方法时,我得到了 PlatformNotSupportedException。在调试器上,我可以看到 CurrentUICulture 已正确设置为“en-US”,但不知何故,这并不能阻止程序运行到这个问题。

我认为设备上安装的韩语与Web Service的文化配置冲突,但我不知道细节,也不知道如何解决。任何帮助将不胜感激。谢谢。

这是完整的堆栈跟踪:

    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)
4

2 回答 2

1

您尝试使用的文化不是中性文化,并且设备的操作系统不支持底层 Win32 语言环境。无论如何,对于 Web 服务,您不想使用不变的文化吗?

编辑:DataSet需要通过 Microsoft 架构扩展来指定文化的架构。尝试添加命名空间声明

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

到您的架构和属性

msdata:Locale=""

xs:element代表根的那个DataSet,强制使用不变的文化;非空字符串值将传递给CultureInfo(string)构造函数。否则,如果属性

msdata:UseCurrentLocale="true"

存在,无论设备的当前语言环境是什么,都将被使用。 如果两个属性都不存在,则将其硬编码为LCID 0x0409,即美国英语。

于 2010-12-08T23:23:14.303 回答
0

您要么需要从 CSproj 属性构建设置中将目标平台更改为 X64 或 X32,要么只需从调试窗口选项下的异常设置中关闭所述 System.PlatformNotSupportedException。

于 2018-10-19T21:03:45.637 回答