0

わかりました、私はこれに本当に困惑しています。標準の .NET Web サービスを呼び出すこの Compact Framework アプリケーションがあります。これはしばらくの間うまく機能していましたが、最近、このソフトウェアを別の Windows CE デバイスで動作させるように依頼されました。

この新しいデバイスは韓国で製造されたようで、奇妙な/バグのあるデフォルト設定がいくつかあります。コントロール パネルの地域設定では、ロケールが英語 (米国) に設定されており、ユーザー インターフェイス言語と入力言語の設定にもこの値が設定されています。

ただし、いくつかの奇妙な問題があります。Windows エクスプローラーでは、フォルダーを区切るために使用される通常の「\」文字は、取り消し線が引かれた W として表示されます。小さな入力パネルには、間違っている文字もあり、明らかに韓国語に見えるものもあります。

これらすべての問題は、DataSet を返す Web サービス メソッドを呼び出すときに、何らかの理由で 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)
4

2 に答える 2

1

使用しようとしているカルチャはニュートラルカルチャではなく、基盤となるWin32ロケールはデバイスのOSでサポートされていません。いずれにせよ、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 に答える