好的,我真的很难过这个。我有这个Compact Framework应用程序,它调用您的标准.NET Web服务。这已经有一段时间了,但最近我们被要求让这个软件在另一个Windows CE设备上运行。
这款新设备似乎是在韩国制造的,并且有一些奇怪/错误的默认配置。控制面板上的区域设置显示区域设置设置为英语(美国),用户界面语言和输入语言设置也设置了此值。
但是有一些奇怪的问题。在Windows资源管理器中,用于分隔文件夹的常用'\'字符显示为划线W.小输入面板有一些字符也是错误的,有些字符看起来很清楚。
所有这一切的问题在于,在调用返回DataSet的Web Service方法时,由于某种原因,我得到了PlatformNotSupportedException。在调试器上,我可以看到CurrentUICulture已正确设置为“en-US”,但不知何故,这不会使程序无法解决此问题。
我认为设备上安装的韩语与Web服务的文化配置相冲突,但我对细节没有任何线索,我不知道如何解决它。任何帮助将不胜感激。感谢。
这是完整的堆栈跟踪:
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)
答案 0 :(得分: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
,即美国英语。
答案 1 :(得分:0)
您需要从CSproj属性构建设置中将目标平台更改为X64或X32,或者只需在调试窗口选项下的异常设置中关闭上述System.PlatformNotSupportedException。