2012-04-26 15 views
0

Windows Mobile 6.5デバイスでCF 3.5で動作するクライアントコードがwcfサービスを呼び出そうとすると、次のエラーが発生します。WCF CFClientBaseシリアル化Stackoverflow例外?

VSでデバッガの下で実行しているときに例外が発生せず、電話機がUSBケーブルを介してPCに接続されていると、奇妙なことです...コールは期待通りに機能します。 ...

しかし、CFClientBaseコードを単独で実行すると、次のStackoverflow例外が生成されます。

これはすべてのサービスコールで起こります。それだけでなく、どんなアイデアですか?

StackOverflowException 

    at System.Reflection.CustomAttribute.GetObject() 
    at System.Reflection.CustomAttribute.CheckConsistencyAndCreateArray(CustomAttribute caItem, Type caType) 
    at System.Reflection.CustomAttribute.GetCustomAttributes(MemberInfo member, Type caType, Boolean inherit) 
    at System.Reflection.CustomAttribute.GetCustomAttributes(Type type, Type caType, Boolean inherit) 
    at System.RuntimeType.GetCustomAttributes(Boolean inherit) 
    at System.Xml.Serialization.TypeAttributes..ctor(ICustomAttributeProvider prov) 
    at System.Xml.Serialization.TypeAttributes..ctor(ICustomAttributeProvider prov, XmlAttributes xmlAtts) 

at System.Xml.Serialization.XmlSerializationReflector.AddType(Type type, Boolean encoded, String defaultNS, Boolean genericNullableArg) 
    at System.Xml.Serialization.XmlSerializationReflector.FindType(Type type, Boolean encoded, Boolean genericNullableArg, String defaultNamespace) 
    at System.Xml.Serialization.XmlSerializationReflector.FindType(Type type, Boolean encoded, String defaultNamespace) 
    at System.Xml.Serialization.XmlSerializationReflector.ResolveLiteralTypeUsingDeclaredType(Type memberType, String defaultNS, LogicalType& type, LogicalType& elementType, Boolean& isArray) 
    at System.Xml.Serialization.XmlSerializationReflector.ResolveLiteralType(String attrDataType, Type attrType, Type memberType, String defaultNS, Boolean& isArray, LogicalType& type, LogicalType& elementType) 
    at System.Xml.Serialization.XmlSerializationReflector.ReflectXmlElementAttributes(Type memberType, LogicalMemberValue memberValue, String memberName, LiteralAttributes attrProv, AccessorCollection memberAccessors, String defaultName, String defaultNS, Type& serializingType, Boolean& shouldBeOrdered) 
    at System.Xml.Serialization.XmlSerializationReflector.ReflectLiteralMemberValue(Type memberType, String memberName, LiteralAttributes attrProv, String defaultName, String defaultNS, IEntityFinder memberFinder, Boolean canRead, Boolean canWrite, Boolean& shouldBeOrdered) 
    at System.Xml.Serialization.XmlSerializationReflector.ReflectMemberValue(Type memberType, ICustomAttributeProvider attrProv, String defaultName, String defaultNS, IEntityFinder memberFinder, Fetcher fetcher, Fixup fixup, MemberValueCollection members, Boolean encoded, Boolean canRead, Boolean canWrite, Byte& specialType, Boolean& shouldBeOrdered) 
    at System.Xml.Serialization.XmlSerializationReflector.addComplexTypeMemberHelper(Type type, MemberInfo member, Boolean encoded, String defaultNS, Boolean& shouldBeOrdered, IEntityFinder choiceFinder, MemberValueCollection members, String typeNS, String defaultMemberNS, Int32& sequenceId) 
    at System.Xml.Serialization.XmlSerializationReflector.AddComplexType(Type type, TypeAttributes attrs, String typeName, String typeNS, Boolean typeIsNullable, Boolean encoded, String defaultNS, Boolean genericNullableArg) 
    at System.Xml.Serialization.XmlSerializationReflector.AddType(Type type, Boolean encoded, String defaultNS, Boolean genericNullableArg) 
    at System.Xml.Serialization.XmlSerializationReflector.FindType(Type type, Boolean encoded, Boolean genericNullableArg, String defaultNamespace) 
    at System.Xml.Serialization.XmlSerializationReflector.FindType(Type type, Boolean encoded, String defaultNamespace) 
    at System.Xml.Serialization.XmlSerializationReflector.ReflectIncludedTypes() 
    at System.Xml.Serialization.XmlSerializer..ctor(Type type, XmlAttributeOverrides overrides, Type[] extraTypes, XmlRootAttribute root, String defaultNamespace) 
    at Microsoft.Tools.ServiceModel.CFClientBase`1.CFContractSerializer.createSerializer(XmlQualifiedName wrapper) 
    at Microsoft.Tools.ServiceModel.CFClientBase`1.CFContractSerializer..ctor(CFContractSerializerInfo info) 
    at Microsoft.Tools.ServiceModel.CFClientBase`1.GetContractSerializer(CFContractSerializerInfo info) 
    at Microsoft.Tools.ServiceModel.CFClientBase`1.Invoke[TREQUEST,TRESPONSE](CFInvokeInfo info, LogIntoServerRequest request) 
    at WCFService.WOService.WOServiceClient.LogIntoServer(LogIntoServerRequest request) 
    at WCFService.WOService.WOServiceClient.LogIntoServer(SmartPhoneLoginCredentials creds) 
    at RescoMobileApp.Common.Classes.loginClass.LogIntoServer() 

編集

私が、ワイヤ全体にシリアライズするのDTOを使用していていても...どういうわけか私のEFエンティティークラスは、スキーマに送信されているように見えます?

サービスコールが行われたときに何らかの理由でそれらのタイプが構築されようとしていますか?

クラスをスキーマから保護するにはどうすればよいですか?エンティティの名前空間への参照がある場合、WCFがそれらのクラスをスキーマにプルするのに十分ですか?

答えて

0

通常、スタックオーバーフローの例外は、オブジェクトグラフで再帰問題が発生したときにシリアル化中に発生します。これは「無限ルックアップ」です。したがって、たとえば、のコレクションを持つClassがあります。各Studentは、いくつかのClassesを持ち、各Classは、Studentのコレクションを持ち、続きます。

問題はデバッガでは発生しませんので、これは私が記述したシナリオではないかもしれませんが、大きなオブジェクトグラフを持ち、グラフ全体をシリアル化しようとしているのと同じシナリオがあります。私はコンパクトなフレームワークについてはあまりよく分かりませんが、スタックが小さくなっている可能性があります(したがって、デバイスのスタックオーバーフローはVisual Studioではなく)。

どのようなリクエストをしていますか?明らかに、たくさんのデータをシリアル化しています。それはどれくらい深いですか?小さなデータセットでリクエストを動作させることはできますか?

私はもっと小さいリクエストを最初に試し、必要以上のデータをワイヤー(または「空」)で送信しているかどうかを確認することをお勧めします。

+0

すべてのリクエストが失敗します... 4つのプロパティを持つクラスの9インスタンスの非常に小さなオブジェクトグラフでも...電話でCFフレームワークを再ロードしようとします。おそらく1つまたは複数のDLLが間違ったバージョンまたは破損 –

+0

あなたは正しいです、SO例外はCF上の限られたメモリとスタックに起因していました....私が気づいていなかったエンティティをxsdドキュメントに含めて取り除いたのはそのトリックでした! –

0

エンティティタイプがWCFサービスインターフェイスに公開されていて、DataContractまたはDataMember属性でデコレートされていないことが判明したため、WCFサービスはネームスペース内のすべてのエンティティをONLYスカラプロパティの実体そのもの...

クラスにのDataContractを適用して、DataMembersは私が後だったと私はシリアル化さ

感謝をしたくなかった他のタイプのすべてを残し何私を得ました!

+0

'DataContract'と' DataMember'は実際には特定のオブジェクトとプロパティが直列化されていることを保証するためにのみ使用され、装飾されたものは除外されないため興味深いです。 –

関連する問題