调用Web Service方法时的PlatformNotSupportedException

时间:2010-12-08 22:21:06

标签: web-services compact-framework cultureinfo platform

好的,我真的很难过这个。我有这个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)

2 个答案:

答案 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。