2010-03-17 11 views
10

मेरे पास एक कक्षा है जिसे मुझे SQLServer सत्र चर में क्रमबद्ध करने और WCF सेवा पर उपलब्ध होने की आवश्यकता है। के रूप मेंमैं उसी वर्ग पर डब्ल्यूसीएफ डाटाकंट्रैक्ट और आईएसरियलज़ेबल का उपयोग क्यों नहीं कर सकता?

namespace MyNM 
{ 
[Serializable] 
[DataContract(Name = "Foo", Namespace = "http://www.mydomain.co.uk")] 

public class Foo : IEntity, ISafeCopy<Foo> 
{ 
    [DataMember(Order = 0)] 
    public virtual Guid Id { get; set; } 

    [DataMember(Order = 1)] 
    public virtual string a { get; set; } 

    DataMember(Order = 2)] 
    public virtual Bar c { get; set; } 

    /* ISafeCopy implementation */ 
} 


[Serializable] 
[DataContract(Name = "Bar ", Namespace = "http://www.mydomain.co.uk")] 
public class Bar : IEntity, ISafeCopy<Bar> 
{ 
    #region Implementation of IEntity 

    DataMember(Order = 0)] 
    public virtual Guid Id { get; set; } 
    [DataMember(Order = 1)] 
    public virtual Baz y { get; set; } 

    #endregion 

    /* ISafeCopy implementation*/ 
} 


[Serializable] 
[DataContract] 
public enum Baz 
{ 
    [EnumMember(Value = "one")] 
    one, 
    [EnumMember(Value = "two")] 
    two, 
    [EnumMember(Value = "three")] 
    three 
} 

इस प्रकार मैं इसे घोषित किया है लेकिन जब मैं कोशिश करते हैं और इस सेवा को कॉल, मैं ट्रेस लॉग में निम्न त्रुटि मिलता है।

"System.Runtime.Serialization.InvalidDataContractException: प्रकार 'BarProxybcb100e8617f40ceaa832fe4bb94533c' ISerializable नहीं हो सकता है और DataContractAttribute विशेषता हो सकता है।"

यदि मैं सीरियलज़ेबल विशेषता लेता हूं, तो डब्ल्यूसीएफ सेवा काम करती है, लेकिन जब ऑब्जेक्ट को सत्र में क्रमबद्ध नहीं किया जा सकता है। अगर मैं वर्ग बार से DataContract विशेषता निकालने के लिए, WCF सेवा कह विफल रहता है

प्रकार 'BarProxy3bb05a31167f4ba492909ec941a54533' साथ डेटा अनुबंध नाम 'BarProxy3bb05a31167f4ba492909ec941a54533: http://schemas.datacontract.org/2004/07/' की उम्मीद नहीं है। उदाहरण के लिए, उन्हें जाना जाता है प्रकार DataContractSerializer

के लिए पारित की सूची मैं जोड़ने की कोशिश की है को जोड़ने KnownTypeAttribute विशेषता का उपयोग करके या द्वारा - किसी भी प्रकार नहीं जाना जाता प्रकार की सूची को स्थिर जाना जाता जोड़े foo वर्ग के लिए एक KnownType विशेषता

[KnownType(typeof(Bar))] 

लेकिन मैं अभी भी एक ही त्रुटि मिलती है।

क्या कोई इस से मेरी सहायता कर सकता है?

बहुत धन्यवाद

डेव

उत्तर

8

MSDN पर यह सवाल मदद कर सकता है: DataContract versus Serializable

कि धागे से स्वीकार किए जाते हैं जवाब:

  1. [DataContract] और [Serializable] एक साथ इस्तेमाल किया जा सकता है।

  2. DataContractSerializer दोनों को समझता है। Data Transfer and Serialization

  3. : प्रकार उन दोनों के साथ चिह्नित है, तो यह [DataContract]

  4. यहाँ के प्रक्षेपण ले जाएगा आंकड़ा अंतरण और WCF में क्रमबद्धता पर डॉक्स जो serializers पर विस्तार का एक बहुत प्रदान करते हैं और ज्ञात प्रकार हैं

+0

धन्यवाद, मुझे अब इसका एक पठन होगा। – Dave

+0

धन्यवाद - अंत में, मैंने जो किया वह मेरी कक्षाओं की प्रतियां बना रहा और उन्हें सेवा में वापस कर दिया। – Dave

+2

फ़ोरम वर्तमान में रखरखाव के लिए नीचे दिए गए लिंक के बजाय वास्तविक उत्तर देने के लिए अच्छा होगा ... –

0

मैं wcf भर में इकाई ढांचे के लिए serialization के साथ एक ही समस्या में भाग गया। कुछ भी काम नहीं कर रहा था और जब मैं सदस्यों से वर्चुअल टैग को हटाने की कोशिश करता था तो मैं हार मानने वाला था। अचानक यह काम करना शुरू कर दिया। कोशिश करो।

1

मुझे पता है कि यह बहुत देर हो चुकी है, लेकिन अगर कोई इसे पढ़ता है, तो हमारे पास एक समान समस्या थी। डेटा कंट्रैक्ट को छोड़ने का हमारा समाधान इतना डब्ल्यूसीएफ धारावाहिक ठीक है, और फिर जब हमने SQL सर्वर सत्र में क्रमबद्ध किया, तो हमने ऑब्जेक्ट को JSON पर क्रमबद्ध किया और सत्र में लिखा।

संबंधित मुद्दे